以下是一個使用Python將PowerPoint文件(PPT/PPTX)批量轉換為多張圖片的代碼示例。該方案通過comtypes庫調用本地Office的COM接口實現轉換,需確保已安裝Microsoft PowerPoint。
import os
import comtypes.client
from comtypes import COMErrordef ppt_to_images(input_path, output_folder, img_format=1):"""將PPT文件轉換為多張圖片:param input_path: PPT文件路徑:param output_folder: 輸出文件夾路徑:param img_format: 圖片格式(0:JPG, 1:PNG, 2:BMP):return: 生成的圖片數量"""try:# 創建輸出目錄os.makedirs(output_folder, exist_ok=True)# 啟動PowerPoint應用powerpoint = comtypes.client.CreateObject("PowerPoint.Application")powerpoint.Visible = 1 # 可視化模式# 打開演示文稿deck = powerpoint.Presentations.Open(input_path)# 獲取文件名前綴base_name = os.path.splitext(os.path.basename(input_path))[0]# 導出所有幻燈片為圖片deck.SaveAs(output_folder, img_format) # 使用Export方法更靈活print(f"成功轉換: {input_path} => {output_folder}")return deck.Slides.Countexcept COMError as e:print(f"轉換失敗: {e}")return 0finally:deck.Close()powerpoint.Quit()def batch_convert(folder_path, output_base_folder, img_format=1):"""批量轉換文件夾內所有PPT/PPTX文件:param folder_path: 包含PPT文件的文件夾路徑:param output_base_folder: 輸出根目錄:param img_format: 圖片格式"""supported_ext = ['.ppt', '.pptx']for file in os.listdir(folder_path):if os.path.splitext(file)[1].lower() in supported_ext:input_file = os.path.join(folder_path, file)output_folder = os.path.join(output_base_folder, os.path.splitext(file)[0])img_count = ppt_to_images(input_file, output_folder, img_format)print(f"生成圖片數量: {img_count}")if __name__ == "__main__":# 使用示例input_folder = r"C:\PPT_Files" # 包含PPT的文件夾output_folder = r"C:\PPT_Images" # 輸出目錄# 參數說明:0=JPG, 1=PNG(推薦), 2=BMPbatch_convert(input_folder, output_folder, img_format=1)
使用說明
-
環境要求:
-
Windows系統(Mac/Linux需使用其他方法)
-
安裝Microsoft Office(2010+版本推薦)
-
Python庫安裝:
pip install comtypes
-
-
參數調整:
-
img_format:根據需要修改圖片格式-
0 = JPG(有損壓縮)
-
1 = PNG(無損透明,推薦)
-
2 = BMP(無壓縮)
-
-
-
輸出結構:
C:\PPT_Images ├── 演示文稿1 │ ├── Slide1.png │ ├── Slide2.png │ └── ... └── 演示文稿2├── Slide1.png└── ...替代方案(無需Office)
如果無法安裝Office,可以使用以下方法之一:
方法1:使用
python-pptx+pillow(僅提取文本/形狀)
from pptx import Presentation
from PIL import Imagedef extract_slide_shapes(ppt_path, output_folder):prs = Presentation(ppt_path)for i, slide in enumerate(prs.slides):img_path = os.path.join(output_folder, f"slide_{i+1}.png")# 注意:此方法無法直接渲染幻燈片,需自行繪制元素# 此處僅為示意偽代碼img = Image.new('RGB', (1024, 768), (255,255,255))# 繪制文本/形狀到圖片...img.save(img_path)
方法2:使用LibreOffice命令行(跨平臺)
# 需要先安裝LibreOffice
soffice --headless --convert-to png *.pptx --outdir output_folder
常見問題處理
-
COMError報錯:
-
檢查Office是否激活
-
以管理員身份運行腳本
-
設置
powerpoint.Visible = 1查看彈窗提示
-
-
圖片質量優化:
# 在SaveAs之前添加分辨率設置
deck.Export(OutputFolder=output_folder,FilterName="PNG",Width=1920, # 設置輸出寬度Height=1080
)
?