IRONSOFTWAREHOME

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

Curtis Chau
Curtis Chau
Updated: 2026年6月29日

IronPDF通过CompressAndSaveAs方法在C#中压缩PDF,该方法将嵌入的图像重新编码为JPEG并可选地删除PDF结构树,以便在单次调用中减少文件大小。 伴侣CompressPdfToStream方法在内存中完成相同工作,当您不想触碰磁盘时使用。

图像通常占PDF大小的大部分,而以表格为主的文档则携带一个增加额外重量的结构树。 IronPDF同时针对这两者,因此相同的调用适用于从磁盘加载或在内存流中保存的PDF。

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

使用CompressAndSaveAs重新编码其图像,并在一个步骤中写入精简副本。第二个参数是JPEG质量。

  1. 1Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. 2复制并运行这段代码。

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

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

Compress(CompressionOptions)已弃用。

如何压缩 PDF 中的图像?

将JPEG CompressAndSaveAs,IronPDF即以该质量重新编码每个嵌入的图像。 值从0(最大压缩)到100(最小损失),底层引擎决定每个值如何映射到输出。 这是一种在文档携带嵌入图像时采用的方法。

大致指导:

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

较低的数字压缩更紧,但可能引入可见伪影,并且清晰度下降的程度取决于源图像,因此针对您自己的内容测试几个设置以找到所需的平衡。

输入

using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

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

// Quality 40 re-encodes every embedded image as a low-quality JPEG, which is
// where most of the file-size saving comes from in image-heavy PDFs
pdf.CompressAndSaveAs("compressed.pdf", 40);
C#

输出

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

在维基百科渲染中减少了39.24%

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

如何压缩 PDF 树结构?

CompressAndSaveAs以剥离Chrome Engine写入PDF中的树结构。 在持有大量表格数据的Chrome Engine PDFs上节省最多。 某些渲染引擎不发出这样的结构,这意味着该功能没有东西可移除。

剥离树状结构可能会削弱文本突出和选择功能,因此请将其与大小增益权衡,如果读者以后需要从结果中提取文本和图像

使用此表格数据的PDF测试CompressAndSaveAs和树结构移除。

using IronPdf;

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

// Pass null quality to skip image compression and true to drop the structure
// tree, which is the bulk of the size in table-heavy Chrome-rendered PDFs
pdf.CompressAndSaveAs("compressedTable.pdf", null, true);
C#

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

减少了67.90%。 该数字随着表格PDF的增长而上升。

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

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

Milan Jovanovic

微软MVP

查看案例研究

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

Brent Matzelle

首席技术官,OPYN

查看案例研究

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

David Jones

首席软件工程师,Agorus Build

查看案例研究

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

提供CompressAndSaveAs调用中同时缩小膨胀的来源。 此配对适用于混合图像和结构化数据的文件,例如带有图表的报告或嵌入表的发票。

using IronPdf;

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

// Shrink both sources of bloat in one pass: re-encode images at quality 80
// and strip the structure tree (true) for the largest size reduction
pdf.CompressAndSaveAs("compressed.pdf", 80, true);
C#

CompressAndSaveAs接受哪些参数?

  • outputPath(字符串):写入压缩PDF的文件路径。

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

  • true时,剥离PDF结构树以进一步减少文件大小。 对于 HTML 生成的带表格的 PDF 文件最为有效。

让用例来设置拨号。 归档副本通常偏爱质量而不是大小,而网络分发则奖励较小的文件。当您压缩PDF/A兼容文件时,同样适用此权衡,图像保真可能是优先事项。

如何获得对压缩的细粒度控制?

对于大多数文档来说,两参数调用已经足够,但图像繁重的档案和严格的大小预算有时需要更多控制。 将CompressAndSaveAs以调整压缩管道,包括图像DPI降采样、JPEG重编码质量和zlib压缩级别。 更简单的CompressAndSaveAs(outputPath, quality, removeStructureTree)重载仍然未变,并生成与以前相同的输出。

using IronPdf;

var pdf = PdfDocument.FromFile("input.pdf");

// Web or email: strong size reduction
pdf.CompressAndSaveAs("compressed.pdf", new AdvancedCompressionOptions
{
    JpegQuality = 70,
    TargetImageDpi = 150,
    RemoveStructureTree = true
});

// Print quality: minimal quality loss
pdf.CompressAndSaveAs("print.pdf", new AdvancedCompressionOptions
{
    JpegQuality = 90,
    TargetImageDpi = 300
});
C#

最显著的两个属性是TargetImageDpi

  • JpegQuality(int?, 1至100,默认null):按照此JPEG质量重新编码图像。 保持null以完全跳过图像重编码。
  • TargetImageDpi(int?, 默认150):在重新编码之前降低DPI超过此值的图像。 将其设置为0以禁用降采样并保持原始分辨率。

推荐的JpegQuality值(仅在设置时适用):

价值用例
null(默认)不进行图像重编码
95档案,最低伪影
85高质量
70平衡,适合一般用途
50Web或电子邮件,较小的文件但带有可见伪影

推荐的TargetImageDpi值(有损):

价值用例
300打印质量,从正常观看距离无损失
200在高DPI和视网膜屏幕上清晰
150(默认)屏幕和电子邮件的最佳大小和质量平衡
96激进,软文本但仍可读
0禁用,保持原始分辨率
请注意: TargetImageDpi 降采样是有损的:一旦图像被降采样,其原始分辨率无法恢复。 预先决定是否要分辨率减少或仅质量重编码,并相应地设置TargetImageDpi

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

API响应、云功能和电子邮件附件很少需要磁盘上的压缩PDF。 CompressPdfToBytes 将结果返回为字节数组,因此您可以决定下一步将字节放置在哪里。

using IronPdf;

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

// Return the compressed PDF as bytes so it can go straight into an HTTP
// response, a database varbinary column, or a queue message with no temp file
byte[] compressedBytes = pdf.CompressPdfToBytes();

File.WriteAllBytes("compressed.pdf", compressedBytes);
C#

如果您需要CompressPdfToStream并复制到您的目标。 这适合将输出传输到HTTP响应主体、云存储上传或任何基于流的工作流。

using IronPdf;
using System.IO;

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

// Stream output so the compressed bytes can be piped straight to an HTTP
// response or cloud upload without first buffering the whole file as byte[]
using Stream compressedStream = pdf.CompressPdfToStream();

// CompressPdfToStream returns a read-only Stream, so copy it to the destination
using FileStream fileStream = File.Create("compressed.pdf");
compressedStream.CopyTo(fileStream);
C#

有哪些Compression模式选项?

Compression模式参数来决定如何完成工作。 目标的部署在是否允许磁盘访问上有所不同,模式让您选择正确的权衡:

模式磁盘访问图像重采样输出大小
Automatic(默认)尝试磁盘,回落到内存当磁盘可用时在允许的地方最小
FastMemory无ne更大
HighQuality需要临时目录最小

FastMemory。 下面的示例强制HighQuality以获得最小的输出,需要在运行时写访问系统临时目录。

using IronPdf;

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

// HighQuality resamples images using the system temp directory, so it produces
// the smallest output but needs write access to that directory at runtime
byte[] compressedBytes = pdf.CompressPdfToBytes(50, false, CompressionMode.HighQuality);

File.WriteAllBytes("compressed.pdf", compressedBytes);
C#

输出

CompressPdfToStream现适用于所有IronPDF平台,包括Java、无de.js和Python。

结论

您现在有一个方法,即Compression模式下的内存中完成相同任务。 接下来的自然步骤是用PDF光栅化将这些瘦身页面转换为缩略图。

常见问题解答

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

结果因内容而异。在显示的示例中,图像压缩将文件减少了39.24%,而结构树移除将一个表格密集的PDF减少了67.90%。图像密集和表格密集的文档节省最大。

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的压缩适用于通过各种方法创建的PDF,包括HTML字符串到PDF转换、URL到PDF转换和HTML文件转换,以及现有的PDF文件。

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

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

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

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

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

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

如何在C#中细粒度控制PDF压缩?

传递一个AdvancedCompressionOptions对象给CompressAndSaveAs以调整管道,包括通过TargetImageDpi进行图像DPI降采样,通过JpegQuality进行JPEG重新编码质量调整,以及zlib的CompressionLevel。原来的CompressAndSaveAs(outputPath, quality, removeStructureTree)重载仍然有效,并且产生的输出与以前相同。

How can I achieve fine-grained control over PDF compression in IronPDF?

For fine-grained control, IronPDF allows you to pass an `AdvancedCompressionOptions` object to the `CompressAndSaveAs` method, letting you adjust JPEG quality, image DPI downsampling, and zlib compression levels.

Curtis Chau
技术作家

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

...
阅读更多

准备开始了吗?

Nuget Downloads 21,039,986版本:2026.9刚刚发布

免费获取

30天试用密钥 即刻获取。

bullet_checked无需信用卡或创建账户
bullet_test在生产环境中测试
且无水印
bullet_calendar30天完全
功能性产品
bullet_support试用期间提供
24/5技术支持
立即获取您的免费30 天试用密钥
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索 “IronPDF”
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在此处下载 Windows 安装程序。

  1. 下载并解压 IronPDF 到您的解决方案目录中的 ~/Libs 之类的位置
  2. 在 Visual Studio 解决方案资源管理器中,右键点击引用。选择浏览,“IronPDF.dll”

$999

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索 “IronPDF”
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在此处下载 Windows 安装程序。

  1. 下载并解压 IronPDF 到您的解决方案目录中的 ~/Libs 之类的位置
  2. 在 Visual Studio 解决方案资源管理器中,右键点击引用。选择浏览,“IronPDF.dll”

$999