如何在Python代码中借助PyMuPDF提升PDF压缩效果?
优化PyMuPDF的PDF压缩效果方案
一、调整PyMuPDF的doc.save()参数提升压缩
PyMuPDF的save()方法有几个关键参数可以针对性优化压缩效果,直接替换你现有代码里的保存逻辑即可:
- 设置
garbage=3:启用最高级的垃圾回收,清理PDF里的冗余对象(比如废弃页面、未使用资源),这是基础优化项。 - 开启
deflate=True:对所有可压缩的流对象(图片、字体等)使用DEFLATE压缩算法,默认可能仅压缩部分内容。 - 自定义图片压缩参数:通过
clean=True配合image_quality和image_downsample处理PDF内的图片,这是压缩核心:image_quality:设置图片质量,范围0-100,值越小压缩率越高(比如设为60)。image_downsample:设置图片下采样分辨率,比如设为150(单位DPI),降低高分辨率图片尺寸。
示例代码:
import fitz # PyMuPDF doc = fitz.open("input.pdf") # 保存时启用全量压缩优化 doc.save( "compressed.pdf", garbage=3, deflate=True, clean=True, image_quality=60, image_downsample=150 ) doc.close()
二、其他可行压缩方案(适配Google Colab环境)
如果PyMuPDF参数调整后仍达不到预期,可以试试这些方法:
1. 使用Ghostscript命令行工具
Colab默认预装Ghostscript,它的PDF压缩能力很强,适合批量处理。可通过Python的subprocess调用:
import subprocess def compress_pdf_ghostscript(input_path, output_path, quality="ebook"): # quality可选参数:screen(最低)、ebook(中等)、printer(高质量)、prepress(最高) command = [ "gs", "-sDEVICE=pdfwrite", "-dCompatibilityLevel=1.4", f"-dPDFSETTINGS=/{quality}", "-dNOPAUSE", "-dBATCH", "-dQUIET", f"-sOutputFile={output_path}", input_path ] subprocess.run(command, check=True) # 调用示例 compress_pdf_ghostscript("input.pdf", "gs_compressed.pdf", "ebook")
2. 结合Google Drive API批量处理
挂载Drive后遍历文件,应用上述压缩方法即可实现批量处理:
from google.colab import drive import os drive.mount('/content/drive') # 遍历Drive指定文件夹下的所有PDF pdf_dir = "/content/drive/MyDrive/你的PDF文件夹" for root, dirs, files in os.walk(pdf_dir): for file in files: if file.lower().endswith(".pdf"): input_path = os.path.join(root, file) # 避免覆盖原文件,重命名输出 output_path = os.path.join(root, f"compressed_{file}") # 调用PyMuPDF压缩逻辑 doc = fitz.open(input_path) doc.save( output_path, garbage=3, deflate=True, clean=True, image_quality=50, image_downsample=120 ) doc.close()
注意事项
- 测试不同参数组合:纯文字PDF可将
image_quality设更低,图片多的PDF需平衡质量与大小。 - 备份原文件:压缩前建议备份,避免不可逆的质量损失。
- 批量处理效率:Ghostscript处理大文件时比PyMuPDF更快,适合大量PDF场景。
内容的提问来源于stack exchange,提问作者Pranay kumar
相关产品推荐
相关产品推荐

