gmi*_*ile 2 openoffice.org file-conversion uno libreoffice web
我正在构建一个 Web 应用程序,除其他外,它执行文件从格式doc到pdf格式的转换。
我一直在使用安装在同一台服务器上的 LibreOffice 以及我的 Web 应用程序。通过libreoffice从我的 Web 应用程序的代码中删除和调用二进制文件,我能够成功转换文档。
问题:当我的 Web 应用程序在很短的时间内(例如毫秒)收到多个用于 doc->pdf 转换的 HTTP 请求时,调用libreoffice无法一次启动多个实例。这会导致一些文件被成功转换,而有些则没有。
我认为这个问题的解决方案是这样的:
libreoffice服务一次,确保它接受连接,libreoffice服务对话,要求它执行文件格式转换,libreofficeAPI 请求发送到端口或套接字文件)来促进。经过一番研究,我找到了一个名为jodconverter. 从它,我可以jodconverter-cli用来转换文件。转换有效,但不幸的是jodconverter会libreoffice在执行转换后停止服务器(有一个未解决的问题)。我没有看到关闭这种行为的方法。
或者,我正在考虑以下选项:
在我的网络应用程序中,确保所有转换请求都已排队;这显然会破坏并发性,例如我的用户将不得不等待他们的文件被转换,
进一步研究并使用称为UNO 的东西,但是我使用的语言(Elixir)没有绑定,我似乎看不到手动构建 UNO 有效负载的方法。
如何libreoffice使用 UNO 作为服务使用?
我最终提出了libreoffice并行启动多个实例的建议。这通过添加-env:UserInstallation=file:///tmp/...命令行变量来实现:
libreoffice -env:UserInstallation=file:///tmp/delete_me_#{timestamp} \
--headless \
--convert-to pdf \
--outdir /tmp \
/path/to/my_file.doc
Run Code Online (Sandbox Code Playgroud)
该建议本身是在对 GitHub 上一个名为“并行转换和同步”的问题的长时间讨论中发现的。