Problème (insoluble ?) pour transformer TIF ou PDF en texte

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

Problème (insoluble ?) pour transformer TIF ou PDF en texte

Bonjour à tous,

Sachez tout d'abord que je suis tout nouveau sur Alfresco et que je galère de manière insoupçonnable depuis 15 jours avant que je me décide à poster ici !
Ma config :
Ubuntu 10.04 LTS sous VMware ESXi 4.0
Alfresco 3.4-d

Je cherche à convertir mes PDF ou TIF (qui proviennent d'un copieur réseau) en format texte (au pire…mais ça suffira). Je pense avoir TOUT fait ! : (dans le désordre)
1. Installation de tous les outils nécessaires (moult installations pour avoir un truc clean qui passe comme un charme aux logs) : tesseract, cuneiform, imagemagick, les lib qui vont avec ;
2. Réalisation des bashes qui me font le travail (PDF images en PDF textes, TIF en PDF) : tout fonctionne nickel en ligne de commande ;
3. Intégration dans Alfresco (tous les fichiers de …/extension passent l'init sans problème et mes "transformers" sont bien reconnus par l'application) ;

Là où je commence à pester :
1. La conversion des PDF en texte (normalement native ?) me renvoie des fichiers vides ! (ça c'est au boulot, chez moi, sur une Ubuntu 10.10, ça fonctionne sans problème) ;
2. Impossible de faire fonctionner mes scripts bash intégrés dans Alfresco (alors qu'ils fonctionnent du tonner en ligne de commande), y'a toujous un truc qui lui plait pas !!! (le dernier étant "ImageMagick: no decode delegate for this image format", tiff en l'occurrence)

Je ne sais plus où donner de la tête (et surtout pour le PDF en texte qui me suffiraient dans l'immédiat, et vu que ça fonctionne très bien à la maison !)

J'ai tout positionné les variables pour loguer ce qui se passe, mais rien n'apparaît lors de la transformation PDF -> TXT et j'ai toujours une erreur de librairie TIFF à l'exécution du script sous Alfresco (alors que, je le rappelle, il fonctionne parfaitement en ligne de commande).

Pitié, sauvez moi, je ne sais plus que faire…
10 Replies
chaloupe
Member II

Re: Problème (insoluble ?) pour transformer TIF ou PDF en texte

Re-bonjour,

Je reviens un peu à la charge parce que ça n'a pas l'air d'inspirer grand monde. Je vais essayer d'être un peu plus concis.
J'ai un petit shell qui prend 2 paramètres en entrée : monshell.sh fic_cible.pdf fic_source.tif
J'ai créé le fichier XML suivant dans alfresco/…/extension :

<?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.convert2pdf" 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>ls</value>
                <value>monshell.sh</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>monshell.sh</value>
                <value>${target}</value>
                <value>${source}</value>
              </list>
            </entry>
          </map>
        </property>
        <property name="errorCodes">
          <value>1,2,3</value>
        </property>
      </bean>
    </property>
    <property name="explicitTransformations">
      <list>
        <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
          <property name="targetMimetype"><value>application/pdf</value></property>
          <property name="sourceMimetype"><value>image/tiff</value></property>
        </bean>
      </list>
    </property>
  </bean>
  <bean id="transformer.convert2pdf" class="org.alfresco.repo.content.transform.ProxyContentTransformer" parent="baseContentTransformer">
    <property name="worker">
      <ref bean="transformer.worker.convert2pdf" />
    </property>
  </bean>
</beans>

Là où j'ai un doute, c'est sur l'utilisation de ${source} et ${target}.
Il est dit dans le Wiki que "le mécanisme de transformation effectue la substitution des variables ${source} et ${target} qui sont le chemin complet des fichiers source et cible pour la transformation."  :shock:  Et ils viennent d'où ces éléments  :?:

Quelqu'un peut-il m'éclairer un peu plus sur ce seul point svp ?

Merci d'avance !
rivarola
Active Member

Re: Problème (insoluble ?) pour transformer TIF ou PDF en texte

Bonjour,

Quand Alfresco fait une transformation via un exécutable (ou shell), il génère un fichier temporaire dans lequel il écrit le contenu du fichier à transformer, et il crée un second fichier temporaire, vide, que doit remplir l'utilitaire appelé en ligne de commande. Les deux fichier, référencés par leur chemin complet, sont injectés respectivement à la place des varaibles ${source} et ${target}. Le shell doit donc lire ce qui est dans source et écrire dans target.
Pour commencer, je conseille de ne pas utiliser la notion de "checkCommand", et d'utiliser une ligne de commande d'exécution sur une seule ligne, genre :
            <property name="commandMap">
               <map>
                  <entry key=".*">
                     <value>"${pdf2fif.exe}" "${source}" "${target}"</value>
                  </entry>
               </map>
            </property>

Ensuite, il faut bien faire attention aux espaces contenus dans les chemins (d'où les guillemets). Enfin, je conseille de mettre le chemin de l'exécutable ou du script dans une variable injectée dans la configuration (ici pdf2fif.exe) et de bien mettre le chemin complet du script dans la valeur de cette variable (dans alfresco-global.properties par exemple).

Pour finir, dans votre cas particulier, il existe déjà dans Alfresco un transformer pdf->image mais il n'est pas défini comme "explicite" donc le vôtre devrait être prioritaire.
chaloupe
Member II

Re: Problème (insoluble ?) pour transformer TIF ou PDF en texte

Bonjour rivarola, et merci de votre réponse.

J'avais effectivement vu ces 2 fichiers temporaires qui étaient impliqués dans l'erreur de transformation du reste. Et je comprends maintenant la genèse des variables ${source} et ${target}.
J'ai donc fait copie du premier pour lui appliquer l'exécutable (qui, soit dit en passant, convertit les TIF en PDF, et pas le contraire). Et ça fonctionne tout à fait bien en ligne de commande  :?
Alors je cerne mal l'erreur ! Plusieurs pistes :
- mon shell génère des fichiers temporaires qu'il supprime en fin de traitement : est-ce que ça peut poser problème ?
- un problème de droits, de variable d'environnement (je pense que c'est OK de ce côté mais, bon…) ?
- peut-être un bête problème de syntaxe et, pour être plus précis, je vais suivre vos conseils sur le "checkCommand", les variables, etc… et voir si je progresse.

En attendant de vous tenir au courant, encore merci pour la piste !
chaloupe
Member II

Re: Problème (insoluble ?) pour transformer TIF ou PDF en texte

Bon, je reviens à la charge car ça ne fonctionne toujours pas  :?

J'ai tout repris de A à Z, installation du serveur, des outils, d'Alfresco…encore plus propre qu'avant !
J'ai suivi vos conseils concernant les fichiers de config et j'ai simplifié en utilisant tesseract (/usr/local/bin/tesseract '${source}' '${target}' -l fra) dans le fichier XML. Donc, plus de shell, plus de fichiers intermédiaires, etc…
Ça plante lamentablement dans l'interface web avec l'erreur suivante :
Échec d'exécution des actions en raison d'une erreur : 02240005 Content conversion failed: reader: ContentAccessor[ contentUrl=store://2011/3/24/9/48/9c276683-e3bc-4d2d-b507-4212b869d9e5.bin, mimetype=image/tiff, size=36297, encoding=utf-8, locale=fr_FR] writer: ContentAccessor[ contentUrl=store://2011/3/24/10/7/bdbe9917-4570-449f-a559-470320f09795.bin, mimetype=text/plain, size=0, encoding=utf-8, locale=fr_FR] options: org.alfresco.service.cmr.repository.TransformationOptions@16cf7d

J'ai donc édité le log qui me donne l'erreur suivante :
command:    [/usr/local/bin/tesseract '/opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_1810799005975260108.tiff' '/opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_984944748146190831.txt' -l fra]
   succeeded:  false
   exit code:  1
   out:
   err:        Cannot run program "/usr/local/bin/tesseract '/opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_1810799005975260108.tiff' '/opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_984944748

J'ai reproduit la même commande en console (exactement la même !) et là, pas d'erreur  :shock:

La seule piste que j'ai c'est que la ligne de commande me créé un fichier avec extension ".txt.txt" alors que le fichier cible généré par Alfresco à l'extension ".txt".

Franchement, à ce stade, je désespère de parvenir un jour à effectuer cette transformation…

Peut être cela vous inspire-t-il des suggestions, une idée ??

Toute aide serait grandement appréciée. Merci par avance !
dranakan
Active Member

Re: Problème (insoluble ?) pour transformer TIF ou PDF en texte

chaloupe
Member II

Re: Problème (insoluble ?) pour transformer TIF ou PDF en texte

Bonjour,

J'avais lu beaucoup de choses, mais pas encore ça !
J'étudie et si je trouve quelque chose d'intéressant, je ne manquerai pas de vous en faire part.

Encore merci
rivarola
Active Member

Re: Problème (insoluble ?) pour transformer TIF ou PDF en texte

Cannot run program "/usr/local/bin/tesseract '/opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_1810799005975260108.tiff' '/opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_984944748

Je vois un guillemet " après Cannot run program mais pas de guillemet à la fin de la ligne. C'est un oubli ? Comme il n'y a aucun espace dans vos chemins vous pouvez aussi essayer d'enlever tous les guillemets et toutes les apostrophes.

Autre question bête : l'utilisateur qui exécute le tomcat a-t-il le droit de lancer tesseract et de créer un fichier dans /opt/alfresco/tomcat/temp/Alfresco ?

Sinon, pour voir où ça coince, vous pouvez activer les logs de debug de la classe Alfresco :
log4j.logger.org.alfresco.util.exec=debug à mettre dans le fichier log4j.properties

Note : tesseract ajoute tout seul l'extension .txt au bout du nom qu'on lui donne. Ca ne conviendra donc pas à Alfresco qui va, suite au lancement de la commande, va lire le contenu du fichier qui a exactement le nom passé dans ${target}. Idéalement il faut donc lancer tesseract, puis un mv pour renommer le fichier généré par tesseract (ou, encore mieux, lancer un script depuis Alfresco, script qui enlèverait le .txt à la fin du paramètre ${target} avant de le passer à tesseract).
chaloupe
Member II

Re: Problème (insoluble ?) pour transformer TIF ou PDF en texte

Pour les guillemets, j'ai tout essayé : simples, doubles, avec, sans…
Il en manque 1 en fin de ligne car le log est tronqué (manque la fin du nom du fichier temporaire aussi). J'ai très exactement ça :
Execution result:
   os:         Linux
   command:    [/usr/local/bin/tesseract /opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_7900163767779157229.tiff /opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_7260624471556303033.txt -l fra]
   succeeded:  false
   exit code:  2
   out:
   err:        Cannot run program "/usr/local/bin/tesseract /opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_7900163767779157229.tiff /opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_726062447155
Pour les droits, le root est propriétaire du process tomcat et, au cas ou, j'ai modifié les droits du répertoire temporaire pour l'ouvrir à tout le monde.

Je vais essayer le débogage à ce niveau (je le fais déjà au niveau log4j.logger.org.alfresco.util.exec.RuntimeExec et log4j.logger.org.alfresco.repo.content.transform.ContentTransformerRegistry)

Effectivement, je ne vois plus que l'extension erronée comme piste. Mais, la version "encore mieux", franchement, j'en suis pas encore à ce niveau ! Déjà, je ne vois pas comment et surtout à quel moment lancer un script sur un fichier temporaire…c'est chaud pour le timing. Je vais plutôt tenter le mv pour l'instant Smiley Surprisedops: (même si je ne vois pas clairement en quoi ça peut être gênant)

Bon, j'y retourne ! Et encore merci,
chaloupe
Member II

Re: Problème (insoluble ?) pour transformer TIF ou PDF en texte

Bon, les dernières nouvelles :

J'ai créé un script qui supprime l'extension du fichier cible passé en paramètre à tesseract (${target} donc ?) et l'ai intégré à mes transformers. Toujours la même erreur ! Rien de plus dans alfresco.log que ce que j'avais avant.

Au cas ou ça inspire quelqu'un, voici le log complet :
09:08:25,559 DEBUG [org.alfresco.util.exec.RuntimeExec] Execution result:
   os:         Linux
   command:    [/opt/ocr/tess.sh /opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_2897038883445268694.tiff /opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_1061058392742626629.txt -l fra]
   succeeded:  false
   exit code:  2
   out:
   err:        Cannot run program "/opt/ocr/tess.sh /opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_2897038883445268694.tiff /opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_1061058392742626629.
09:08:25,695 ERROR [org.alfresco.web.ui.common.Utils] Ãchec d'exécution des actions en raison d'une erreur : 02250001 Content conversion failed:
   reader: ContentAccessor[ contentUrl=store://2011/3/24/9/48/9c276683-e3bc-4d2d-b507-4212b869d9e5.bin, mimetype=image/tiff, size=36297, encoding=utf-8, locale=fr_FR]
   writer: ContentAccessor[ contentUrl=store://2011/3/25/9/8/ae048154-750c-444d-83fe-7bb33239942b.bin, mimetype=text/plain, size=0, encoding=utf-8, locale=fr_FR]
   options: org.alfresco.service.cmr.repository.TransformationOptions@11fe5db
org.alfresco.service.cmr.repository.ContentIOException: 02250001 Content conversion failed:
   reader: ContentAccessor[ contentUrl=store://2011/3/24/9/48/9c276683-e3bc-4d2d-b507-4212b869d9e5.bin, mimetype=image/tiff, size=36297, encoding=utf-8, locale=fr_FR]
   writer: ContentAccessor[ contentUrl=store://2011/3/25/9/8/ae048154-750c-444d-83fe-7bb33239942b.bin, mimetype=text/plain, size=0, encoding=utf-8, locale=fr_FR]
   options: org.alfresco.service.cmr.repository.TransformationOptions@11fe5db
        at org.alfresco.repo.content.transform.AbstractContentTransformer2.transform(AbstractContentTransformer2.java:177)
        at org.alfresco.repo.content.ContentServiceImpl.transform(ContentServiceImpl.java:555)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:80)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.alfresco.repo.model.ml.MLContentInterceptor.invoke(MLContentInterceptor.java:125)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:44)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.alfresco.repo.audit.AuditMethodInterceptor.proceed(AuditMethodInterceptor.java:160)
        at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:137)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
        at $Proxy45.transform(Unknown Source)
        at org.alfresco.repo.action.executer.TransformActionExecuter.doTransform(TransformActionExecuter.java:305)
        at org.alfresco.repo.action.executer.TransformActionExecuter.executeImpl(TransformActionExecuter.java:270)
        at org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(ActionExecuterAbstractBase.java:133)
        at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(ActionServiceImpl.java:749)
        at org.alfresco.repo.action.ActionServiceImpl.executeActionImpl(ActionServiceImpl.java:675)
        at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:540)
        at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:526)
        at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:758)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:34)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:44)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.alfresco.repo.audit.AuditMethodInterceptor.proceedWithAudit(AuditMethodInterceptor.java:217)
        at org.alfresco.repo.audit.AuditMethodInterceptor.proceed(AuditMethodInterceptor.java:184)
        at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:137)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
        at $Proxy37.executeAction(Unknown Source)
        at org.alfresco.web.bean.actions.RunActionWizard.finishImpl(RunActionWizard.java:95)
        at org.alfresco.web.bean.dialog.BaseDialogBean$1.execute(BaseDialogBean.java:118)
        at org.alfresco.web.bean.dialog.BaseDialogBean$1.execute(BaseDialogBean.java:114)
        at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:381)
        at org.alfresco.web.bean.dialog.BaseDialogBean.finish(BaseDialogBean.java:124)
        at org.alfresco.web.bean.wizard.WizardManager.finish(WizardManager.java:593)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
        at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
        at javax.faces.component.UICommand.broadcast(UICommand.java:109)
        at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
        at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
        at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
        at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:104)
        at sun.reflect.GeneratedMethodAccessor506.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:116)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
        at $Proxy239.doFilter(Unknown Source)
        at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:82)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.alfresco.repo.web.filter.beans.NullFilter.doFilter(NullFilter.java:68)
        at sun.reflect.GeneratedMethodAccessor506.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:116)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
        at $Proxy239.doFilter(Unknown Source)
        at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:82)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:58)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:619)
Caused by: org.alfresco.service.cmr.repository.ContentIOException: 02250000 Transformation failed - status indicates an error:
Execution result:
   os:         Linux
   command:    [/opt/ocr/tess.sh /opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_2897038883445268694.tiff /opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_1061058392742626629.txt -l fra]
   succeeded:  false
   exit code:  2
   out:
   err:        Cannot run program "/opt/ocr/tess.sh /opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_2897038883445268694.tiff /opt/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_1061058392742626629.
        at org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker.transform(RuntimeExecutableContentTransformerWorker.java:272)
        at org.alfresco.repo.content.transform.ProxyContentTransformer.transformInternal(ProxyContentTransformer.java:68)
        at org.alfresco.repo.content.transform.AbstractContentTransformer2.transform(AbstractContentTransformer2.java:161)
        … 104 more

Ah, deux autres choses :
1. Alfresco modifie aussi l'extension ".tif" en ".tiff". Pourquoi, je ne sais pas ?
2. La commande ne tient pas compte du chemin complet du fichier cible. Ce dernier est généré dans le répertoire à partir duquel je lance le script qui ne tient compte que du nom du fichier et pas du path complet.