"""
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])
