""" You need to install these libraries in the Linux os. 1、sudo apt-get install python3 2、sudo apt-get install libreoffice 3、sudo apt-get install unoconv 4、cd /usr/share/fonts/ mkdir chinese 5、cp Windows os C:\Windows\Fonts to /usr/share/fonts/chinese chmod -R 755 /usr/share/fonts/chinese fc-cache -fv fc-list | grep chinese //check the new fonts 6、Directions for use For example: python3 doc2pdf.py "./MI_SYS_API_V3.docx" "./MI_SYS_API_V3.pdf" """ import subprocess import os import sys try: from comtypes import client except ImportError: client = None try: from win32com.client import constants, gencache except ImportError: constants = None gencache = None def doc2pdf(docPath, pdfPath): """ convert a doc/docx document to pdf format :docPath: path to doc/docx Input :pdfPath: path to pdf Output """ docPathTrue = os.path.abspath(docPath) if client is None:#判断环境,linux环境这里肯定为None return doc2pdf_linux(docPathTrue, pdfPath) # name, ext = os.path.splitext(doc) # try: # word = client.DispatchEx("Word.Application") # worddoc = word.Documents.Open(doc) # worddoc.SaveAs(name + '.pdf', FileFormat=17) # except Exception: # raise # finally: # worddoc.Close() # word.Quit() 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) def doc2pdf_linux(docPath, pdfPath): """ convert a doc/docx document to pdf format (linux only, requires libreoffice) :param doc: path to doc/docx document cmd = 'libreoffice --headless --convert-to pdf :writer_pdf_Export'.split() + [filePath] + ['--outdir'] + [destDir] """ filePath = docPath destDir = pdfPath cmd = 'libreoffice --headless --convert-to pdf :writer_pdf_Export'.split() + [filePath] + ['--outdir'] + [destDir] print(filePath) p = subprocess.Popen(cmd,stderr=subprocess.PIPE, stdout=subprocess.PIPE) p.wait(timeout=60) stdout, stderr = p.communicate() if stderr: raise subprocess.SubprocessError(stderr) if __name__ == '__main__': doc2pdf(sys.argv[1], sys.argv[2])