为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣非少年 2021-03-31 09:19:49
我在尝试开发网络应用程序时遇到了问题,该应用程序的一部分将上载的docx文件转换为pdf文件(经过一些处理)。随着python-docx等方法,我不要求在Linux上窗机安装字,甚至LibreOffice的,对于大多数加工的(我的Web服务器是pythonanywhere - Linux,但没有LibreOffice的,没有sudo或apt install权限)。但是转换为pdf似乎需要其中之一。通过探索这里和其他地方的问题,到目前为止,这就是我所拥有的:import subprocesstry:    from comtypes import clientexcept ImportError:    client = Nonedef 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作为子流程。除了切换到更复杂的托管服务器之外,还有什么解决方案吗?
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

另一个可以使用的是libreoffice,但是正如第一响应者所说,质量永远不会像使用实际的comtypes那样好。


无论如何,在安装libreoffice之后,这里是执行此操作的代码。


from subprocess import  Popen

LIBRE_OFFICE = r"C:\Program Files\LibreOffice\program\soffice.exe"


def convert_to_pdf(input_docx, out_folder):

    p = Popen([LIBRE_OFFICE, '--headless', '--convert-to', 'pdf', '--outdir',

               out_folder, input_docx])

    print([LIBRE_OFFICE, '--convert-to', 'pdf', input_docx])

    p.communicate()



sample_doc = 'file.docx'

out_folder = 'some_folder'

convert_to_pdf(sample_doc, out_folder)


查看完整回答
反对 回复 2021-04-13
  • 2 回答
  • 0 关注
  • 1190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信