Python——將PPT和Word轉為PDF檔案
阿新 • • 發佈:2022-12-02
前言
通過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 # )