Custom Transformations ¿Cómo?

cancel
Showing results for 
Search instead for 
Did you mean: 
magarcia_sm
Active Member II

Custom Transformations ¿Cómo?

Hola Buenos días

Necesito declarar una transformación entre TIFF y PDF para que ejecute un comando que extraiga mediante OCR la información contenida en el TIFF y la muestre en el PDF.

En la versión 4.2 ¿qué pasos y cómo debo hacer esto?

He estado buscando en la documentación de Alfresco, y la verdad es que no encuentro ningún manual que lo explique un poco.

Lo que yo he hecho hasta el momento ha sido

1) Crear un fichero OCR-FR-transformers-context.xml con el siguiente contenido:


<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>

    <bean id="transformer.worker.tiff2pdf" class="org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker">
        <property name="mimetypeService">
            <ref bean="mimetypeService" />
        </property>
        <property name="checkCommand">
            <bean class="org.alfresco.util.exec.RuntimeExec">
                <property name="commandsAndArguments">
                    <map>
                        <entry key=".*">
                            <list>
                                <value>abbyyocr9</value>
                            </list>
                        </entry>
                    </map>
                </property>
            </bean>
        </property>

        <property name="transformCommand">
            <bean class="org.alfresco.util.exec.RuntimeExec">
                <property name="commandsAndArguments">
                    <map>
                        <entry key=".*">
                            <list>
                                <value>
                                    abbyyocr9 -rl Spanish -fm -rdss -afoe -if ${source} -f PDF -pfpf LZWGray -pem ImageOnText -pfpr 300 -prl -of ${target}
                                </value>
                            </list>
                        </entry>
                    </map>
                </property>
                <property name="errorCodes">
                    <value>1,2</value>
                </property>
            </bean>
        </property>

        <property name="explicitTransformations">
            <list>
                <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                    <property name="sourceMimetype"><value>image/tiff</value></property>
                    <property name="targetMimetype"><value>application/pdf</value></property>
                </bean>
            </list>
        </property>
    </bean>

    <bean id="transformer.tiff2pdf" class="org.alfresco.repo.content.transform.ProxyContentTransformer" parent="baseContentTransformer">
        <property name="worker">
            <ref bean="transformer.worker.tiff2pdf" />
        </property>
    </bean>

    <bean id="transformer.worker.Jpg2pdf" class="org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker">
        <property name="mimetypeService">
            <ref bean="mimetypeService" />
        </property>
        <property name="checkCommand">
            <bean class="org.alfresco.util.exec.RuntimeExec">
                <property name="commandsAndArguments">
                    <map>
                        <entry key=".*">
                            <list>
                                <value>abbyyocr9</value>
                            </list>
                        </entry>
                    </map>
                </property>
            </bean>
        </property>

        <property name="transformCommand">
            <bean class="org.alfresco.util.exec.RuntimeExec">
                <property name="commandsAndArguments">
                    <map>
                        <entry key=".*">
                            <list>
                                <value>
                                    abbyyocr9 -if ${source} -f PDF -pfpf JpegColor -pem ImageOnText -pfpr 200 -pfq 100 -prl -of ${target}
                                </value>
                            </list>
                        </entry>
                    </map>
                </property>
                <property name="errorCodes">
                    <value>1,2</value>
                </property>
            </bean>
        </property>

        <property name="explicitTransformations">
            <list>
                <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                    <property name="sourceMimetype"><value>image/jpeg</value></property>
                    <property name="targetMimetype"><value>application/pdf</value></property>
                </bean>
            </list>
        </property>
    </bean>

    <bean id="transformer.Jpg2pdf" class="org.alfresco.repo.content.transform.ProxyContentTransformer" parent="baseContentTransformer">
        <property name="worker">
            <ref bean="transformer.worker.Jpg2pdf" />
        </property>
    </bean>

</beans>


El fichero lo hemos introducido en /classes/alfresco/extension

2) Hemos añadido el siguiente código al web-client-config-custom.xml


    <config evaluator="string-compare" condition="Action Wizards" replace="false">

        <transformers>

            <transformer name="image/tiff"/>

        </transformers>

    </config>


La transformación a pdf la está haciendo correctamente y no da ningún error, pero no la está haciendo con OCR, parece que la hace con la transformación que tiene por defecto Alfresco.

¿Algo más que debamos realizar?


Gracias
4 Replies
angelborroy
Alfresco Employee

Re: Custom Transformations ¿Cómo?

Esto es para 5.1, pero debería valer igual: https://github.com/Alfresco/alfresco-sdk-samples/tree/alfresco-51/all-in-one/custom-content-transfor...

O también podrías desarrollar una acción simple y configurar una regla en la carpeta (https://github.com/keensoft/alfresco-simple-ocr). Si incluyes un transformador cualquier TIFF (sea de texto o no) será pasado por este OCR.
Hyland Developer Evangelist
magarcia_sm
Active Member II

Re: Custom Transformations ¿Cómo?

Hola

he conseguido hacer que Alfresco ejecute nuestra transformación tiff/pdf quitando el replace="false" de la entrada config evaluator del web-client-config-custom.xml.

El problema ahora es que cuando intenta ejecutar la transformación nos da el siguiente error:

org.alfresco.service.cmr.repository.ContentIOException: 02220014 Content conversion failed:
   reader: ContentAccessor[ contentUrl=store://2016/3/22/19/8/c645e8f5-ef22-43a1-b593-eef80fb702b3.bin, mimetype=image/tiff, size=113244, encoding=UTF-8, locale=es_CL]
   writer: ContentAccessor[ contentUrl=store://2016/3/22/19/8/4cf527dd-d17f-41ef-843f-262b9c744357.bin, mimetype=application/pdf, size=0, encoding=UTF-8, locale=es_CL]
   options: {targetContentProperty={http://www.alfresco.org/model/content/1.0}name, contentReaderNodeRef=workspace://SpacesStore/16875bd0-0039-48a0-a670-8d3b87e21fc3, contentWriterNodeRef=workspace://SpacesStore/de83616b-0433-420c-84e2-e18c731aae1b, sourceContentProperty={http://www.alfresco.org/model/content/1.0}name, use=null, includeEmbedded=false}
   limits:


En el fichero alfresco.log no aparece nada más.

He probado a ejecutar el comando abbyocr9 que ejecuta la transformación tiff/pdf en el command line de linux y funciona correctamente….

¿hay algún fichero que me estoy dejando atrás y que debería configurar también?

Gracias
angelborroy
Alfresco Employee

Re: Custom Transformations ¿Cómo?

Quizá sean los parámetros. En el link que te incluí en la respuesta anterior, hay un addon que hace prácticamente lo mismo que quieres hacer. En concreto, en
https://github.com/keensoft/alfresco-simple-ocr/blob/master/simple-ocr-repo/src/main/amp/config/alfr...
puedes ver cómo mapeamos nosotros los argumentos de la línea de comandos.

También hay que tener en cuenta el entorno en el que se ejecuta el proceso, ya que Alfresco incluye sus propios PATHS y librerías cuando lanza un programa desde Java.

En cualquier caso, siempre es recomendable activar las trazas de debug para poder identificar el problema.
Hyland Developer Evangelist
magarcia_sm
Active Member II

Re: Custom Transformations ¿Cómo?

Gracias por la respuesta Ángel,

El problema parece ser que si que tenía que ver con la forma en la que pasabamos los parámetros. Al final conseguimos que funionase con el siguiente código.


<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>

    <bean id="transformer.tiff2pdf" class="org.alfresco.repo.content.transform.ProxyContentTransformer" parent="baseContentTransformer">
        <property name="worker">
            <ref bean="transformer.worker.tiff2pdf" />
        </property>
    </bean>

    <bean id="transformer.worker.tiff2pdf" class="org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker">
        <property name="mimetypeService">
            <ref bean="mimetypeService" />
        </property>
        <property name="checkCommand">
            <bean class="org.alfresco.util.exec.RuntimeExec">
                <property name="commandsAndArguments">
                    <map>
                        <entry key=".*">
                            <list>
                                <value>abbyyocr9</value>
                            </list>
                        </entry>
                    </map>
                </property>
            </bean>
        </property>

        <property name="transformCommand">
            <bean class="org.alfresco.util.exec.RuntimeExec">
                <property name="commandsAndArguments">
                    <map>
                        <entry key=".*">
                            <list>
                                <value>abbyyocr9</value>
                                <value>-rl</value>
                                <value>Spanish</value>
                                <value>-fm</value>
                                <value>-rdss</value>
                                <value>-afoe</value>
                                <value>-if</value>
                                <value>${source}</value>
                                <value>-f</value>
                                <value>PDF</value>
                                <value>-pfpf</value>
                                <value>LZWGray</value>
                                <value>-pem</value>
                                <value>ImageOnText</value>
                                <value>-pfpr</value>
                                <value>300</value>
                                <value>-prl</value>
                                <value>-of</value>
                                <value>${target}</value>
                            </list>
                        </entry>
                    </map>
                </property>
                <property name="errorCodes">
                    <value>1,2</value>
                </property>
            </bean>
        </property>

        <property name="explicitTransformations">
            <list>
                <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                    <property name="sourceMimetype"><value>image/tiff</value></property>
                    <property name="targetMimetype"><value>application/pdf</value></property>
                </bean>
            </list>
        </property>
    </bean>



    <bean id="transformer.worker.Jpg2pdf" class="org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker">
        <property name="mimetypeService">
            <ref bean="mimetypeService" />
        </property>
        <property name="checkCommand">
            <bean class="org.alfresco.util.exec.RuntimeExec">
                <property name="commandsAndArguments">
                    <map>
                        <entry key=".*">
                            <list>
                                <value>abbyyocr9</value>
                            </list>
                        </entry>
                    </map>
                </property>
            </bean>
        </property>

        <property name="transformCommand">
            <bean class="org.alfresco.util.exec.RuntimeExec">
                <property name="commandsAndArguments">
                    <map>
                        <entry key=".*">
                            <list>
                                <value>abbyyocr9</value>
                                <value>-if</value>
                                <value>${source}</value>
                                <value>-f</value>
                                <value>PDF</value>
                                <value>-pfpf</value>
                                <value>JpegColor</value>
                                <value>-pem</value>
                                <value>ImageOnText</value>
                                <value>-pfpr</value>
                                <value>200</value>
                                <value>-pfq</value>
                                <value>100</value>
                                <value>-prl</value>
                                <value>-of</value>
                                <value>${target}</value>
                            </list>
                        </entry>
                    </map>
                </property>
                <property name="errorCodes">
                    <value>1,2</value>
                </property>
            </bean>
        </property>

        <property name="explicitTransformations">
            <list>
                <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                    <property name="sourceMimetype"><value>image/jpeg</value></property>
                    <property name="targetMimetype"><value>application/pdf</value></property>
                </bean>
            </list>
        </property>
    </bean>

    <bean id="transformer.Jpg2pdf" class="org.alfresco.repo.content.transform.ProxyContentTransformer" parent="baseContentTransformer">
        <property name="worker">
            <ref bean="transformer.worker.Jpg2pdf" />
        </property>
    </bean>

</beans>