如何将PDF批量转换为多页TIFF文件

本文详解如何使用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,无需依赖额外商业工具或复杂命令行封装。