pdf2image:PDF 转图片的 Python 小工具
pdf2image:PDF 转图片的 Python 小工具
pdf2image 在 GitHub 上拿到了 1,971 个 Star。
这是一个轻量级的 Python 模块,封装了 pdftoppm 和 pdftocairo,把 PDF 页面转成 PIL Image 对象。如果你做文档处理、批量生成缩略图、或者需要把 PDF 内容嵌入到图片流程里,这个小工具能省不少事。

1、 这玩意儿是干嘛的
核心就一件事:把 PDF 的每一页转成一张图片。
它不做复杂的 PDF 解析,也不处理排版,只是调用 poppler 的 pdftoppm 或 pdftocairo,把页面栅格化成 PIL Image 对象。返回的是一个列表,每个元素对应 PDF 的一页。
支持两种入口:
from pdf2image import convert_from_path, convert_from_bytes
convert_from_path 从文件路径读取,convert_from_bytes 从二进制数据读取。如果你担心大文件撑爆内存,可以用 output_folder 参数把图片写到磁盘,或者用 paths_only=True 只返回路径而不加载进内存。
2、 安装
Python 3.7 以上直接 pip:
pip install pdf2image
但这只是 Python 层面的包,底层依赖 poppler。不同系统的装法不一样:
Windows:下载 poppler for Windows,把 bin 目录加到 PATH,或者在代码里指定 poppler_path。
Mac:brew install poppler
Linux:大部分发行版自带 pdftoppm,没有的话装 poppler-utils。
conda:conda install -c conda-forge poppler

3、 怎么用
最简单的用法,一行代码:
images = convert_from_path('/path/to/example.pdf')
images 是一个列表,每个元素是 PIL Image,按页码顺序排列。
如果需要更细的控制,常用参数有这些:
| 参数 | 作用 |
|---|---|
dpi |
输出分辨率,默认 200 |
first_page / last_page |
只转换指定页码范围 |
fmt |
输出格式,支持 ppm、jpeg、png 等 |
output_folder |
输出目录,避免内存占用过高 |
paths_only |
返回文件路径列表,不返回 Image 对象 |
size |
控制输出尺寸,支持等比缩放或强制尺寸 |
grayscale |
转为灰度图 |
thread_count |
并发线程数 |
timeout |
超时时间,防止卡住 |
use_pdftocairo |
强制使用 pdftocairo,性能更好 |
示例,指定分辨率和输出目录:
import tempfile
with tempfile.TemporaryDirectory() as path:
images = convert_from_path('example.pdf', dpi=300, output_folder=path)
4、 性能相关
几个实际用下来的经验:
SSD 上配 output_folder 会快很多,因为 I/O 瓶颈被缓解了。机械硬盘别指望。
线程数超过 4 收益递减,I/O 会压死。JPEG 格式比 PNG 快,PNG 的压缩开销大。
大 PDF 直接转内存容易 OOM,尤其是几百页以上的文档。这时候 output_folder 或 paths_only 是必须的。
5、 适合哪些场景
- 需要把 PDF 页面批量生成预览缩略图的后端服务
- 文档处理管线里,把 PDF 转成图片再喂给 OCR 或视觉模型
- 需要按页码截取 PDF 内容的自动化脚本
它只干一件事,但这件事干得够直接。不绕弯子,不拖泥带水,代码量也不大,读源码或者二次封装都不费劲。
成图片再喂给 OCR 或视觉模型
- 需要按页码截取 PDF 内容的自动化脚本
它只干一件事,但这件事干得够直接。不绕弯子,不拖泥带水,代码量也不大,读源码或者二次封装都不费劲。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)