PDF 批量转图片:一个文件夹的 PDF 逐页导出 PNG

2026-10-06 · 本脚本已实跑验证(2 个 PDF 共 5 页全部导出,输出尺寸 1191×1684)

做PPT插图、发朋友圈长图、上传到只收图片的系统——都需要把 PDF 每页变成图片。手动一页页截图又糊又慢。这里用 pypdfium2(pip install pypdfium2,注意名字带个 2,它是 PDFium 的 Python 绑定)批量导出,中文文件名照常处理,Linux / Windows / Mac 都能跑。

脚本(实跑通过)

# -*- coding: utf-8 -*-
"""PDF 批量转 PNG:pypdfium2 实测版"""
import sys, pathlib
import pypdfium2 as pdfium

SCALE = 2.0  # 缩放倍数:2.0 ≈ 144 DPI,3.0 ≈ 216 DPI
OUT_DIR = "pdf_images"

def convert(pdf_path: pathlib.Path):
    doc = pdfium.PdfDocument(str(pdf_path))
    n = 0
    for i, page in enumerate(doc):
        img = page.render(scale=SCALE).to_pil()
        out = pathlib.Path(OUT_DIR) / f"{pdf_path.stem}-{i+1:03d}.png"
        img.save(out)
        n += 1
    doc.close()
    return n

if __name__ == "__main__":
    pathlib.Path(OUT_DIR).mkdir(exist_ok=True)
    args = sys.argv[1:] or sorted(pathlib.Path(".").glob("*.pdf"))
    for p in [pathlib.Path(a) for a in args]:
        print(f"{p.name}: {convert(p)} 页已导出到 {OUT_DIR}/")

实跑输出:

invoice-a.pdf: 2 页已导出到 pdf_images/
测试文档一.pdf: 3 页已导出到 pdf_images/

输出文件 pdf_images/ 下:invoice-a-001.png、测试文档一-003.png 等 5 张,file 确认为 PNG image data, 1191 x 1684(A4 页面 × 2 倍缩放),文字清晰无锯齿。

实跑复现的坑

坑1:包名叫 pypdfium2,不是 pdfium / pypdfium

pip install pypdfium2——装 pdfium 或 pypdfium 都是别的项目,import 会报 ModuleNotFoundError。import 时也是 import pypdfium2。

坑2:为什么不用 PyMuPDF?

PyMuPDF(fitz)功能更强,但在部分 Linux 环境 / 受管 Python 上装不上或证书报错;pypdfium2 是纯 wheel 依赖(只带 Pillow),基本 pip install 一把过。只是转图片这件事上两者效果相当。

坑3:清晰度由 scale 控制,不是 DPI 参数

API 没有 dpi 参数,渲染清晰度 = scale。scale=1 是 72 DPI(屏幕看都嫌糊),scale=2.0(≈144 DPI)适合插图,scale=3.0(≈216 DPI)适合打印。文件体积随 scale 平方增长,别一上来就开 5.0。

坑4:文件名别用会变的计数器开头

输出按 {文件名}-{页号:03d}.png 命名,页号补零保证排序正确;如果反过来 {序号}-{文件名},合并多个 PDF 后第二个文件的 001 会和第一个的撞名(除非加全局计数)。想 JPG 就把 .png 换成 .jpg(to_pil().save() 自动识别格式)。

需要现成的?

懒得装 Python 环境?喵窝提供文档代做服务(¥19.9):把 PDF 发给我们,交付转好的图片包(或反向图片合成 PDF)+ 可复用脚本,包免费重做(虚拟物品交付后不退款;未达承诺免费重做)。
→ 去喵窝资源铺看服务