gpt4 book ai didi

python - 使用纯 python 将 docx 转换为 pdf(在 linux 上,没有 libreoffice)

转载 作者:太空狗 更新时间:2023-10-29 17:19:37 52 4
gpt4 key购买 nike

我正在处理一个尝试开发网络应用程序的问题,其中一部分将上传的 docx 文件转换为 pdf 文件(经过一些处理)。使用 python-docx 和其他方法,对于大多数处理,我不需要安装了 word 的 Windows 机器,甚至不需要 linux 上的 libreoffice(我的网络服务器是 pythonanywhere - linux 但没有 libreoffice 也没有sudoapt install 权限)。但是转换为 pdf 似乎需要其中之一。通过探索这里和其他地方的问题,这是我目前所拥有的:

import subprocess

try:
from comtypes import client
except ImportError:
client = None

def doc2pdf(doc):
"""
convert a doc/docx document to pdf format
:param doc: path to document
"""
doc = os.path.abspath(doc) # bugfix - searching files in windows/system32
if client is None:
return doc2pdf_linux(doc)
name, ext = os.path.splitext(doc)
try:
word = client.CreateObject('Word.Application')
worddoc = word.Documents.Open(doc)
worddoc.SaveAs(name + '.pdf', FileFormat=17)
except Exception:
raise
finally:
worddoc.Close()
word.Quit()


def doc2pdf_linux(doc):
"""
convert a doc/docx document to pdf format (linux only, requires libreoffice)
:param doc: path to document
"""
cmd = 'libreoffice --convert-to pdf'.split() + [doc]
p = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
p.wait(timeout=10)
stdout, stderr = p.communicate()
if stderr:
raise subprocess.SubprocessError(stderr)

如您所见,一种方法需要 comtypes,另一种方法需要 libreoffice 作为子进程。除了切换到更复杂的托管服务器之外,还有什么解决方案吗?

最佳答案

PythonAnywhere 帮助页面在此处提供了有关处理 PDF 文件的信息:https://help.pythonanywhere.com/pages/PDF

总结:PythonAnywhere 安装了许多用于 PDF 操作的 Python 包,其中之一可能会满足您的需求。但是,对我来说似乎最简单的方法是使用 abiword。 shell 命令 abiword --to=pdf filetoconvert.docx 会将 docx 文件转换为 PDF 并在与 docx 相同的目录中生成名为 filetoconvert.pdf 的文件。请注意,此命令将向标准错误流输出一条错误消息,提示 XDG_RUNTIME_DIR(或者至少它对我如此),但它仍然有效,并且可以忽略错误消息。

关于python - 使用纯 python 将 docx 转换为 pdf(在 linux 上,没有 libreoffice),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50982064/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com