Python实现doc,docx批量转换为pdf

环境:windows + office
依赖库:pywin32
功能:doc,docx格式文件批量转换为pdf格式文件
from win32com.client import gencache
from win32com.client import constants, gencache
import os


def createPdf(wordPath, pdfPath):
    """
    word转pdf
    :param wordPath: word文件路径
    :param pdfPath:  生成pdf文件路径
    """
    word = gencache.EnsureDispatch('Word.Application')
    doc = word.Documents.Open(wordPath, ReadOnly=1)
    doc.ExportAsFixedFormat(
        pdfPath,
        constants.wdExportFormatPDF,
        Item=constants.wdExportDocumentWithMarkup,
        CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
    word.Quit(constants.wdDoNotSaveChanges)


def getfilenames(folderPath):
    names = []
    for root, dirs, files in os.walk(folderPath):
        for file in files:
            if os.path.splitext(file)[1] == '.doc' or os.path.splitext(
                    file)[1] == '.docx':
                names.append(file)
    return names


def createPdfs(folderPath):
    """
    word批量转换pdf
    :folderPath: 待转换文件所在文件夹
    """
    word = gencache.EnsureDispatch('Word.Application')
    names = getfilenames(folderPath)
    for name in names:
        suff = '.pdf'
        nonsuffname = os.path.splitext(name)[0]
        wordfilename = os.path.join(folderPath, name)
        pdffilename = os.path.join(folderPath, nonsuffname) + suff
        doc = word.Documents.Open(wordfilename, ReadOnly=1)
        doc.ExportAsFixedFormat(
            pdffilename,
            constants.wdExportFormatPDF,
            Item=constants.wdExportDocumentWithMarkup,
            CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
        doc.Close()
        print(pdffilename + ' ....Done!')

    word.Quit(constants.wdDoNotSaveChanges)


if __name__ == '__main__':
    folderPath = r'D:\newfolder'
    createPdfs(folderPath)
    #createPdf(wordPath, pdfPath)
posted @ 2020-03-28 15:07  满世界的风  阅读(712)  评论(0)    收藏  举报