
本文详解如何使用python(pdf2image + pillow)将pdf文档一次性转换为单个、多页的tiff文件,并支持lzw压缩以显著减小文件体积。
默认情况下,pdf2image.convert_from_path() 会将PDF每页转为独立的PIL Image 对象。若直接循环保存(如 images[i].save('page{}.tiff')),结果是多个单页TIFF文件;而实际需求常是一个TIFF容器承载全部页面——这正是TIFF格式原生支持的“多页图像(multipage TIFF)”特性。
实现的关键在于:仅调用一次 save() 方法,利用Pillow的 save_all=True 和 append_images 参数。以下是完整、健壮的转换示例:
from pdf2image import convert_from_path
from PIL import Image
# 将PDF转为图像列表(每页一个Image对象)
images = convert_from_path(
'resume.pdf',
dpi=500,
poppler_path=r'C:\Program Files\poppler-22.11.0\Library\bin'
)
# 合并为单个多页TIFF(启用LZW压缩,大幅降低体积)
if images:
images[0].save(
'resume_multipage.tiff',
save_all=True,
append_images=images[1:],
compression='tiff_lzw', # 推荐!避免生成GB级未压缩文件
dpi=(500, 500) # 可选:显式设置DPI以保持分辨率一致性
)
print(f"✅ 成功生成 {len(images)} 页的多页TIFF:resume_multipage.tiff")
else:
print("⚠️ PDF未解析出任何页面,请检查路径或PDF有效性。")? 关键注意事项:
- save_all=True 是启用多页保存的必要开关;
- append_images 必须传入 images[1:](即除首图外的所有图像),首图作为主图像传入 save();
- compression='tiff_lzw' 是强烈推荐选项:LZW为无损压缩,通常可将TIFF体积减少50%–80%,而'raw'(默认)会导致文件急剧膨胀;
- 若需更高兼容性,也可尝试 'tiff_adobe_deflate'(ZIP压缩),但需Pillow ≥9.1.0;
- dpi 参数建议在 convert_from_path() 和 save() 中同步设置,确保输出分辨率准确;
- Windows用户务必正确配置 poppler_path,否则pdf2image将无法解析PDF。
通过以上方法,你即可高效、专业地生成符合归档与OCR预处理标准的单文件多页TIFF,无需依赖额外商业工具或复杂命令行封装。










