如何使用 Python 压缩 PDF 文件

如何用 Python 压缩 PDF 文件

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF的CompressImages方法让Python开发者通过调整质量设置压缩嵌入图像,以减少PDF文件大小,从而帮助优化存储并加快文档共享而不牺牲可读性。

快速入门:使用 Python 压缩 PDF 文件

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-compress-pdf/quickstart.py
from ironpdf import PdfDocument

# 1. Install IronPDF: pip install ironpdf
# 2. Load your PDF
pdf = PdfDocument("your-file.pdf")
# 3. Compress images (quality: 1-100)
pdf.CompressImages(60)
# 4. Save compressed PDF
pdf.SaveAs("compressed.pdf")
# 5. Adjust quality parameter to balance size vs quality
PYTHON

PDF文件广泛用于文档存储和共享,但在文件大小较大时可能变得繁琐。 上传或通过电子邮件发送一个10 MB的报告明显比发送一个2 MB的等效文件慢,文档量大时存储费用会增加。 PDF压缩通过在保持内容可读的同时减小文件大小来解决这个问题。

本指南展示了如何使用IronPDF在Python中压缩PDF文件。 实用代码示例既涵盖了标准图像压缩,也涵盖了高级基于分辨率的压缩,因此您可以根据适合的流程选择方法。无论是处理HTML到PDF转换还是现有文档,API都相同。

什么是 IronPDF,为什么使用它进行 PDF 压缩?

IronPDF是一个Python PDF库,处理PDF文档的创建、阅读、编辑和优化。 它适用于从头开始生成的文件,从HTML转换的文件,或从磁盘加载的文件。 其压缩API主要针对的是图像,这是大PDF尺寸的主要原因。

CompressImages方法接受一个1到100的质量整数和一个可选的布尔值,该布尔值将图像缩小到其可见分辨率。 这种双参数设计让您可以精确地调整压缩:高流量报告仪表板可能使用质量70以保持视觉清晰,而内部档案系统可能使用质量40以实现最大存储节省。 库处理所有内部编码,因此无需附加依赖。

IronPDF是Iron Suite的一部分,涵盖文档创建、条码处理、OCR和ZIP归档,全部来自共享的Python安装。 对于已经使用IronPDF从头创建PDF的开发人员,压缩在保存或分发文件之前作为自然的后续步骤。

如何在Python中安装IronPDF?

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-compress-pdf/install.sh
:ProductInstall
:ProductInstall

:ProductInstall
SHELL

请注意IronPDF for Python在IronPDF .NET库之上运行,需求.NET 6.0 SDK。 从官方Microsoft网站下载.NET 6.0 SDK,然后运行pip安装。

安装后,为生产环境配置您的许可证密钥。 IronPDF包含一个免费的30天试用,涵盖所有功能,包括压缩,无需信用卡。 PyPI包页面列出了最新发布说明和依赖详细信息。

如何使用IronPDF压缩PDF文件?

通过给CompressImages传递一个质量整数以减小整个文档中嵌入图像的大小。 较低的整数会产生较小的文件,但会降低图像保真度; 较高的整数保留更多细节。 下面的示例展示了标准压缩调用和一个高级调用,该调用还将图片缩小到其可见尺寸。

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-compress-pdf/compress-basic.py
from ironpdf import PdfDocument

# Load the PDF document from a file
pdf = PdfDocument("Image based PDF.pdf")

# Compress images to quality 60 (lower numbers increase compression)
pdf.CompressImages(60)
pdf.SaveAs("document_compressed.pdf")

# Advanced: also scale images down to their visible size in the PDF
# Note: scaling can affect image clarity if pages are resized later
pdf.CompressImages(90, True)
pdf.SaveAs("Compressed.pdf")
PYTHON

压缩参数意味着什么?

CompressImages接受两个参数:

  • 质量(必需):1到100之间的整数。100的值保留原始图像质量,不会应用压缩。 40到80之间的值覆盖大多数实用使用案例,60是一般用途文档的常见起点。
  • 按可见尺寸缩放(可选): 默认值为False的布尔值。 当True时,每个图像都会重新采样以匹配其在页面上的呈现尺寸。 这会在质量压缩的基础上增加第二次缩减,通过产生更小的文件来实现。 请注意,之后缩放或以更高DPI打印的页面可能会出现失真。

保存后,可在任何PDF查看器中将压缩后的文件与原件进行比较,以确认质量符合您的要求。 有关更多模式示例,请参阅PDF压缩示例页面。

压缩前的 PDF 是什么样子?

在Microsoft Edge浏览器中打开的PDF文件,显示在应用IronPDF Python压缩前的文件大小为458KB

压缩后的 PDF 如何显示?

在Windows资源管理器中显示压缩后的PDF文件条目,文件大小为357KB,使用IronPDF CompressImages在质量60下从458KB减少了22%

比较显示使用质量60从458 KB减少到357 KB(大约22%)。含较多摄影内容的文件通常比以文本或矢量图形为主的文件减小得更多。

Icon Quote related to 压缩后的 PDF 如何显示?

我最喜欢的这种库是 IronPDF。它允许快速高效地操作 PDF 文件。它还具有许多有价值的功能,比如导出为 PDF/A 格式和数字签名 PDF 文档。

Milan Jovanovic related to 压缩后的 PDF 如何显示?

Milan Jovanovic

微软MVP

查看案例研究
Icon Quote related to 压缩后的 PDF 如何显示?

IronOCR 意味着我们每年可以节省 $40,000 的人工处理成本,同时提高生产力,并释放资源用于高影响任务。我强烈推荐它。

Brent Matzelle related to 压缩后的 PDF 如何显示?

Brent Matzelle

首席技术官,OPYN

查看案例研究
Icon Quote related to 压缩后的 PDF 如何显示?

Iron Suite 在我们的运营中起着至关重要的作用。这些工具提高了业务各方面的效率,包括创建平面图和改善库存管理。

David Jones related to 压缩后的 PDF 如何显示?

David Jones

首席软件工程师,Agorus Build

查看案例研究

如何对多个PDF文件应用批处理压缩?

处理一个PDF文件夹遵循相同的API:遍历每个CompressImages,并保存结果。 下面的函数将此模式封装成可重用的工具。

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-compress-pdf/batch-compress.py
import os
from ironpdf import PdfDocument

def batch_compress_pdfs(input_folder, output_folder, quality=60):
    """
    Compress all PDF files in a folder.

    Args:
        input_folder: Path to folder containing source PDFs
        output_folder: Path where compressed PDFs will be saved
        quality: Compression quality (1–100); default is 60
    """
    # Create the output folder if it does not exist
    os.makedirs(output_folder, exist_ok=True)

    for filename in os.listdir(input_folder):
        if filename.endswith(".pdf"):
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, f"compressed_{filename}")

            try:
                pdf = PdfDocument(input_path)
                pdf.CompressImages(quality)
                pdf.SaveAs(output_path)
                print(f"Compressed: {filename}")
            except Exception as e:
                print(f"Error compressing {filename}: {e}")
import os
from ironpdf import PdfDocument

def batch_compress_pdfs(input_folder, output_folder, quality=60):
    """
    Compress all PDF files in a folder.

    Args:
        input_folder: Path to folder containing source PDFs
        output_folder: Path where compressed PDFs will be saved
        quality: Compression quality (1–100); default is 60
    """
    # Create the output folder if it does not exist
    os.makedirs(output_folder, exist_ok=True)

    for filename in os.listdir(input_folder):
        if filename.endswith(".pdf"):
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, f"compressed_{filename}")

            try:
                pdf = PdfDocument(input_path)
                pdf.CompressImages(quality)
                pdf.SaveAs(output_path)
                print(f"Compressed: {filename}")
            except Exception as e:
                print(f"Error compressing {filename}: {e}")

import os
from ironpdf import PdfDocument

def batch_compress_pdfs(input_folder, output_folder, quality=60):
    """
    Compress all PDF files in a folder.

    Args:
        input_folder: Path to folder containing source PDFs
        output_folder: Path where compressed PDFs will be saved
        quality: Compression quality (1–100); default is 60
    """
    # Create the output folder if it does not exist
    os.makedirs(output_folder, exist_ok=True)

    for filename in os.listdir(input_folder):
        if filename.endswith(".pdf"):
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, f"compressed_{filename}")

            try:
                pdf = PdfDocument(input_path)
                pdf.CompressImages(quality)
                pdf.SaveAs(output_path)
                print(f"Compressed: {filename}")
            except Exception as e:
                print(f"Error compressing {filename}: {e}")
PYTHON

except块会阻止单个损坏或有密码保护的文件停止整个批处理。 将文件名与异常消息一起记录可以更容易地识别哪些文件需要人工审核。 对于高产量流水线,考虑将文件夹拆分成块,并在并行线程中处理。

提示对于混合摄影图像和技术图的文件,运行两次:对照片质量50,对图表重页质量85。 使用合并PDFs API进行提取和重新合并,以保持每个部分的最佳质量水平。

PDF压缩应该使用哪些质量设置?

正确的质量设置取决于PDF在压缩后将如何使用。 三个范围涵盖最常见场景。

高质量(70-90):旨在打印或正式分发的文件受益于保持在此范围内。 文本保持清晰,图表在标准打印分辨率下可读。 文件大小缩减通常为10-25%,但对于大多数读者来说,输出与来源没有区别。

中等质量(50-70):适合网页传输和电子邮件附件。 摄影视内容在仔细检查时略显柔和,但文件大小的缩减(通常为25-50%)显著提高了加载时间和电子邮件的可交付性。 大多数文档管理系统和门户上传在质量60时效果良好。

强力压缩(30-50):内部档案、长期存储备份和不会打印的文件可以使用此范围。 在质量40时,图像明显较柔和,但由PDF引擎渲染的文本(而非嵌入为图像的文本)仍然完全清晰。这种方法也适用于将被转换为图像并在显示前缩放的文件。

重要始终保留原始未压缩文件的可访问性。 图像的压缩会导致损失; 从压缩的PDF中无法恢复原始图像数据。

如何在Python中验证压缩结果?

通过编程方式检查输出文件大小之前,确认压缩达到了你的目标,然后文件进入管道的下一步。Python的内置os.path.getsize可以返回任何文件路径的字节数,因此验证不需要额外的库。

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-compress-pdf/verify-compression.py
import os
from ironpdf import PdfDocument

# Load and compress the document
pdf = PdfDocument("report.pdf")
original_size = os.path.getsize("report.pdf")

pdf.CompressImages(60)
pdf.SaveAs("report_compressed.pdf")

compressed_size = os.path.getsize("report_compressed.pdf")
reduction_pct = (1 - compressed_size / original_size) * 100

# Report results to confirm compression was effective
print(f"Original:   {original_size / 1024:.1f} KB")
print(f"Compressed: {compressed_size / 1024:.1f} KB")
print(f"Reduction:  {reduction_pct:.1f}%")
PYTHON

输出提供了一个可以记录或与阈值比较的清晰减小比例。 如果减少比例低于预期,该文档可能几乎没有嵌入图像或没有嵌入图像。 在这种情况下,不管质量设置如何,文件大小将基本保持不变,因为CompressImages仅针对栅格图像。 此方法不影响文本和矢量图形。

请注意IronPDF的压缩针对PDF中的栅格图像使用JPEG编码。 JPEG压缩标准定义了质量到大小的权衡,质量参数控制着这种权衡。 较低的值会应用更强的JPEG量化,减少文件大小和图像细节。

Python中的PDF压缩下一步是什么?

IronPDF的CompressImages方法为Python开发者提供了一个单一、明确作用域的API来减少PDF文件的大小。 调整质量参数以在存储节省与视觉保真度之间取得平衡,并添加分辨率缩减布尔值,以便在输出尺寸固定时进行第二次缩减。 想全面了解IronPDF的处理能力,请查看Python PDF库概述页面。

开始您的免费试用,同时测试IronPDF的全功能套件,包括HTML到PDF转换、数字签名、表单处理和文档合并。 试用期结束时,查看许可选项以找到适合您部署的计划。

准备看看IronPDF还能做些什么吗? 探索完整的Python PDF教程,了解IronPDF的核心功能。

常见问题解答

我如何安装IronPDF以在Python中压缩PDF文件?

在终端中运行 pip install ironpdf。IronPDF for Python需要先安装.NET 6.0 SDK。安装后,从ironpdf包中导入PdfDocument以开始压缩PDF。

在Python中压缩PDF文件的基本代码是什么?

使用PdfDocument("your-file.pdf")加载文件,调用CompressImages(60),其中质量整数从1到100,然后使用SaveAs("compressed.pdf")保存结果。调整质量值以平衡文件大小和图像保真度。

质量参数如何影响 PDF 压缩?

CompressImages质量参数范围从1到100。较低值会产生更小的文件,但图像软化明显。较高值保留更多细节,但文件较大。40到80之间的值涵盖了大多数实际使用情形,60是常见的起始点。

我可以将第二个参数传递给CompressImages吗?

可以。第二个参数传递 True 告诉 IronPDF 在应用质量压缩之前将每个图像重新取样到其在页面上的可见尺寸。这增加了第二次减少过程,并产生较小的文件,但在随后缩放或以更高DPI打印的页面可能会出现伪影。

PDF压缩是否影响文本和矢量图形?

CompressImages 针对嵌入在PDF中的栅格图像。PDF引擎渲染的文本和矢量图形不受此方法影响,因此几乎没有或没有嵌入图像的文档会显示最小的大小缩减。

如何验证Python中的文件大小减缩?

使用os.path.getsize("compressed.pdf")获取保存文件的字节计数并与原始文件进行比较。将差值除以原始大小可得浮点数形式的减缩百分比。

哪个质量范围最适合网络传输?

在50到70之间的质量设置适用于大多数网络传输和电子邮件场景。该范围通常将文件大小减少25%到50%,同时保持照片内容的视觉可接受性以便在屏幕上阅读。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
版本: 2026.6 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据?
运行示例看着你的HTML代码变成PDF文件。