文章目录
- from pdf2image import convert_from_path # 将 PDF 所有页转换为 JPEG images = convert_from_path(‘document.pdf’, dpi=200) # 保存所有图像 for i, image in enumerate(images): image.save(f’page_{i+1}.jpg’, ‘JPEG’)
- images = convert_from_path( ‘document.pdf’, dpi=300, # 分辨率 first_page=5, # 起始页 last_page=10, # 结束页 fmt=’png’, # 输出格式 output_folder=’output’, # 输出目录 output_file=’doc_page’, # 文件名前缀 thread_count=4, # 使用4线程 size=(1200, None) # 宽度1200px,高度按比例 )
- from pdf2image import convert_from_bytes with open(‘document.pdf’, ‘rb’) as pdf_file: images = convert_from_bytes(pdf_file.read(), dpi=150)
- images = convert_from_path(‘document.pdf’) # 使用 PIL 功能处理图像 for img in images: # 转换为灰度图 grayscale = img.convert(‘L’) grayscale.save(‘grayscale_page.jpg’)
目录
- 一、pdf2image 核心功能
- 二、安装方法
- 三、核心 API 及使用示例
- 1. 基本转换(保存为文件)
- 2. 高级转换选项
- 3. 处理字节流(不从文件读取)
- 4. 直接获取 PIL 图像对象
- 四、关键特性详解
- 五、典型应用场景
- 六、性能优化技巧
- 七、常见问题解决
- 八、与替代方案对比
- 九、最佳实践建议
PDF 转图像:
- 将 PDF 的每一页转换为独立图像文件
- 支持输出格式:JPEG, PNG, PPM, PGM, PBM, TIFF
- 保留原始文档的布局和质量
转换控制:
- 自定义分辨率(DPI)
- 指定转换页码范围
- 多线程处理加速转换
- 图像大小调整
输出选项:
- 直接保存为图像文件
- 返回 PIL 图像对象列表
- 自定义输出文件名格式
# 1. 安装 pdf2image
pip install pdf2image
# 2. 安装依赖的 poppler 工具
## Windows:下载预编译包并添加到 PATH
## macOS:brew install poppler
## Ubuntu/Debian:sudo apt-get install poppler-utils
from pdf2image import convert_from_path
# 将 PDF 所有页转换为 JPEG
images = convert_from_path('document.pdf', dpi=200)
# 保存所有图像
for i, image in enumerate(images):
image.save(f'page_{i+1}.jpg', 'JPEG')
images = convert_from_path(
'document.pdf',
dpi=300, # 分辨率
first_page=5, # 起始页
last_page=10, # 结束页
fmt='png', # 输出格式
output_folder='output', # 输出目录
output_file='doc_page', # 文件名前缀
thread_count=4, # 使用4线程
size=(1200, None) # 宽度1200px,高度按比例
)
from pdf2image import convert_from_bytes
with open('document.pdf', 'rb') as pdf_file:
images = convert_from_bytes(pdf_file.read(), dpi=150)
images = convert_from_path('document.pdf')
# 使用 PIL 功能处理图像
for img in images:
# 转换为灰度图
grayscale = img.convert('L')
grayscale.save('grayscale_page.jpg')
分辨率控制:
- 默认 DPI:200
- 高分辨率转换:
dpi=300用于印刷质量 - 公式:输出像素 = 页面尺寸(英寸) × DPI
线程优化:
- 自动检测 CPU 核心数
- 手动设置:
thread_count=4 - 多线程显著加速大文件转换
输出命名:
- 自动生成序列:
output_file='page'→ page0001.jpg, page0002.jpg - 自定义格式:
output_file='document_{:04d}'
格式支持:
# 支持格式示例 convert_from_path(..., fmt='jpeg') # JPEG (默认) convert_from_path(..., fmt='png') # 无损PNG convert_from_path(..., fmt='tiff') # TIFF格式
大小调整:
- 等比例缩放:
size=(800, None) - 固定尺寸:
size=(600, 800)(可能变形) - 保持宽高比:
size=(None, 1000)
文档预览系统:
# 生成PDF缩略图
convert_from_path('report.pdf',
first_page=0,
last_page=0,
size=(300, 400),
output_folder='thumbnails',
output_file='preview')
OCR 预处理:
# 为Tesseract准备高对比度图像
images = convert_from_path('scan.pdf', dpi=300)
for i, img in enumerate(images):
# 增强对比度
enhanced = ImageEnhance.Contrast(img).enhance(2.0)
enhanced.save(f'ocr_page_{i}.png')
批量处理:
import os
pdf_folder = 'documents'
output_folder = 'converted'
for pdf_file in os.listdir(pdf_folder):
if pdf_file.endswith('.pdf'):
path = os.path.join(pdf_folder, pdf_file)
convert_from_path(path,
output_folder=output_folder,
output_file=os.path.splitext(pdf_file)[0],
fmt='jpeg')
与PyMuPDF结合使用:
import fitz
from pdf2image import convert_from_path
# 使用PyMuPDF提取特定页面
with fitz.open('large_document.pdf') as doc:
# 提取第5-10页为新PDF
doc.select([4, 5, 6, 7, 8, 9])
doc.save('subset.pdf')
# 转换提取的页面
convert_from_path('subset.pdf', dpi=150)
内存管理:
# 使用路径而非字节流减少内存占用
convert_from_path('large.pdf') # 优于 convert_from_bytes()
分块处理大文件:
total_pages = 1000
chunk_size = 100
for start in range(0, total_pages, chunk_size):
end = min(start + chunk_size - 1, total_pages - 1)
convert_from_path('huge.pdf',
first_page=start,
last_page=end,
output_folder=f'chunk_{start//chunk_size}')
格式选择:
- 速度:JPEG > PNG > TIFF
- 质量:TIFF ≈ PNG > JPEG
资源清理:
# 显式关闭资源
images = convert_from_path(...)
for img in images:
img.close()
Poppler 路径问题(Windows):
images = convert_from_path('doc.pdf', poppler_path=r'C:poppler-xxbin')
加密 PDF:
# 目前不支持加密PDF,需先用其他工具解密
内存不足:
- 分块处理大文件
- 降低 DPI(150 通常足够屏幕显示)
- 使用 JPEG 格式替代 PNG
图像质量优化:
# 提高JPEG质量(默认75)
convert_from_path(..., jpegopt={'quality': 95})
| 特性 | pdf2image | PyMuPDF | pdfplumber |
|---|---|---|---|
| 转换速度 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| 图像质量 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 文本提取 | ❌ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| PDF 操作功能 | ❌ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| 纯 Python 实现 | ❌ | ❌ | ⭐⭐⭐⭐⭐ |
| 依赖外部工具 | ✅ (poppler) | ❌ | ❌ |
生产环境使用:
# 添加超时和错误处理
from pdf2image.exceptions import PDFInfoNotInstalledError, PDFPageCountError
try:
images = convert_from_path('doc.pdf', timeout=120)
except (PDFInfoNotInstalledError, PDFPageCountError) as e:
print(f"转换失败: {str(e)}")
# 回退方案或日志记录
Docker 部署:
FROM python:3.9-slim RUN apt-get update && apt-get install -y poppler-utils COPY requirements.txt . RUN pip install -r requirements.txt
配置参考:
# 高质量归档转换配置
convert_from_path(
'important.pdf',
dpi=300,
fmt='tiff',
output_folder='archives',
jpegopt={'quality': 100} if fmt == 'jpeg' else None,
thread_count=os.cpu_count() // 2 # 保留部分CPU资源
)
最新特性(v1.16.0+):
# 单文件多页TIFF输出
convert_from_path('doc.pdf',
single_file=True,
output_file='combined.tiff',
fmt='tiff')
pdf2image是处理 PDF 转图像任务的高效工具,特别适合需要批量处理、高质量输出的场景。通过合理配置 DPI、线程数和输出格式,可平衡速度与质量需求。
以上就是Python使用pdf2image实现PDF转图片的完整指南的详细内容,更多关于Python pdf2image实现PDF转图片的资料请关注风君子博客其它相关文章!
您可能感兴趣的文章:
- 利用Python将PDF文件转换为PNG图片的代码示例
- Python实现将单张或多张图片转PDF
- Python+PyQt5实现PDF转图片工具的深度解析
- Python实现把PDF文件转换成长图PNG格式输出图片
- Python实现将PDF转换为PNG图片的示例代码
- 使用Python将图片转换为PDF格式的三种常见方法