如何使用 IronPDF 在 C# 中进行 PDF 压缩
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 文件。此过程可在保持文件质量的同时显著减小文件大小。
最小化工作流程(三步)
- 从 NuGet 下载用于 PDF 压缩的 C# 库。
- 导入现有PDF或渲染新的PDF
- 调用
CompressAndSaveAs(outputPath, quality, removeStructureTree)来压缩图像,可选择性地去除结构树,并一步保存。
CompressStructTree 和 Compress(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)
图像压缩会带来哪些结果?
减少了 39.24%!
质量参数如何工作?
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)
树形结构压缩可以减少多少文件大小?
减少了 67.90%! 此百分比在更大的表格PDF中增加。
如何同时应用两种压缩方法?
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)
CompressAndSaveAs接受哪些参数?
-
outputPath(字符串): 压缩 PDF 文件将保存的文件路径。 -
quality(int?, 0–100): 应用于每个嵌入图像的 JPEG 质量。 较低的值会产生更小的文件。 传递null可完全跳过图像压缩。 removeStructureTree(布尔值,默认值为false):当设置为true时,会移除 PDF 结构树以进一步减小文件大小。对于包含表格的 HTML 生成的 PDF 文件最为有效。
在申请压缩时,请考虑您的使用案例。 存档目的可能会优先考虑质量而不是文件大小。网络分发可能需要较小的文件。 根据您处理的是 PDF/A 兼容文档还是标准 PDF,对设置进行微调。
如何在不保存到磁盘的情况下压缩PDF文件?
在许多实际场景中,例如 API 响应、云函数或电子邮件附件,将压缩的 PDF 写入磁盘是不必要的或不切实际的。
CompressPdfToBytes 将压缩后的 PDF 作为字节数组返回,让您可以完全控制输出的存储或传输方式。 CompressPdfToBytes 和 CompressPdfToStream 都接受一个可选的 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)
有哪些压缩模式选项?
不同的部署环境对磁盘访问和性能有不同的限制。 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
CompressPdfToBytes 和 CompressPdfToStream 现已在所有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 提供了 CompressPdfToBytes 和 CompressPdfToStream 方法,它们分别将压缩后的 PDF 作为字节数组或流返回。这两个方法都接受一个可选的 CompressionMode 参数,支持 Automatic(自动)、FastMemory(快速内存)或 HighQuality(高质量)压缩选项。
PDF 压缩功能是否支持 C# 以外的其他语言?
是的,CompressPdfToBytes 和 CompressPdfToStream 现已支持所有 IronPDF 平台,包括 Java、Node.js 和 Python。

