You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:07:19