首页 文章

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

提问于
浏览
10

我正在处理一个试图开发网络应用程序的问题,其中一部分将上传的docx文件转换为pdf文件(经过一些处理后) . 使用 python-docx 和其他方法,我不需要安装word的windows机器,甚至linux上的libreoffice,用于大多数处理(我的web服务器是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 作为子进程 . 除了切换到更复杂的托管服务器,还有什么解决方案吗?

1 回答

  • 5

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

    简介:PythonAnywhere安装了许多用于PDF操作的Python包,其中一个可以做你想要的 . 但是,对我来说,对我来说似乎最容易 . {2845542_} . shell命令 abiword --to=pdf filetoconvert.docx 会将docx文件转换为PDF,并在与docx相同的目录中生成名为 filetoconvert.pdf 的文件 . 请注意,此命令将向标准错误流输出错误消息,抱怨 XDG_RUNTIME_DIR (或者至少它对我而言),但它仍然有效,并且可以忽略错误消息 .

相关问题