Python办公自动化之调用PowerPoint实现批量PPT转PDF
前言:上一期我们讲了如何把 PDF 转成图片,很多读者反馈非常实用。今天接着安排PPT(PPTX/PPT)批量转成 PDF!
在日常工作中,我们经常需要:把收集来的演示文稿统一转成PDF发给客户(防止格式错乱);打印PPT时,PDF更稳定、方便, 将PPT存档为PDF,方便日后查阅。虽然WPS、Office都自带“另存为PDF”功能,但如果手头有几十上百个PPT,手动打开、点击保存、关闭……不仅枯燥,还容易漏文件。
今天我就用Python的 comtypes 库,直接调用你电脑上安装的Microsoft PowerPoint,一键完成批量转换!关键的是,代码完全动态路径,不管你的文件夹放在哪里,拿来就能用。
一、环境配置
1.1运行环境
- 操作系统:Windows(因为用到了COM组件,Mac/Linux不支持,除非装了Wine)
- Python版本:Python 3.6+
- 必备软件:必须安装 Microsoft PowerPoint(Office套件之一,WPS理论上支持COM但兼容性稍差,建议用微软Office)
1.2安装依赖库
只需要安装一个库——comtypes(用于调用Windows COM对象):
pip install comtypes -i https://pypi.tuna.tsinghua.edu.cn/simple
特别提醒:comtypes 只是一个“电话线”,真正干活的是你电脑里的PowerPoint程序,所以不需要额外装插件!
二、 完整代码及实现原理
创建一个Python文件(比如 ppt_to_pdf.py),实现原理如下:


2.1路径获取
需要注意的是PDF的存放路径必须是在你文件代码的同一路径下。
# -*- coding: utf-8 -*-
'''
Python批量将PPT文件转为PDF文件
功能:自动识别当前目录(或指定子文件夹)下所有PPT/PPTX,转为PDF并保存到指定输出目录
'''
# 安装所需模块
# pip install comtypes -i https://pypi.tuna.tsinghua.edu.cn/simple
import comtypes.client
import os #导入一个正则表达式的模块
def init_powerpoint():
'''初始化PPT应用程序'''
powerpoint = comtypes.client.CreateObject("Powerpoint.Application")
powerpoint.Visible = 1 # 设置为可见,方便观察(可改为0后台运行)
return powerpoint
def ppt_to_pdf(powerpoint, input_path, output_dir):
'''
将单个PPT转换为PDF
input_path: PPT文件的完整路径
output_dir: PDF输出目录
'''
deck = powerpoint.Presentations.Open(input_path)
# 构造输出文件名:取PPT文件名,扩展名改为.pdf
base_name = os.path.splitext(os.path.basename(input_path))[0] + ".pdf"
output_path = os.path.join(output_dir, base_name)
# 确保输出目录存在
os.makedirs(output_dir, exist_ok=True)
# 32 表示另存为 PDF 格式
deck.SaveAs(output_path, 32)
deck.Close()
print(f'✅ 转换成功:{input_path} → {output_path}')
def convert_ppt_in_folder(powerpoint, input_dir, output_dir):
'''
批量转换文件夹内所有PPT/PPTX
input_dir: 包含PPT文件的目录
output_dir: PDF输出目录
'''
if not os.path.exists(input_dir):
print(f'❌ 输入目录不存在:{input_dir}')
return
files = os.listdir(input_dir)
ppt_files = [f for f in files if f.lower().endswith((".ppt", ".pptx"))]
if not ppt_files:
print('❌ 未找到任何PPT或PPTX文件')
return
print(f'📂 找到 {len(ppt_files)} 个PPT文件,开始转换...')
for ppt_file in ppt_files:
full_path = os.path.join(input_dir, ppt_file)
try:
ppt_to_pdf(powerpoint, full_path, output_dir)
except Exception as e:
print(f'❌ 转换 {ppt_file} 时出错:{e}')
print('🎉 所有PPT转换完成!')
if __name__ == "__main__":
# ---------- 修改点:全部使用动态路径 ----------
# 获取当前脚本所在目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 输入目录:默认使用脚本所在目录(你也可以改成子文件夹,比如 os.path.join(script_dir, 'ppt_files'))
pptpath = script_dir
# 输出目录:在脚本所在目录下新建一个 'pdf_output' 文件夹
imgpath = os.path.join(script_dir, 'pdf_output')
# 初始化PPT应用
powerpoint = init_powerpoint()
convert_ppt_in_folder(powerpoint, pptpath, imgpath)
powerpoint.Quit()三、代码逐段精讲
3.1 动态路径——彻底摆脱盘符困扰
script_dir = os.path.dirname(os.path.abspath(__file__)) pptpath = script_dir imgpath = os.path.join(script_dir, 'pdf_output')
很多新手写代码喜欢写死 D:\Users\xxx,换个文件夹就要改代码。我用 __file__ 自动获取脚本所在位置,并且输出目录自动设为当前目录下的 pdf_output 子文件夹。你把脚本和PPT放在任意地方,运行后都在本地生成结果,干净又整洁。
3.2 核心参数32——PPT转PDF的关键密码
deck.SaveAs(output_path, 32)
在PowerPoint的VBA常量中,ppSaveAsPDF 对应的值就是 32。这个数字告诉PowerPoint:“我要另存为PDF格式!” 其他常用格式:
17→ 转为图片(PNG/JPG)1→ 转为PPT模板(.pot)
记住这个数字,以后你想转其他格式也方便。
3.3后台静默运行(可选)
powerpoint.Visible = 1
Visible = 1:你会看到PowerPoint窗口反复弹出打开、保存、关闭,方便你观察进度(适合调试)。- 如果改成
Visible = 0:全程在后台静默运行,不影响你干别的事(适合挂机批量跑)。
四、重点:避坑指南
显示 :OSError: [WinError -2147221005] 无效的类字符串
原因:你的电脑没有安装Microsoft PowerPoint,或者安装的是WPS但WPS的COM注册名不标准。
解决方案:
- 确认系统已安装 Office 2010+(含PowerPoint)。
- 如果装了WPS,可以尝试修改代码中的创建对象名为
"KWPP.Application"(WPS的COM名称),但兼容性不如微软Office稳定,强烈建议换Office。
到此这篇关于Python办公自动化之调用PowerPoint实现批量PPT转PDF的文章就介绍到这了,更多相关Python PPT批量转PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
浅谈flask中的before_request与after_request
这篇文章主要介绍了浅谈flask中的before_request与after_request,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下2018-01-01
使用Python的Django框架结合jQuery实现AJAX购物车页面
这篇文章主要介绍了使用Python的Django框架结合jQuery实现AJAX购物车页面的方法,示例基于Django中构建好的JSON格式的RESTful API需要的朋友可以参考下2016-04-04


最新评论