使用debian 9.5、Python3.5、libreoffice 5.2、x86_64 arch。
我有一个22页的word文件(docx),其中包含几个图表。
使用bash从终端运行时,以下命令正常工作,即生成22页的pdf文件:
/usr/bin/libreoffice --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx
输出:
转换 /tmp/docx5/output.docx-
问题如下:使用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-
完成进程(args='/usr/bin/libreoffice-----------------------------------------------------------------------------------------------------------
显然,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-
CompletedProcess(args='/usr/bin/libreoffice-env:UserInstallation=file:///home/marco/ --headless--转换为pdf--outdir/tmp/docx5//tmp/docx5/output.docx',returncode=0)
关于如何指定thorugh命令行参数,libreoffice可以在其中找到它所需要的java运行时环境,有什么想法吗?
另外,对于遇到此问题的其他人,您会收到错误消息的原因是,由子进程使用并传递给libreoffice的path变量不足以找到jre。我遇到了同样的问题,并将其更改为以下内容,似乎可以解决它。
subprocess.run(cmd, env={'HOME':'/home/username'})
我找到了一个解决方案,尽管我不清楚技术原因:
这项工作(使用libreoffice of docx文件和图表完成pdf生成):
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/lib/jvm/java-10-oracle/bin:/usr/lib/jvm/java-10-oracle/db/bin /usr/bin/libreoffice -env:UserInstallation=file:///tmp/docx5/ --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx
这不起作用(使用带图表的docx文件的libreoffice生成部分pdf):
PATH=/home/marco/venv/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/lib/jvm/java-10-oracle/bin:/usr/lib/jvm/java-10-oracle/db/bin /usr/bin/libreoffice -env:UserInstallation=file:///tmp/docx5/ --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx
pythonvirtualenv似乎与libreoffice产生了某种冲突。我使用了strace,但没有发现任何有用的东西。
因此,我的案例的解决方案是,在从python调用libreoffice时,从path环境变量中删除virtualenv路径,这可以通过停用virtualenv来实现:
marco@pc:~$ source venv/bin/activate
...
(venv) marco@pc:~$ deactivate && /usr/bin/libreoffice -env:UserInstallation=file:///tmp/docx5/ --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx
我想用apache poi转换一个docx到pdf,docx是用Docx4j正确生成的。对于简单的文档,转换很好,但是当我想转换一个更风格化的文档时,POI抛出了一个异常: org.apache.xmlbeans.impl.values.xmlvalueOutoFrangeException:union value'0000ff“>http://schemas.openxmlformats.org
我有一个演示中嵌入了一个视频。我想将此演示文稿导出为PDF格式,其中包含视频。现在,不是一个视频,而是一个带有问号的图像。这段视频从演示文稿中看得很好。
我花了大量的时间试图确定到底出了什么问题,使用LibreOffice将pdf转换为docx(以及doc转换为docx)的代码。 我使用了两个windows run接口来测试运行一些我发现相关的代码,也尝试了python,但两者都不起作用。 我在Windows上安装了LibreOffice v6.0.2。 我一直在使用此代码的变体尝试将某些pdf文件转换为与特定pdf文件不相关的docx: 我已经在
我试图生成一个. docx从超文本标记语言字符串与docx4j在Java,其中包含Base64图像里面。目前,我能够生成Word并下载它(在一个Vaadin项目内),但图像没有正确插入。但是,如果我把超文本标记语言代码放入index.html页面,它们确实显示正确! 我使用的代码是这样的: 有没有什么特别的工作应该做,而我没有做? 编辑: 我现在可以插入图片了!用以下代码替换行下方和行上方的代码:
这段代码第一次可以运行得很好,但是当我第二次运行app时,它不会立即生成PDF文件。
我正在创建包含表格和图像的pdf。问题是我可以在第一页看到图像,但在第二页看不到。 > 使用