如何在C#中压缩PDF

如何使用 IronPDF 在 C# 中进行 PDF 压缩

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

IronPDF 在 C# 中提供强大的 PDF 压缩功能,通过压缩嵌入式图像和优化 PDF 树结构来减小文件大小,使文档在保持质量的同时更易于管理存储和共享。

PDF 压缩可以减小 PDF 文档的文件大小,使其在存储、共享和传输时更易于管理。 无论您是在处理 从 HTML 生成的 PDF 还是 现有的 PDF 文件,压缩对于优化文档处理都至关重要。

图片通常占 PDF 文件大小的大部分。 IronPDF 提供压缩功能,可减小嵌入图片的大小,并优化表格较多的 PDF 中经常出现的树形结构。 这些技术可与通过各种方法创建的 PDF 无缝协作,包括 URL 到 PDF 的转换HTML 文件转换

快速入门:使用 IronPDF 实现 PDF 压缩

使用 IronPDF 的压缩工具减小 PDF 文件大小。 使用 PdfDocument.FromFile 加载您的 PDF 文件,然后调用 CompressAndSaveAs 即可一步完成压缩并保存优化后的 PDF 文件。此过程可在保持文件质量的同时显著减小文件大小。

  1. 使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronPdf

    PM > Install-Package IronPdf
  2. 复制并运行这段代码。

    PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40);
  3. 部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronPDF

    arrow pointer


请注意之前的压缩方法,例如 CompressStructTreeCompress(CompressionOptions),已被弃用。

如何压缩 PDF 中的图像?

JPEG 压缩质量接受从 0(最大压缩)到 100(最小损失)的值,底层引擎决定如何应用该值。 在处理包含嵌入式图像的 PDF 或需要管理字体和图形时,了解这些级别会有所帮助。

  • 90% 及以上:高质量
  • 80%-90%:中等质量
  • 70%-80%:低质量

尝试使用各种值来平衡质量和文件大小。质量降低因输入图像类型而异--有些图像比其他图像显示出更明显的清晰度损失。 在使用 Azure Blob Storage 中的图像或使用 自定义水印创建 PDF 时,这一点尤为重要。

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-image.cs
using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page");

// Compress images in the PDF
pdf.CompressAndSaveAs("compressed.pdf", 40);
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page")

' Compress images in the PDF
pdf.CompressAndSaveAs("compressed.pdf", 40)
$vbLabelText   $csharpLabel

图像压缩会带来哪些结果?

减少了 39.24%

显示压缩.pdf (449 KB) 与非压缩.pdf (739 KB) 的文件对比,展示图像压缩结果

质量参数如何工作?

quality 参数在 CompressAndSaveAs 中控制应用于每个嵌入图像的 JPEG 编码质量。 传递一个介于 0(最大压缩,最低质量)到 100(最小压缩,最高质量)之间的整数,或者传递 null 以完全跳过图像压缩。

IronPDF在压缩期间会自动重新编码并缩放图像,因此不需要其他选项。 较低的值会产生更小的文件,但可能引入可见的伪影 - 尝试以找到适合您内容的平衡。


如何压缩 PDF 树结构?

此功能通过移除 Chrome 引擎创建的树状结构来减小 PDF 文件大小。将 removeStructureTree: true 作为 CompressAndSaveAs 的第三个参数传递以启用此功能。 对由Chrome引擎生成且包含大量表格数据的PDF最有效。 有些渲染引擎输出的 PDF 没有这种结构,因此在这种情况下该功能无效。 在处理复杂布局或合并具有冗余结构元素的多个 PDF 文件时,这种技术非常有价值。

删除树形结构可能会影响文本高亮和提取效果。 在应用压缩时,尤其是当用户需要从压缩 PDF 中提取文本和图像时,要考虑到这种权衡。

Test CompressAndSaveAs with tree structure removal using this PDF with table data.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-tree-structure.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("table.pdf");

// Compress tree structure in PDF
pdf.CompressAndSaveAs("compressedTable.pdf", null, true);
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("table.pdf")

' Compress tree structure in PDF
pdf.CompressAndSaveAs("compressedTable.pdf", Nothing, True)
$vbLabelText   $csharpLabel

树形结构压缩可以减少多少文件大小?

减少了 67.90%! 此百分比在更大的表格PDF中增加。

显示压缩结果的文件比较 compressedTable.pdf (52 KB) vs table.pdf (162 KB)

如何同时应用两种压缩方法?

CompressAndSaveAs 在一次调用中同时处理图像和树结构压缩 — 传递一个 quality 值,并将 removeStructureTree 设置为 true。 这种组合方法对于包含图像和结构化数据的复杂 PDF 尤为有效,例如包含图表的报告或内嵌表格和图形的文档。

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-compress.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("sample.pdf");

// Configure compression with automatic optimization
pdf.CompressAndSaveAs("compressed.pdf", 80, true);
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")

' Configure compression with automatic optimization
pdf.CompressAndSaveAs("compressed.pdf", 80, True)
$vbLabelText   $csharpLabel

CompressAndSaveAs接受哪些参数?

  • outputPath (字符串): 压缩 PDF 文件将保存的文件路径。

  • quality (int?, 0–100): 应用于每个嵌入图像的 JPEG 质量。 较低的值会产生更小的文件。 传递 null 可完全跳过图像压缩。

  • removeStructureTree(布尔值,默认值为 false):当设置为 true 时,会移除 PDF 结构树以进一步减小文件大小。对于包含表格的 HTML 生成的 PDF 文件最为有效。

在申请压缩时,请考虑您的使用案例。 存档目的可能会优先考虑质量而不是文件大小。网络分发可能需要较小的文件。 根据您处理的是 PDF/A 兼容文档还是标准 PDF,对设置进行微调。

如何在不保存到磁盘的情况下压缩PDF文件?

在许多实际场景中,例如 API 响应、云函数或电子邮件附件,将压缩的 PDF 写入磁盘是不必要的或不切实际的。

CompressPdfToBytes 将压缩后的 PDF 作为字节数组返回,让您可以完全控制输出的存储或传输方式。 CompressPdfToBytesCompressPdfToStream 都接受一个可选的 CompressionMode 参数,该参数控制压缩的执行方式。

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-to-bytes.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("sample.pdf");

// Compress and return as byte array
byte[] compressedBytes = pdf.CompressPdfToBytes();

File.WriteAllBytes("compressed.pdf", compressedBytes);
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")

' Compress and return as byte array
Dim compressedBytes As Byte() = pdf.CompressPdfToBytes()

File.WriteAllBytes("compressed.pdf", compressedBytes)
$vbLabelText   $csharpLabel

有哪些压缩模式选项?

不同的部署环境对磁盘访问和性能有不同的限制。 CompressionMode 枚举允许您选择合适的权衡。

  • Automatic(默认):根据系统功能选择最佳压缩方法。 首先尝试 HighQuality,如果磁盘访问受限,则回退到 FastMemory

  • FastMemory: 完全在内存中执行压缩,无需磁盘 I/O。 速度最快,但不进行图像重采样或降采样,因此会生成较大的输出文件。

  • HighQuality: 使用临时磁盘访问应用最大压缩。 生成最小的输出文件,并进行全面的图像优化。 需要对系统临时目录拥有写入权限。

如果您需要 Stream 而不是字节数组,请使用 CompressPdfToStream。 当直接向 HTTP 响应、云存储上传或任何基于流的工作流传输数据时,这非常有用。

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-to-stream.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("sample.pdf");

// Compress and return as Stream
using var compressedStream = pdf.CompressPdfToStream();

File.WriteAllBytes("compressed.pdf", compressedStream.ToArray());
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")

' Compress and return as Stream
Using compressedStream = pdf.CompressPdfToStream()
    File.WriteAllBytes("compressed.pdf", compressedStream.ToArray())
End Using
$vbLabelText   $csharpLabel

CompressPdfToBytesCompressPdfToStream 现已在所有IronPDF平台上可用,包括 Java、 Node.js和 Python。

准备好看看您还能做些什么吗? 点击此处查看我们的教程页面:附加功能

常见问题解答

压缩后 PDF 文件的大小能减少多少?

IronPDF 可通过图像压缩和结构优化将 PDF 文件尺寸缩小 75%。在所示示例中,利用图像压缩技术将文件缩小了 39.24%。

IronPDF 如何在 C# 中压缩 PDF 文件?

IronPDF 通过一个方法——CompressAndSaveAs——来处理压缩。它使用可配置的 JPEG 质量(0–100)来减小嵌入图像的大小,并可通过设置 removeStructureTree: true 来选择性地移除 PDF 的内部结构树,这对表格较多的文档特别有效。

PDF 中的 JPEG 压缩应使用什么质量级别?

IronPDF 支持 1% 到 100% 的 JPEG 压缩质量。推荐级别为90%及以上为高质量,80%-90%为中等质量,70%-80%为低质量。最佳设置取决于文件大小和视觉质量要求之间的平衡。

只用一行代码就能压缩 PDF 吗?

是的,IronPDF 支持通过单行代码实现 PDF 压缩:PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40); 该代码会加载 PDF 文件,以 40% 的质量压缩图片,并保存结果。

压缩是否适用于从 HTML 创建的 PDF?

是的,IronPDF 的压缩功能可与通过各种方法(包括 HTML 字符串到 PDF 的转换、URL 到 PDF 的转换、HTML 文件转换)创建的 PDF 以及现有 PDF 文件无缝兼容。

哪些类型的内容最受益于 PDF 压缩?

图像通常占 PDF 文件大小的绝大部分,因此图像较多的文档是压缩的理想对象。此外,具有复杂表格结构的 PDF 也能从 IronPDF 的结构树压缩功能中受益。

我可以在不将 PDF 保存到磁盘的情况下对其进行压缩吗?

是的,IronPDF 提供了 CompressPdfToBytesCompressPdfToStream 方法,它们分别将压缩后的 PDF 作为字节数组或流返回。这两个方法都接受一个可选的 CompressionMode 参数,支持 Automatic(自动)、FastMemory(快速内存)或 HighQuality(高质量)压缩选项。

PDF 压缩功能是否支持 C# 以外的其他语言?

是的,CompressPdfToBytesCompressPdfToStream 现已支持所有 IronPDF 平台,包括 Java、Node.js 和 Python。

Curtis Chau
技术作家

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

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

审核者
Jeff Fritz
Jeffrey T. Fritz
首席项目经理 - .NET 社区团队
Jeff 也是 .NET 和 Visual Studio 团队的首席项目经理。他是 .NET Conf 虚拟会议系列的执行制片人,并主持“Fritz and Friends”直播节目,每周两次与观众一起谈论技术并编写代码。Jeff 撰写研讨会、演示文稿并计划包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP 峰会在内的最大型微软开发者活动的内容。
准备开始了吗?
Nuget 下载 18,560,885 | 版本: 2026.4 刚刚发布
Still Scrolling Icon

还在滚动吗?

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