将LibreOffice作为服务运行 [英] Running libreoffice as a service

查看:22
本文介绍了将LibreOffice作为服务运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个Web应用程序,该应用程序执行文件从docpdf格式的转换。

我一直在使用安装在同一台服务器上的LibreOffice和我的Web应用程序。通过从我的Web应用的代码中取出并调用libreoffice二进制文件,我能够成功转换文档。

问题:当我的Web应用程序在很短的时间内(例如毫秒)收到多个进行doc->pdf转换的HTTP请求时,调用libreoffice无法同时启动多个实例。这会导致某些文件转换成功,而另一些文件则转换不成功。

我认为这个问题的解决方案是这样的:

  1. 启动libreoffice服务一次,请确保它接受连接,
  2. 在我的Web应用程序中处理HTTP请求时,与正在运行的libreoffice服务交谈,请求它执行文件格式转换,
  3. 通过向某个CLI工具发出命令,或者通过向端口或套接字文件发送libreofficeAPI请求等其他方式,可以促进"对话"部分。

经过一些研究,我发现了一个名为jodconverter的CLI工具。从中,我可以使用jodconverter-cli转换文件。转换可以工作,但不幸的是,jodconverter将在执行转换后停止libreoffice服务器(关于这一点有一个未解决的issue)。我看不到关闭此行为的方法。

或者,我正在考虑以下选项:

  1. 在我的Web应用程序中,请确保所有转换请求都已排队;这显然会破坏并发性,例如,我的用户将不得不等待文件转换,

  2. 进一步研究并使用名为UNO的东西,但是我正在使用的语言(Elixir)没有绑定,我似乎看不到手动构造UNO负载的方法。

如何通过UNO将libreoffice用作服务?

推荐答案

我最终选择了并行启动多个libreoffice实例的an advice。这是通过添加-env:UserInstallation=file:///tmp/...命令行变量来实现的:

libreoffice -env:UserInstallation=file:///tmp/delete_me_#{timestamp} 
            --headless 
            --convert-to pdf 
            --outdir /tmp 
            /path/to/my_file.doc

该建议本身出现在对GitHub上名为"Parallel conversions and synchronization"的问题的长时间讨论中。

这篇关于将LibreOffice作为服务运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆