目录:
推荐使用 PyMuPDF,安装简单,使用简单。
pdf2image 用于将 PDF 文档转换为图像格式。原理是封装底层的 poppler-utils 工具集,将PDF的每一页转换为PIL(Python Imaging Library,现为 Pillow)的 Image 对象。
安装依赖:
$ pip install pdf2image
为了后续的图像处理,建议同时安装 Pillow 库:
$ pip install Pillow
pdf2image 本身不包含 PDF 渲染引擎,它依赖于开源的 poppler-utils,还需要安装 poppler:
# MacOS
$ brew install poppler
# Linux
$ sudo apt-get install poppler-utils
可以控制图片分辨率,控制从 PDF 指定页码范围生成图片等。
from pdf2image import convert_from_path
images = convert_from_path(
'document.pdf',
dpi=300, # 提高分辨率以获得更清晰的图像,适合打印或 OCR
first_page=5, # 从第 5 页开始转换(页码从 1 开始)
last_page=10, # 转换到第 10 页结束
fmt='png', # 指定输出为无损的 PNG 格式
output_folder='./output_images', # 指定图像输出目录
output_file='doc_page', # 输出文件前缀,将生成如 doc_page-0001.png 的文件
thread_count=4, # 使用 4 个线程并行处理,加速转换
size=(1200, None) # 限制图像宽度为 1200 像素,高度按比例自动计算
)
from pdf2image import convert_from_path
# 指定 PDF 文件路径,进行转换,默认 DPI 为 200,输出格式为 PPM
images = convert_from_path('document.pdf')
# 遍历 PIL 图像列表,按页序保存为 JPEG 文件
for i, image in enumerate(images):
image.save(f'page_{i+1}.jpg', 'JPEG')
当 PDF 数据来源于网络请求或数据库时,可以使用字节流转换。
from pdf2image import convert_from_bytes
# 假设pdf_bytes是从网络或数据库获取的PDF二进制数据
with open('document.pdf', 'rb') as f:
pdf_bytes = f.read()
images = convert_from_bytes(pdf_bytes, dpi=150)
# 后续处理与保存同上
from pdf2image import convert_from_path
from PIL import ImageEnhance
images = convert_from_path('document.pdf')
for i, img in enumerate(images):
# 示例1:转换为灰度图
grayscale_img = img.convert('L')
grayscale_img.save(f'page_{i+1}_gray.jpg')
# 示例2:增强图像对比度(常用于OCR预处理)
enhancer = ImageEnhance.Contrast(img)
enhanced_img = enhancer.enhance(2.0) # 对比度增强2倍
# 保存图片
enhanced_img.save(f'page_{i+1}_enhanced.png')
from pdf2image import pdfinfo_from_path
info = pdfinfo_from_path('document.pdf')
total_pages = info['Pages']
print(f"该PDF文档总共有 {total_pages} 页。")
↶ 返回首页 ↶