如何使用Node.js壓縮PDF文件

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

大型PDF文件會降低文件傳輸速度、增加儲存成本,並降低依賴文件的應用程式的效能。 IronPDF for Node.js提供compressSize 方法,這個方法能降低嵌入圖像的品質,並可選擇性地將圖像縮放至文件中的可見尺寸,通常在不改變文件結構的情況下,將文件大小減少50%或更多。

快速開始:在Node.js中壓縮PDF

安裝套件、載入PDF,並使用1到100之間的品質值調用compressSize

```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/quickstart.js import { PdfDocument } from "@ironsoftware/ironpdf";

// 載入現有的PDF const pdf = await PdfDocument.fromFile("report.pdf");

// 將嵌入圖像壓縮至60%的JPEG品質 await pdf.compressSize(60);

// 保存結果 await pdf.saveAs("report-compressed.pdf");


<div class="hsg-featured-snippet">
<h3>最小化工作流程(5步)</h3>

1. 安裝IronPDF:`npm install @ironsoftware/ironpdf`
2. 從`PdfDocument`
3. 使用`PdfDocument.fromFile(path)`載入原始文件
4. 調用`await pdf.compressSize(quality)` -- 品質範圍1-100
5. 使用`await pdf.saveAs(outputPath)`保存結果
</div>

## 為什麼PDF文件大小對Node.js應用程式很重要?

PDF大小直接影響兩個操作問題:傳輸速度和儲存成本。通過一個API端點發送的20 MB報告PDF會在移動連接上增加可測量的延遲。 在每天處理上千份文件的批量處理管道中,即使是30%的大小減少,也會積累成顯著的儲存節省。

IronPDF的`compressSize` 方法針對大型PDF文件的主要因素:嵌入圖像。 在渲染時,文字和向量圖形在PDF物件級壓縮效果良好,但以原始解析度嵌入的光柵圖像在典型的商業文件中占據了大多數的額外重量。 將JPEG質量從預設的(通常是95-100%)降低到60-85%可以在幾乎沒有明顯質量損失的情況下獲得最大的尺寸減少。

提示在正常螢幕解析度下,品質值在80以上通常與來源不可區分。 在文件大小是主要限制的歸檔或預覽用途中,保留低於60的值。
## `compressSize` 方法是如何工作的? `compressSize` 方法接受兩個參數:`scaleImages`(可選,布林值)。 當`scaleImages` 為`false`(預設值)時,該方法將每個嵌入的JPEG以目標品質重新編碼。 當`scaleImages` 為`true`時,還會將圖像下採樣,以符合其在PDF佈局中的可見大小,降低在頁面上小比例渲染的圖像解析度。 ```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/compress-with-scaling.js import { PdfDocument } from "@ironsoftware/ironpdf"; // 載入原始文件 const pdf = await PdfDocument.fromFile("product-catalog.pdf"); // 將圖像壓縮至90%品質並縮小至可見大小 await pdf.compressSize(90, true); // 保存優化後的文件 await pdf.saveAs("product-catalog-optimized.pdf");

scaleImages 參數對於由高DPI掃描生成的PDF或從嵌入圖像的HTML模板生成的PDF特別有效。啟用它可以比單獨調整品質更能減小文件大小,而在典型列印或螢幕解析度下不會有任何可見的劣化。

該方法就地修改PdfDocument 物件。 如果您需要保留原件,請在調用compressSize前克隆文件,或使用不同的保存路徑。

我應該使用什麼品質設定?

正確的品質值取決於PDF壓縮後如何使用:

  • 90-100:接近無損。 文件將被列印或以全縮放視圖時使用。
  • 80-89:高品質,可明顯減少文件大小。大多數商業文件的預設起始點。
  • 60-79:中等品質。 可接受於螢幕顯示、網頁傳輸和電子郵件附件。
  • 低於60:低品質。 適於預覽縮圖、歸檔副本或文件大小至關重要的情況。

請注意品質刻度專門針對JPEG圖像的重新編碼。 PDF中的文字、向量圖形和非JPEG圖像不受品質設定影響。

如何在Node.js中測量壓縮結果?

檢驗壓縮是否達到預期的減量是使用Node.js fs 模塊的一個簡單過程。 在調用compressSize之前和之後讀取文件大小,然後計算比率以確認結果符合您應用程式的要求。

```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/measure-compression.js import { PdfDocument } from "@ironsoftware/ironpdf"; import { statSync } from "fs";

const inputPath = "annual-report.pdf"; const outputPath = "annual-report-compressed.pdf";

const beforeBytes = statSync(inputPath).size;

const pdf = await PdfDocument.fromFile(inputPath); await pdf.compressSize(75); await pdf.saveAs(outputPath);

const afterBytes = statSync(outputPath).size; const reduction = (((beforeBytes - afterBytes) / beforeBytes) * 100).toFixed(1);

console.log(Before: ${(beforeBytes / 1024).toFixed(1)} KB); console.log(After: ${(afterBytes / 1024).toFixed(1)} KB); console.log(Reduced by ${reduction}%);


[Node.js `fs.statSync` API](https://nodejs.org/api/fs.html#fsstatsynspath-options) 返回一個包含`size` 屬性的`Stats` 物件(以位元為單位)。 對於生產管道,為每個文件記錄該比率,以便識別壓縮未如預期減小大小的異常情況--通常是已經在源頭進行壓縮的掃描文件。

重要在伺服器環境中處理文件前,設置`IRONPDF_ENGINE_PATH` 環境變數或配置`IronPdfGlobalConfig`。 詳情請參閱 [IronPDF Node.js文件](https://ironpdf.com/nodejs/docs/)的引擎設置詳情。
## 如何批量壓縮多個PDF? 生產應用程式不太可能單獨壓縮一個文件。 以下範例使用`Promise.all` 同時處理一個文件路徑陣列,這樣Node.js事件迴圈可以處理多個`compressSize` 操作而不阻塞: ```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/batch-compress.js import { PdfDocument } from "@ironsoftware/ironpdf"; import path from "path"; async function compressPdfFiles(inputPaths, quality = 80) { const results = await Promise.all( inputPaths.map(async (inputPath) => { const pdf = await PdfDocument.fromFile(inputPath); await pdf.compressSize(quality); const outputPath = inputPath.replace(".pdf", "-compressed.pdf"); await pdf.saveAs(outputPath); return { input: inputPath, output: outputPath }; }) ); return results; } // 使用範例 const files = ["report-q1.pdf", "report-q2.pdf", "report-q3.pdf"]; const compressed = await compressPdfFiles(files, 75); compressed.forEach(r => console.log(`Saved: ${r.output}`));

每次調用PdfDocument.fromFilecompressSize都是獨立的,使它們能安全地進行並行化。對於非常大的批次(數百個文件),考慮將陣列分塊以避免超過Node.js記憶體限制。 Node.js文件中關於事件迴圈 的說明解釋了Promise.all如何計劃並行I/O,而不阻塞主執行緒。

如何將壓縮與其他PDF操作結合使用?

壓縮自然適合整個文件處理鏈。 一個常見模式是從HTML生成PDF,新增水印或簽名,然後壓縮再傳送:

```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/compress-after-render.js import { PdfDocument, ChromePdfRenderer } from "@ironsoftware/ironpdf";

// 將HTML渲染成PDF const renderer = new ChromePdfRenderer(); const pdf = await renderer.renderHtmlAsPdf("

Amount due: $540.00

");

// 保存前先壓縮 -- 減少從Chrome渲染內容中的圖像重量 await pdf.compressSize(85);

// 保存最終文件 await pdf.saveAs("invoice-1042.pdf");



`ChromePdfRenderer`通常將背景圖像和CSS引用的資產以完整解析度嵌入。 在渲染之後調用`compressSize`可以不變地減小HTML來源的PDF文件大小。 IronPDF [HTML到PDF的教程](https://ironpdf.com/nodejs/tutorials/html-to-pdf/)詳細介紹了渲染器配置。

對於也需要[數位簽名](https://ironpdf.com/nodejs/examples/digitally-sign-a-pdf/)的文件,請在壓縮後應用簽名。 簽名會鎖定文件的位元流,進一步的修改會使簽名失效。

在處理多頁文件時,[使用`PdfDocument.merge()`合併它們](https://ironpdf.com/nodejs/examples/merge-pdfs/)再進行壓縮。 壓縮合併後的結果比壓縮單個文件並重新合併更為高效。

提示合併多頁文件後再壓縮。 壓縮合併後的結果比壓縮單個文件並重新合併更為高效。
## Node.js中PDF壓縮的下一步是什麼? `compressSize` 方法涵蓋了最常見的壓縮用例:減少嵌入圖像重量。 對於專業場景,IronPDF [PDF壓縮範例](https://ironpdf.com/nodejs/examples/pdf-compression/)提供了額外的工作程式碼範例,以及[API參考](https://ironpdf.com/nodejs/object-reference/api/)記錄了所有可用的方法簽名。 IronPDF還支持將[圖像轉換為PDF](https://ironpdf.com/nodejs/examples/image-to-pdf/)、[讀取PDF文字](https://ironpdf.com/nodejs/examples/reading-pdf-text/),以及[從PDF中刪除頁面](https://ironpdf.com/nodejs/examples/remove-page-from-pdf/)-- 這些操作均整合於相同的`PdfDocument` API中。 欲全面了解Node.js PDF功能,請參閱[IronPDF Node.js 文件](https://ironpdf.com/nodejs/docs/)。 準備好在您的專案中測試壓縮了嗎? [開始您的免費試用](#trial-license)以運行上述範例而無水印,或[查看生產部署的授權選項](#licensing)。 `PdfDocument`

常見問題

如何使用IronPDF在Node.js中壓縮PDF?

使用PdfDocument.fromFile(path)載入PDF,呼叫await pdf.compressSize(quality)設置介於1到100之間的品質值,然後使用await pdf.saveAs(outputPath)儲存結果。首先使用npm install @ironsoftware/ironpdf安裝套件。

compressSize中的quality參數控制什麼?

品質參數(整數1-100)控制嵌入光柵圖片的JPEG重新編碼級別。80-89的值產生高品質輸出並具有明顯的大小減少,建議作為大多數商業文件的起始點。60以下的值適用於文件大小為主要限制的歸檔或預覽用途。

compressSize中的scaleImages參數是什麼?

可選的第二參數scaleImages(布林值,預設為false)將嵌入的圖片縮小以匹配其在PDF佈局中的可見尺寸。將其設置為true對於從高DPI掃描或HTML模板生成的PDF非常有效,這些模板無論其顯示大小如何都以完整解析度嵌入圖片。

使用compressSize可以將PDF文件大小減少多少?

減少取決於源PDF的內容。包含許多高解析度光柵圖片的文件可以減少50%或更多。主要包含文字和向量圖形的PDF會看到的減少很小,因為compressSize專門針對JPEG圖片重新編碼。

如何在Node.js中測量壓縮結果?

使用fs.statSync(path).size讀取壓縮前後的文件大小(位元組)。計算比率為((before - after) / before) * 100以獲得百分比減少。

Darrius Serrant
全端軟體工程師(WebOps)

Darrius Serrant擁有邁阿密大學的電腦科學學士學位,並在Iron Software擔任全端WebOps行銷工程師。從小就對程式設計有興趣,他認為計算既神秘又易於理解,成為創意和問題解決的完美媒介。

在Iron Software,Darrius喜歡創造新事物並簡化複雜的概念,使其更易於理解。作為我們的常駐開發人員之一,他還志願教學,將他的專業知識傳授給下一代。

對Darrius來說,他的工作是有意義的,因為它有價值且對社會有真正的影響。

準備好開始了嗎?
版本: 2026.6 剛剛發布
Still Scrolling Icon

還在滾動嗎?

想要快速的證據嗎?
運行範例觀看您的HTML變為PDF。