1

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

我在 Alfresco 中设置了一个监听文件夹的转换规则。当一个新文件被放入文件夹时,该规则会触发一个脚本运行,该脚本获取一个没有文本层的 PDF,将其分解为 jpeg,对 jpeg 进行 OCR,然后将 jpeg 转换为 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>
4

1 回答 1

0

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

由于您的 Spring 配置已经定义了一个RuntimeExecbean,您可以重新使用此定义,但将其包装在您自己的自定义类中 extends org.alfresco.repo.action.executer.ActionExecuterAbstractBase。实际上,如果您查看org.alfresco.repo.action.executer.TransformActionExecuterthen 的来源,可能会为您提供一些关于如何实施事物的线索。

于 2012-10-25T11:27:35.303 回答