PDF 转 PNG 转换器
把 PDF(单文件或整文件夹)批量渲染为 PNG 图片。实现思路源自本机已验证的
PDF批量转PNG.xlsm 宏:优先用 Ghostscript 免费引擎,未安装时回退 Adobe Acrobat。
由于 Ghostscript 免费且无需授权,本技能做到「无论本机是否安装专业版 Acrobat,都不影响转换成功」。
PDF 路径一律作为列表参数传给转换引擎(不启用 shell),避免命令注入。
触发条件
- 用户给出 PDF 文件或文件夹,要求转成 PNG 图片;
- 用户提到「PDF 批量转 PNG / PDF 转图片 / 把 PDF 导出成图片」;
- 用户引用本地
PDF批量转PNG.xlsm或gs10080w64.exe的同类需求。
不触发:PDF 内容编辑/合并、OCR 文字识别、PDF↔Word/Excel 格式互转、单纯读取 PDF 文本。
步骤
- 确定输入与范围:
- 给单个 PDF 文件 → 只转该文件;
- 给文件夹 → 默认仅当前层;加--scope recursive则递归含所有子文件夹。
- 与用户确认范围(当前文件夹 / 含子文件夹 / 单个文件),避免误转。 - 执行脚本(在 PDF 所在机器上运行):
bash # 当前文件夹所有 PDF python scripts/pdf2png.py "C:\路径\含PDF的文件夹" --scope current --dpi 300 # 递归含子文件夹 python scripts/pdf2png.py "C:\路径\文件夹" --scope recursive # 单个 PDF python scripts/pdf2png.py "C:\路径\某文件.pdf"
可选参数:--dpi(36~2400,默认 300)、--gs <gs路径>(手动指定 Ghostscript)、
--engine {auto,gs,acrobat}(强制引擎)、--out-dir <目录>(指定输出位置,默认与 PDF 同目录)。 - 读取结果:每个 PDF 的每一页输出为
<PDF名>_N.png(N 为页码),位于 PDF 同目录或--out-dir。
脚本会打印每文件的成功/失败与最终汇总。
输出格式
- 成功:
[OK] 文件名.pdf,并在对应目录生成<文件名>_1.png、<文件名>_2.png…… - 失败:
[FAIL] 文件名.pdf -> 原因(如 PDF 损坏、引擎不可用)。 - 无引擎:明确提示安装 Ghostscript(双击
gs10080w64.exe)或 Adobe Acrobat,不会静默失败。
红线与边界
- 引擎探测优先级:Ghostscript(
gswin64c.exe等,免费)优先;未找到则回退 Acrobat(需本机已装且可用win32com);都没有则明确报错并给出安装指引。 - 不打包二进制:技能包不含 63MB 的
gs10080w64.exe(安全红线禁止打包可执行文件)。该文件仅作为本机候选探测路径之一;真正使用的是安装后的gswin64c.exe。若本机尚未安装 Ghostscript,请先双击gs10080w64.exe安装。 - 不破坏原文件:仅新增 PNG,绝不删除/覆盖原 PDF;输出文件名带
_N前缀避免误覆盖。 - 注入防护:PDF 路径作为列表参数传递,不拼接到 shell 命令,路径含空格/特殊字符也安全。
- 非 OCR:输出是 PDF 页面的图像快照,不含可搜索文字层;如需文字识别请用 OCR 工具。
- 降级设计:若指定引擎不可用,自动降级或明确报错,不伪造结果。
参考
- Ghostscript 命令、引擎探测逻辑、与参考 VBA 的对应关系见
@references/ghostscript-usage.md。 - 冒烟测试(确定性单测 + best-effort 实时转换)见
test/smoke_test.py,可python test/smoke_test.py复跑。