如何在 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 檔案大小。 將您的 PDF 載入至 PdfDocument.FromFile,並呼叫 CompressAndSaveAs,即可一步完成壓縮並儲存最佳化的 PDF。此流程在維持品質的同時,能顯著節省檔案大小。

  1. using 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)與 nonCompress.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)與 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 (bool, 預設 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 選項可用?

不同的部署環境在磁碟存取與效能方面各有不同的限制。 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 中的 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、網址轉 PDF、HTML 檔案轉 PDF,以及現有的 PDF 檔案。

哪些類型的內容最能從 PDF 壓縮中受益?

圖片通常佔據 PDF 檔案的大部分空間,因此圖片密集的文件特別適合進行壓縮。此外,具有複雜表格結構的 PDF 檔案也能從 IronPDF 的結構樹壓縮功能中受益。

我可以不將 PDF 儲存至磁碟就進行壓縮嗎?

是的,IronPDF 提供 CompressPdfToBytes 以及 CompressPdfToStream 方法,分別可將壓縮後的 PDF 傳回為位元組陣列或 Stream。兩者皆接受一個可選的 CompressionMode 參數,可設定為 Automatic、FastMemory 或 HighQuality 壓縮模式。

PDF 壓縮功能是否支援 C# 以外的語言?

是的, CompressPdfToBytesCompressPdfToStream 現已於所有 IronPDF 平台(包括 Java、Node.js 及 Python)全面支援。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 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 Summit 等微軟最大規模的開發者活動規劃內容。
準備開始了嗎?
Nuget 下載 19,014,616 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronPdf
執行範例 觀看您的 HTML 轉為 PDF。