【发布时间】:2020-05-16 03:39:07
【问题描述】:
我正在构建一个 Web 应用程序,其中包括将文件从 doc 转换为 pdf 格式。
我一直在使用安装在同一台服务器上的 LibreOffice 以及我的 Web 应用程序。通过从我的网络应用程序的代码中取出并调用libreoffice 二进制文件,我能够成功地转换文档。
问题:当我的 web 应用程序在很短的时间(例如毫秒)内收到多个 doc->pdf 转换的 HTTP 请求时,调用 libreoffice 无法同时启动多个实例.这会导致一些文件被成功转换,而另一些则没有。
我认为这个问题的解决方案是这样的:
- 启动
libreoffice服务一次,确保它接受连接, - 在我的 Web 应用程序中处理 HTTP 请求时,与正在运行的
libreoffice服务通信,要求它执行文件格式转换, - “谈话”部分可以通过使用某些 CLI 工具或通过其他方式(例如向端口或套接字文件发送
libreofficeAPI 请求)来实现。
经过一番研究,我发现了一个名为 jodconverter 的 CLI 工具。从中,我可以使用jodconverter-cli 来转换文件。转换工作,但不幸的是jodconverter 将在转换完成后停止libreoffice 服务器(有一个开放的issue 关于那个)。我看不到关闭此行为的方法。
或者,我正在考虑以下选项:
在我的网络应用程序中,确保所有转换请求都已排队;这显然会破坏并发性,例如我的用户将不得不等待他们的文件被转换,
-
进一步研究并使用名为 UNO 的东西,但是我使用的语言 (Elixir) 没有绑定,而且我似乎看不到手动构建 UNO 有效负载的方法。
李>
如何使用 UNO 将libreoffice 用作服务?
【问题讨论】:
-
如果你指的是 docx 格式,你可以试试 Elixir 的 pandoc 包装器。
标签: web libreoffice openoffice.org file-conversion uno