WPS/PPT/PDF转图片(ppt-to-images)
将 PPT/PPTX 每页幻灯片、PDF 每页或 Word 文档每页导出为高清 PNG/JPG 图片。纯本地处理,无需输入任何 API,不访问网络。
- PPT/PPTX:优先 WPS Office 原生 COM 引擎(字体、颜色、排版与原件几乎一致),自动回退 Microsoft PowerPoint,再退 LibreOffice(跨平台兜底)
- PDF:PyMuPDF 按 DPI 精确渲染,纯 Python、速度快、全平台,任何版式(A4 竖版/横版/幻灯片比例)都能得到正确清晰的图
- Word:WPS 文字引擎转 PDF 后逐页导出(Windows 首选),跨平台自动回退 LibreOffice
执行步骤
- 确认输入文件的绝对路径;输出目录默认为
<输入文件所在目录>/<文件名>_images/ - 选择 Python 解释器:
- WorkBuddy 环境(Windows):优先检查~/.workbuddy/binaries/python/envs/default/Scripts/python.exe
- 否则使用 PATH 中的python/python3 - 确保依赖已安装:PPT/Word COM 引擎
python -m pip install pywin32;PDF 引擎python -m pip install PyMuPDF;LibreOffice 兜底需pymupdf - 运行导出脚本:
# PPT/PPTX 转图片(默认 1920 宽,高度按画布比例)
python scripts/convert.py "<PPT绝对路径>" --out "<输出目录>"
# 只导出指定页(大文件只取一段,省时省内存)
python scripts/convert.py "<PPT绝对路径>" --pages "90-120" --out "<输出目录>"
# PDF 转图片(默认 200 DPI)
python scripts/convert.py "<PDF绝对路径>" --out "<输出目录>"
# 加密 PDF 直读(无需先解密)
python scripts/convert.py "<PDF绝对路径>" --password 密码 --out "<输出目录>"
# 转换前预检(不生成任何文件,先看页数/加密/文字层)
python scripts/convert.py "<任意文件绝对路径>" --info
# Word 转图片(WPS 转 PDF 后逐页导出)
python scripts/convert.py "<Word绝对路径>" --out "<输出目录>"
- 向用户报告:输出目录、导出页数、总耗时;如有异常页需说明
引擎路由规则
判断依据:先看文件扩展名,再选引擎。
| 输入格式 | 引擎 | 说明 |
|---|---|---|
| .ppt/.pptx/.pps/.ppsx/.pot/.potx | WPS COM(KWPP.Application)→ PowerPoint COM → LibreOffice + PyMuPDF |
WPS 保真度最高;PDF 绝不要用 COM(兼容性差),PPT 绝不要用 LibreOffice 优先(字体/排版偏差) |
PyMuPDF(fitz) |
按 DPI 渲染,快且稳,全平台 | |
| .doc/.docx | WPS 文字 COM(KWPS.Application)转 PDF → PyMuPDF → LibreOffice 兜底 |
Word 引擎 Windows 首选 WPS/Office,跨平台退 LibreOffice |
- 显式指定
--engine wps/--engine powerpoint时失败不兜底,直接报错 - macOS/Linux 上 PPT 自动只有 LibreOffice 引擎可用;建议先把 PPT 导出为 PDF 再用 PDF 引擎(保真度更高)
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
| 第一个位置参数 | 必填 | 输入文件路径(.ppt/.pptx/.pps/.ppsx/.pdf/.doc/.docx) |
-o, --out |
<输入目录>/<文件名>_images |
输出目录(不存在会自动创建);用了 --pages 时默认加页范围后缀,如 deck_p90-120_images |
--width |
1920 | 仅 PPT:输出宽度像素,4K 用 3840 |
--height |
自动 | 仅 PPT:默认按幻灯片画布比例自动计算,避免非 16:9 母版被拉伸 |
-f, --format |
PNG | PNG(无损,文字清晰)或 JPG(体积小,有损) |
--pages |
全部 | 只要指定页:"1-3,7"(从 1 开始,逗号分隔,支持 a-b 区间)。输出文件名保留原页号(如 page_090.png),越界自动截断 |
--password |
无 | 加密 PDF 的打开密码,直接读取无需先解密 |
--info |
关 | 只预检不转换:输出页数/加密状态/页面尺寸/文字层,便于转换前确认 |
--engine |
auto | auto / wps / powerpoint / libreoffice / pymupdf / kwps |
--dpi |
200 | 仅 PDF/Word 引擎与 LibreOffice 兜底生效;打印级建议 300,上限 600 |
--version |
— | 打印版本号后退出 |
退出码(便于脚本/自动化串联)
| 退出码 | 含义 |
|---|---|
0 |
成功 |
2 |
参数错误(文件不存在、格式不支持、页码非法)或缺少依赖 |
3 |
转换失败(引擎不可用、密码错误、PDF 已加密未提供密码等) |
新能力速用
# 只导出第 90~120 页(大 PPT 只取一段,省时省内存)
python scripts/convert.py "deck.pptx" --pages "90-120"
# 加密 PDF 直读,无需先解密
python scripts/convert.py "locked.pdf" --password 123456
# 转换前先预检,不产生任何文件
python scripts/convert.py "deck.pptx" --info
# 输出:文件 / 类型 / 大小 / 页数 / 加密 / 页面尺寸 / 文字层
分辨率/DPI 速查
| 用途 | PDF/Word (DPI) | PPT (宽度像素) |
|---|---|---|
| 屏幕查看 | 150-200 | 1920 |
| 高清存档 | 300 | 2560 |
| 打印级 | 300 | 3840(4K) |
为什么 PPT 用固定像素、PDF/Word 用 DPI?
- PPT 是固定画布(16:9 等),直接指定像素最直观;高度默认按画布比例自动算,非标准比例也不会拉伸变形
- PDF/Word 页面尺寸五花八门(A4 竖版 595x842pt、横版、幻灯片比例都有),用 DPI 指定渲染精度,输出像素 = 页面尺寸(pt) × DPI / 72,任何版式都正确
注意事项
- WPS 的 COM 注册名是
KWPP.Application(演示)和KWPS.Application(文字),不是PowerPoint.Application - 脚本用
DispatchEx创建独立 Office 实例,后台静默导出,不会误关用户已打开的文档 - 个别 PowerPoint 版本在隐藏窗口模式下会报错,脚本会自动改为可见模式重试
- 大文件耗时参考:59MB / 72 页 PPT 约 1-2 分钟;3 页 A4 PDF 200 DPI 约 0.2 秒;3 页 Word 约 2-3 秒(含 WPS 转 PDF)
- 嵌入视频、动画无法导出为动态内容,对应页只导出静态画面
- 加密 PDF 支持
--password直读;若未提供密码,脚本会明确提示如何传入,退出码 3 - 扫描版 PDF:渲染结果就是图片原样,DPI 再高也不会更清晰,上限受原始扫描质量限制
- DPI 上限 600(超过自动截断),避免内存暴涨
- 用了
--pages时输出文件名保留原页号(如只导第 90-120 页,产物是page_090.png~page_120.png),方便与原文档对照 - 依赖缺失时脚本会打印
[缺少依赖]与可直接复制的[安装命令],退出码 2
常见问题
- 必须安装 WPS 吗? 不需要。PPT 脚本启动时自动探测可用引擎:WPS → PowerPoint → LibreOffice,三者装其一即可。Word 在 Windows 上优先 WPS,跨平台可退 LibreOffice。macOS/Linux 用户无需任何 Office,装 LibreOffice +
pymupdf即可。 - 需要输入 API 吗? 完全不需要。所有转换纯本地完成,不联网、不上传、无需注册任何服务。
- 加密 PDF 要先解密吗? 不用。加
--password 密码即可直读,脚本内部完成解密渲染。 - 只想导出其中几页怎么办? 用
--pages "1-3,7",大文件(几百页 PPT)只取一段能显著省时省内存,输出文件名仍保留原页号。 - 转换前想先确认文件有没有问题? 用
--info预检,看一眼页数/加密/文字层再决定,不产生任何文件。 - 为什么优先用 WPS? 实测 WPS 对 PPT 的兼容性最高,字体、颜色、排版与原件几乎一致;它只是"首选"而非"必须"。
故障排查
No module named win32→python -m pip install pywin32No module named fitz→python -m pip install PyMuPDF- 找不到
KWPP.Application/PowerPoint.Application→ 未装 WPS/Office,改用--engine libreoffice(或安装 WPS) - Word 转换报"WPS 引擎不可用" → 未装 WPS 文字,脚本自动退 LibreOffice 兜底
- LibreOffice 输出字体不对/排版偏移 → 属已知偏差,建议安装 WPS 后用默认引擎
- PDF 报"已加密" → 用
--password 密码直读,或先用其他工具解密 - 报"页码范围与文档实际页数没有交集" → 检查
--pages是否超出总页数(可先用--info看总页数) - 报"缺少依赖" → 按提示的
[安装命令]复制执行即可
版权与许可
Copyright © 2026 XY. All Rights Reserved.(保留所有权利)
本技能为专有软件,仅供在 WorkBuddy 技能市场内合法获取该技能的用户本人使用。未经著作权人事先书面许可,禁止:
- 复制、转载、镜像、传播本技能的全部或部分内容;
- 修改、改编、翻译、反编译、二次开发,或基于本技能创作衍生作品;
- 再分发、转售、出租,或作为自有作品提交至任何平台(含本技能市场及其他市场);
- 商业使用,或用于任何盈利性服务。
如需授权(商用、二次开发、集成到自有产品等),请先取得著作权人的书面同意。违反上述条款者,著作权人保留追究法律责任的权利。
本技能按「现状」提供,不附带任何明示或默示担保;使用本技能产生的任何后果由使用者自行承担。
版本记录
- 1.0.0:首次发布。PPT 三引擎导出(WPS → PowerPoint → LibreOffice),WPS 方案源自 72 页真实 PPT 导出实践。
- 2.0.0:整合 PDF 转图片能力(PyMuPDF 引擎,按 DPI 精确渲染,全平台),一个技能覆盖 PPT 与 PDF 两种输入;PPT 高度默认按画布比例自动计算;增加 DPI 上限保护、加密 PDF 明确报错、控制台 UTF-8 输出防乱码。
- 2.1.0:新增 Word 转图片(.doc/.docx 经 WPS 文字引擎转 PDF 后逐页导出,跨平台退 LibreOffice),一个技能覆盖 PPT/PDF/Word 三种输入。
- 2.2.1:技能更名为「WPS/PPT/PDF转图片」(英文 WPS/PPT/PDF to Images),名称顺序按用户检索习惯重排,并更换为更醒目的技能头像。
能力强化:新增--pages页范围导出("1-3,7",输出保留原页号、越界自动截断、默认目录带页范围后缀)、--password加密 PDF 直读、--info转换前预检(页数/加密/页面尺寸/文字层,PPTX 走 zip 快路径不启动 Office)、-f短参数与--version;新增依赖友好报错([缺少依赖]+[安装命令])与规范退出码(0/2/3),便于自动化串联;修复加密 PDF 预检时文字层误判为空的问题(PyMuPDF 解密后访问needs_pass会重置状态)。 - 2.2.2:许可证由 MIT 变更为专有许可(保留所有权利),包内新增
LICENSE文件与「版权与许可」章节,明确禁止复制、修改、二次开发与再分发;技能头像更换为「WPS转图片」文字图标。