在Alfresco中运行转换脚本

时间:2012-10-19 01:56:31

标签: pdf ocr alfresco tesseract alfresco-share

为什么我的转换脚本不会在第一个文件之外的任何上传文件上运行?

我在Alfresco中设置了一个侦听文件夹的转换规则。当一个新文件放入该文件夹时,该规则触发一个脚本运行,该脚本将获取没有文本层的PDF,将其分解为jpeg,对jpeg进行OCR,然后将jpegs转换为PDF并合并PDF,返回OCRed PDF然后使用文本图层将结果复制到另一个文件夹中,以便我们知道它已完成。

在命令行运行脚本有效。我第一次将文件放入Alfresco文件夹(上传)时,它会运行脚本并复制文件。但是随后我将文件放入文件夹,脚本不会运行,但文件仍然会复制到目标文件夹。所以我知道正在调用规则,但脚本似乎没有在以下文件上运行。我已经登录了脚本,所以我知道脚本甚至没有被调用。该规则适用于没有过滤器的文件夹中的所有新文件和已修改文件。然后,它使用我们的自定义OCR脚本运行转换和复制命令,并将目标文件夹定义为父文件夹。

以下是我的露天转型扩展:

<?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.PdfOCRTool" class="org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker">
    <property name="mimetypeService">
      <ref bean="mimetypeService"/>
    </property>
    <property name="transformCommand">
      <bean name="transformer.pdftoocr.Command" class="org.alfresco.util.exec.RuntimeExec">
        <property name="commandMap">
     <map>
          <entry key=".*">
                <value>/opt/ocr/ocr.sh ${source} ${target}</value>
            </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>application/pdf</value>
          </property>
          <property name="targetMimetype">
            <value>application/pdf</value>
          </property>
        </bean>
      </list>
    </property>
  </bean>

  <bean id="transformer.proxy.PdfOCRTool" class="org.alfresco.repo.management.subsystems.SubsystemProxyFactory">
    <property name="sourceApplicationContextFactory">
      <ref bean="thirdparty"/>
    </property>
    <property name="sourceBeanName">
      <value>transformer.worker.PdfOCRTool</value>
    </property>
    <property name="interfaces">
      <list>
        <value>org.alfresco.repo.content.transform.ContentTransformerWorker</value>
      </list>
    </property>
  </bean>
  <bean id="transformer.PdfOCRTool" class="org.alfresco.repo.content.transform.ProxyContentTransformer" parent="baseContentTransformer">
    <property name="worker">
      <ref bean="transformer.proxy.PdfOCRTool"/>
    </property>
  </bean>
</beans>

1 个答案:

答案 0 :(得分:0)

转换服务旨在将项目从一种mimetype转换为另一种mimetype。我不确定从PDF转换为第二个PDF是否有效。您最好实现自定义Java存储库操作,然后使用org.alfresco.util.exec.RuntimeExec bean来触发命令。

由于你的Spring配置已经定义了一个RuntimeExec bean,你可以重用这个定义,而是将它包装在你自己的扩展org.alfresco.repo.action.executer.ActionExecuterAbstractBase的自定义类中。事实上,如果您查看org.alfresco.repo.action.executer.TransformActionExecuter的来源,那么可能会为您提供有关如何实施的一些线索。