1. 程式人生 > 其它 >Python——將PPT和Word轉為PDF檔案

Python——將PPT和Word轉為PDF檔案

前言

通過win32com.client將PPT和Word檔案轉為PDF格式

內容

import fitz  # pip install pymupdf
import win32com.client
import os


def ppt2pdf(filename, output_filename):
    """
    PPT檔案匯出為pdf格式
    :param filename: PPT檔案的名稱
    :param output_filename: 匯出的pdf檔案的名稱
    :return:
    """
    ppt_app = win32com.client.Dispatch('PowerPoint.Application')
    ppt = ppt_app.Presentations.Open(filename)
    ppt.SaveAs(output_filename, 32)
    ppt_app.Quit()


def doc2pdf(doc_path, pdf_path):
     """
     word轉pdf
    :param doc_path: word檔案路徑
    :param pdf_path: 生成pdf檔案路徑
    """
    word = win32com.client.gencache.EnsureDispatch('Word.Application')
    doc = word.Documents.Open(doc_path, ReadOnly=1)
    doc.ExportAsFixedFormat(pdf_path,
                            win32com.client.constants.wdExportFormatPDF,
                            Item=win32com.client.constants.wdExportDocumentWithMarkup,
                            CreateBookmarks=win32com.client.constants.wdExportCreateHeadingBookmarks)
    word.Quit(win32com.client.constants.wdDoNotSaveChanges)


def pdf2img(pdf_path, zoom_x, zoom_y):
    """
    引數說明
    :param pdf_path: pdf檔案的路徑
    :param zoom_x: x軸方向的縮放係數
    :param zoom_y: y軸方向的縮放係數
    """
    doc = fitz.open(pdf_path)  # 開啟pdf檔案
    for page in doc:  # 逐頁迴圈
        # print(page.number)
        pic = page.get_pixmap(matrix=fitz.Matrix(zoom_x, zoom_y))  # 將頁面渲染為圖片
        dir_save = os.path.dirname(pdf_path)  # 結果儲存的路徑與pdf檔案所在的路徑同級
        pdf_name = os.path.basename(pdf_path).split('.pdf')[0]
        pic.save(f'{dir_save}/{pdf_name}-page-{page.number + 1}.png')  # 逐頁將pdf儲存為PNG格式
        if page.number == 1:  # 只對PDF前兩頁做轉換
            break
    doc.close()  # 關閉讀取pdf檔案


for root, dirs, files in os.walk(r"\\Desktop-le2mgrr\宋延餘共享資料夾\碳相關資料收集"):  # 將目錄修改為需要批量轉換的PDF目錄
    for file in files:
        file_path = os.path.join(root, file)
        if file.endswith((".doc", ".docx")):
            print('doc', file)
            doc2pdf(file_path, os.path.join(root, f"{file}.pdf"))
        if file.endswith((".ppt", ".pptx")):
            print('ppt', file)
            ppt2pdf(file_path, os.path.join(root, f"{file}.pdf"))


# for root, dirs, files in os.walk(r"\\Desktop-le2mgrr\宋延餘共享資料夾\碳相關資料收集"):  # 將目錄修改為需要批量轉換的PDF目錄
#     for file in files:
#         if file.endswith(".pdf"):
#             print('pdf', file)
#             pdf2img(
#                 os.path.join(root, file),
#                 zoom_x=3,
#                 zoom_y=3
#             )