如何使用 Python 压缩 PDF 文件 | IronPDF

如何用 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
// 该代码片段不可用!
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
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")
// 该代码片段不可用!
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 文件,显示文件大小为 458 KB(在应用 IronPDF Python 压缩之前)

压缩后的 PDF 如何显示?

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

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

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

处理一整文件夹的 PDF 文件时,操作流程与上述 API 相同:遍历每个 .pdf 文件,使用 PdfDocument 加载文件,调用 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}")
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}%")
// 该代码片段不可用!
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.5 just released
Still Scrolling Icon

还在滚动吗?

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