【发布时间】:2019-06-02 08:34:58
【问题描述】:
使用 debian 9.5、python 3.5、libreoffice 5.2、x86_64 架构。
我有一个 22 页的 word 文件 (docx),其中包含几个图表。
当使用 bash 从终端运行时,以下命令可以正常工作,即生成一个 22 页的 pdf 文件:
/usr/bin/libreoffice --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx
输出:
使用过滤器转换 /tmp/docx5/output.docx -> /tmp/docx5//output.pdf : writer_pdf_Export
问题如下:使用 subprocess.run 从 python 执行的相同外部命令生成的 pdf 文件只有一页,而不是 22 页,没有错误消息。
没有其他 libreoffice 实例正在运行。
cmd = '/usr/bin/libreoffice --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx'
print(subprocess.run(cmd, shell=True, check=True))
这是这个 python 脚本的输出:
使用过滤器转换 /tmp/docx5/output.docx -> /tmp/docx5//output.pdf : writer_pdf_Export
CompletedProcess(args='/usr/bin/libreoffice --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx', returncode=0)
貌似pdf生成成功了,但是只转换了docx文件的第一页
当从python启动的libreoffice遇到第一个图表时,pdf的生成似乎终止了。
libreoffice 是否需要 java 运行时来生成 pdf?
libreoffice 的无头操作会不会有问题?
有什么提示吗?
更新:
在从 python 运行修改后的脚本时添加了“env:UserInstallation”选项:
cmd = '/usr/bin/libreoffice -env:UserInstallation=file:///home/marco/ --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx'
print(subprocess.run(cmd, shell=True, check=True))
输出如下,现在它包含关于找不到 java 运行时环境的警告:
javaldx:找不到 Java 运行时环境!
警告:无法从 javaldx 读取路径
使用过滤器转换 /tmp/docx5/output.docx -> /tmp/docx5//output.pdf : writer_pdf_Export
CompletedProcess(args='/usr/bin/libreoffice -env:UserInstallation=file:///home/marco/ --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx', returncode=0)
你知道如何通过命令行参数指定 libreoffice 可以找到它需要的 java 运行时环境吗?
【问题讨论】:
标签: python pdf virtualenv libreoffice