JODConverter 出现问题并在无头模式下运行 LibreOffice

Posted

技术标签:

【中文标题】JODConverter 出现问题并在无头模式下运行 LibreOffice【英文标题】:Issue with JODConverter and running LibreOffice in headless mode 【发布时间】:2013-08-16 02:37:30 【问题描述】:

我正在使用以下代码使用 JOD 将 .doc 转换为 .pdf。

File inputFile = new File("document.doc");
File outputFile = new File("document.pdf");

// connect to an OpenOffice.org instance running on port 8100
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
connection.connect();

// convert
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(inputFile, outputFile);

// close the connection
connection.disconnect();

但我必须跑

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

单独以无头模式启动 LibreOffice。

有没有办法以编程方式启动 LibreOffice?或者,我们不能将 LibreOffice 文件夹的路径提供给 JOD 进行转换吗?

【问题讨论】:

JODconverter 3.0 似乎可以在需要时启动 LibreOffice,请参阅code.google.com/p/jodconverter/wiki/GettingStarted。 【参考方案1】:

您根本不需要 JOD 即可将 doc 文件转换为 PDF。这可以直接使用 LibreOffice 完成:

libreoffice --headless --convert-to pdf document.doc

【讨论】:

【参考方案2】:

一种方法是包装你的 cmd 指令

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

作为 java 进程,请参阅this 关于 SO 的问题。

解决方案可能是:

 File inputFile = new File("document.doc");
 File outputFile = new File("document.pdf");

 String[] args = "cmd","/c","\\path to libreoffice executable","-headless",  "-accept='socket,host=127.0.0.1,port=8100;urp;'", "-nofirststartwizard";

 try
   Runtime rt = Runtime.getRuntime();
   ProcessBuilder pb = new ProcessBuilder(args);
   Process pr = pb.start();   

   // connect to an OpenOffice.org instance running on port 8100
   OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
   connection.connect();
 catchException e)
 

 // convert
 DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
 converter.convert(inputFile, outputFile);

 // close the connection
 connection.disconnect();

它是临时的且未经测试的解决方案,但它可能会起作用。 另一种选择是使用 cmd 命令在 windows 中创建批处理文件或在 linux 中创建 shell 脚本,并将其设置为在 windows 或 linux 登录时自动启动。之后按原样执行您的代码...

【讨论】:

为什么将 libreoffice 包装在 cmd 中?这应该是多余的。

以上是关于JODConverter 出现问题并在无头模式下运行 LibreOffice的主要内容,如果未能解决你的问题,请参考以下文章

在无头模式下使用 Firefox 改进 scrapy 和 selenium

无法在无头模式下运行 Firefox

无头 Chrome 驱动程序不适用于 Selenium

在无头模式下运行 Chrome

无法连接到 OpenOffice 无头模式

有没有办法在无头模式下运行 QtWebEngine