如何使用 Node.js 壓縮 PDF 檔案
大型 PDF 檔案會拖慢檔案傳輸速度、增加儲存成本,並在以文件為主的應用程式中降低效能。 IronPDF for Node.js 提供 compressSize 方法,該方法可降低嵌入式圖片的畫質,並可選擇性地將圖片重新調整為文件中的可見尺寸,通常能在不改變文件結構的情況下,將檔案大小縮減 50% 或更多。
快速入門:在 Node.js 中壓縮 PDF 檔案
安裝套件、載入 PDF 檔案,並呼叫 compressSize,同時指定 1 到 100 之間的品質值:
```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. 從 `@ironsoftware/ironpdf` 匯入 `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` 方法接受兩個參數:`quality`(必填,整數 1-100)和 `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 掃描或 HTML 範本生成的 PDF 特別有效,這些範本會將圖片以全解析度嵌入,而不受顯示尺寸影響。啟用此參數可比單純調整品質更能有效縮小檔案大小,且在一般 PRINT 或螢幕解析度下不會造成任何可見的畫質劣化。
此方法會就地修改 PdfDocument 物件。 若需保留原始內容,請在呼叫 compressSize 之前複製文件,或使用不同的儲存路徑。
我應該使用哪種品質設定?
合適的品質設定取決於壓縮後的 PDF 將如何使用:
- 90-100:近乎無損。 適用於文件將被列印或以全螢幕檢視的情況。
- 80-89:高品質,檔案明顯較小。此為多數商務文件的預設起點。
- 60-79:中等品質。 適用於螢幕顯示、網頁發布及電子郵件附件。
- 低於 60:品質不佳。 適用於預覽縮圖、歸檔副本,或檔案大小至關重要的情況。
如何在 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](https://nodejs.org/api/fs.html#fsstatsynspath-options) 的 [`fs.statSync` API](https://nodejs.org/api/fs.html#fsstatsynspath-options) 會傳回一個 `Stats` 物件,其中包含以位元組為單位的 `size` 屬性。 針對生產管線,請針對每份文件記錄此壓縮率,以便識別壓縮效果未如預期縮減檔案大小的異常值——通常是源頭已壓縮的掃描文件。
重要事項在伺服器環境中處理檔案前,請設定 `IRONPDF_ENGINE_PATH` 環境變數或配置 `IronPdfGlobalConfig`。 (有關引擎設定的詳細資訊,請參閱 [IronPDF](https://ironpdf.com/nodejs/docs/) for [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.fromFile 和 compressSize 的呼叫皆為獨立操作,因此可安全地進行平行處理。若處理非常龐大的批次(數百個檔案),請考慮將陣列分塊處理,以避免超過 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 亦支援將[圖片](https://ironpdf.com/nodejs/examples/image-to-pdf/)轉換[為 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)生產環境部署的[授權選項](#licensing)。
`PdfDocument`常見問題
如何在 Node.js 中使用 IronPDF 壓縮 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,即可得出壓縮率(百分比)。





