zoukankan      html  css  js  c++  java
  • linux环境基于python语言docx转pdf

    windows平台因借助win32com具有多种方法将word转为pdf,但linux环境不具备此环境,win32com包也将import失败,那该如何做呢?

    # -*- coding: utf-8 -*-
    """
    linux platform word to pdf
    """
    import subprocess
    import os
    try:
        from comtypes import client
    except ImportError:
        client = None 
    try:
        from win32com.client import constants, gencache
    except ImportError:
        constants = None
        gencache = None
    def doc2pdf_linux(docPath, pdfPath):
        """
        convert a doc/docx document to pdf format (linux only, requires libreoffice)
        :param doc: path to document
        """
        cmd = 'libreoffice6.3 --headless --convert-to pdf'.split() + [docPath] + ['--outdir'] + [pdfPath]
        p = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
        p.wait(timeout=30)
        stdout, stderr = p.communicate()
        if stderr:
            raise subprocess.SubprocessError(stderr)     
    def doc2pdf(docPath, pdfPath):
        """
            convert a doc/docx document to pdf format
            :param doc: path to document
            """
        docPathTrue = os.path.abspath(docPath)  # bugfix - searching files in windows/system32
        if client is None:#判断环境,linux环境这里肯定为None
            return doc2pdf_linux(docPathTrue, pdfPath)
        word = gencache.EnsureDispatch('Word.Application')
        doc = word.Documents.Open(docPathTrue, ReadOnly=1)
        doc.ExportAsFixedFormat(pdfPath,
                                constants.wdExportFormatPDF,
                                Item=constants.wdExportDocumentWithMarkup,
                                CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
        word.Quit(constants.wdDoNotSaveChanges)
    if __name__ == '__main__':
        wordpath='/var/db/Report_20191206105753.docx'
        pdfpath='/var/db'
        doc2pdf(wordpath,pdfpath)
    

      

  • 相关阅读:
    Android Studio使用
    VS.NET发送会议邮件程序原码
    C#中渐变色的代码实例,用于自绘菜单
    VS.NET获取某年某月的天数
    AJAX原理简要说明及实例
    ASP.NET下增加定时器功能
    VS.NET发送普通邮件原码
    保存xml到server实例
    VS.NET通过OUTLOOK发邮件
    利用IE打印的一点实例代码
  • 原文地址:https://www.cnblogs.com/mrtop/p/11995974.html
Copyright © 2011-2022 走看看