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

Macbrew install poppler

Linux:大部分发行版自带 pdftoppm,没有的话装 poppler-utils

condaconda install -c conda-forge poppler

README区域截图

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_folderpaths_only 是必须的。

5、 适合哪些场景

  • 需要把 PDF 页面批量生成预览缩略图的后端服务
  • 文档处理管线里,把 PDF 转成图片再喂给 OCR 或视觉模型
  • 需要按页码截取 PDF 内容的自动化脚本

它只干一件事,但这件事干得够直接。不绕弯子,不拖泥带水,代码量也不大,读源码或者二次封装都不费劲。

成图片再喂给 OCR 或视觉模型

  • 需要按页码截取 PDF 内容的自动化脚本

它只干一件事,但这件事干得够直接。不绕弯子,不拖泥带水,代码量也不大,读源码或者二次封装都不费劲。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐