【问题标题】:JODConverter issuesJOD转换器问题
【发布时间】:2012-07-26 02:21:00
【问题描述】:

我正在使用 JODConverter 库 V 3.0 Beta 4 和 Open Office 3.4 并尝试将一些文件转换为 PDF/A-1 格式。然而,在办公室经理进程启动后,它只是挂起,没有任何反应。这是输出:

Jul 26, 2012 12:04:03 PM org.artofsolving.jodconverter.office.ProcessPoolOfficeManager <init>
INFO: ProcessManager implementation is PureJavaProcessManager

C:\Users\Chris\AppData\Local\Temp\ArFile\PDF\blah.pdf : C:\Users\Chris\Documents\blah.txt

Jul 26, 2012 12:04:04 PM org.artofsolving.jodconverter.office.OfficeProcess start
INFO: starting process with acceptString 'socket,host=127.0.0.1,port=2002,tcpNoDelay=1' and profileDir 'C:\Users\Chris\AppData\Local\Temp\.jodconverter_socket_host-127.0.0.1_port-2002'
Jul 26, 2012 12:04:04 PM org.artofsolving.jodconverter.office.OfficeProcess start
INFO: started process

中间一行是打印输出文件名和输入文件名的输出,用冒号隔开,可以看到都是有效值...

这是我的转换器类:

package com.allcare.arfile;

import com.sun.star.beans.PropertyValue;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.document.DocumentFamily;
import org.artofsolving.jodconverter.document.DocumentFormat;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;


public class FileConverter 
{
OfficeManager officeManager;
String tempFilePath;

public FileConverter() 
{
    officeManager = new DefaultOfficeManagerConfiguration()
            //.setRetryTimeout(30000L)
            //.setTaskExecutionTimeout(60000L)
            .buildOfficeManager();
    tempFilePath = System.getProperty("java.io.tmpdir") + "\\ArFile\\PDF\\";
}

// if possible this function converts a file to a PDF/A-1 compliant file
public File convertToPdf(File inputFile, Log logger, User user)
{        
    if (isConvertableToPDF(inputFile.getName())) // REMEMBER TO CHANGE THE IF STATEMENT IN THE createMetadata() section to reflect this 
    {
        new File(tempFilePath).mkdirs();
        String filename = inputFile.getName();
        filename = filename.substring(0, filename.lastIndexOf("."));

        File outputFile = new File(tempFilePath + filename + ".pdf");

        System.out.println(outputFile + " : " + inputFile);

        officeManager.start(); // may tweak the start and stop code to appear elsewhere for additional efficiency

        DocumentFormat docFormat = new DocumentFormat("Portable Document Format", "pdf", "application/pdf");
        Map map = new HashMap();
        map.put("FilterName", "writer_pdf_Export");
        PropertyValue[] aFilterData = new PropertyValue[1];
        aFilterData[0] = new PropertyValue();
        aFilterData[0].Name = "SelectPdfVersion";
        aFilterData[0].Value = 1;
        map.put("FilterData", aFilterData);
        docFormat.setStoreProperties(DocumentFamily.TEXT, map);

        OfficeDocumentConverter docConverter = new OfficeDocumentConverter(officeManager);
        docConverter.convert(inputFile, outputFile, docFormat);

        officeManager.stop();

        return outputFile;
    }

    return inputFile;
}

// returns true if the file format is known to be convertible into the PDF/A-1 format
public boolean isConvertableToPDF(String filename)
{
    if (filename.endsWith(".doc") || filename.endsWith(".txt") || filename.endsWith(".xls") 
            || filename.endsWith(".ppt") || filename.endsWith(".docx"))
    {
        return true;
    }

    return false;
}

}

我正在使用 java 套接字,在我使用套接字之前,转换器工作得很好,但是在我更改为套接字之后它开始挂起。我不知道为什么...

【问题讨论】:

    标签: java sockets netbeans japplet jodconverter


    【解决方案1】:

    问题可能出在这里:

    officeManager.start(); // may tweak the start and stop code ...
    

    如果代码正在等待启动的进程完成,它可能会等到您终止 OpenOffice 服务,之后它会导致程序的其余部分失败。 确保在后台服务中启动该服务,以便主程序可以继续。或者手动启动 OpenOffice 服务器(在您的程序之外)。不要waitFor(),因为服务永远不会结束。

    您上面的System.out.println() 确实被打印出来了,所以它仍然可以工作。

    【讨论】:

    • 好的,那么我应该什么时候调用 start() 以及如何将它作为后台进程运行?我应该在启动程序时调用它,然后在程序完成执行后终止它吗?
    • ive 现在因为尝试使用他们在其网站上提供的示例中的一个极其简单的案例。程序在 start() 函数之后仍然挂起。我试过重新安装 JODConverter 和 Open Office 都没有成功,似乎决定不工作......我认为某处发生了故障......
    【解决方案2】:

    重启电脑后问题自行解决,我不知道为什么....

    【讨论】:

      【解决方案3】:

      我们一直在开发一个具有即时转换功能的项目,我们也偶然发现了这个奇怪的问题。解决方案是使用 sigar 进程管理器而不是纯 java 进程管理器。它更加健壮和一致,但它需要本地库。

      【讨论】:

        【解决方案4】:

        似乎这是您选择的端口的问题,我知道我遇到过类似使用 java 套接字对象的时髦东西。

        【讨论】:

        • 我认为它与产生的 JODConverter 服务有关,我不得不强制终止该过程几次,我猜这一定会导致问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-27
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        相关资源
        最近更新 更多