发行与JODConverter和无头模式下运行的LibreOffice(Issue with JOD

2019-10-18 12:30发布

我使用下面的代码转换.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的文件夹约旦第纳尔做转换?

Answer 1:

一种方法是来包装你的CMD指令

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

作为Java的过程中,看到这对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();
 }catch{Exception e){
 }

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

 // close the connection
 connection.disconnect();

这是临时和未测试的解决方案,但它可能工作。 另一种选择是让在Linux在Windows批处理文件或shell脚本与你的cmd命令,并将其设置为自动启动在Windows或Linux登录。 之后执行代码,因为它是...



Answer 2:

你不需要在约旦第纳尔所有DOC文件转换为PDF。 这可以用LibreOffice中直接完成:

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


文章来源: Issue with JODConverter and running LibreOffice in headless mode