如何在 C# 中壓縮 PDF

如何在 C# 中進行 PDF壓縮:使用 IronPDF 縮小檔案大小

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%

檔案比較顯示 compressed.pdf (449 KB) vs nonCompress.pdf (739 KB) 展示影像壓縮結果

品質參數如何運作?

CompressAndSaveAs 中的 quality 參數控制應用於每個嵌入影像的 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 支援 JPEG 壓縮品質從 1% 到 100% 不等。建議水平為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 返回為位元組陣列或 Stream。這兩者皆接受可選的 CompressionMode 參數,提供 Automatic、FastMemory 或 HighQuality 壓縮選項。

除了 C# 之外,其他語言是否也支援 PDF 壓縮功能?

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

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

審核人
Jeff Fritz
Jeffrey T. Fritz
首席程序经理 - .NET 社群团队
Jeff 也是 .NET 和 Visual Studio 团队的首席程序经理。他是 .NET Conf 虚拟会议系列的执行制作人,并主持“Fritz 和朋友”这一每周两次的開發者的直播节目,在节目上讨论技術并与观众一起编写代碼。Jeff 撰写研讨会、主持演讲,并计划大型 Microsoft 開發者活動(包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit)的內容。
準備好開始了嗎?
Nuget 下載 18,560,885 | 版本: 2026.4 剛剛發布
Still Scrolling Icon

還在捲動嗎?

想要快速證明? PM > Install-Package IronPdf
執行範例 觀看您的 HTML 變成 PDF。