IRONSOFTWAREHOME

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

Curtis Chau
Curtis Chau
Updated: 2026年5月9日

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

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

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

//: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");
Text

為什麼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佈局中的可見大小,降低在頁面上小比例渲染的圖像解析度。

//: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");
Text

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

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

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

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

  • 90-100:接近無損。 文件將被列印或以全縮放視圖時使用。
  • 80-89:高品質,可明顯減少文件大小。大多數商業文件的預設起始點。
  • 60-79:中等品質。 可接受於螢幕顯示、網頁傳輸和電子郵件附件。
  • 低於60:低品質。 適於預覽縮圖、歸檔副本或文件大小至關重要的情況。
請注意: 品質刻度專門針對JPEG圖像的重新編碼。 PDF中的文字、向量圖形和非JPEG圖像不受品質設定影響。

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

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

//: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}%`);
Text

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

重要: 在伺服器環境中處理文件前,設置IRONPDF_ENGINE_PATH 環境變數或配置IronPdfGlobalConfig。 詳情請參閱 IronPDF Node.js文件的引擎設置詳情。

如何批量壓縮多個PDF?

生產應用程式不太可能單獨壓縮一個文件。 以下範例使用Promise.all 同時處理一個文件路徑陣列,這樣Node.js事件迴圈可以處理多個compressSize 操作而不阻塞:

//: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}`));
Text

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

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

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

//: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("<h1>Invoice #1042</h1><p>Amount due: $540.00</p>");

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

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

ChromePdfRenderer通常將背景圖像和CSS引用的資產以完整解析度嵌入。 在渲染之後調用compressSize可以不變地減小HTML來源的PDF文件大小。 IronPDF HTML到PDF的教程詳細介紹了渲染器配置。

對於也需要數位簽名的文件,請在壓縮後應用簽名。 簽名會鎖定文件的位元流,進一步的修改會使簽名失效。

在處理多頁文件時,使用PdfDocument.merge()合併它們再進行壓縮。 壓縮合併後的結果比壓縮單個文件並重新合併更為高效。

提示: 合併多頁文件後再壓縮。 壓縮合併後的結果比壓縮單個文件並重新合併更為高效。

Node.js中PDF壓縮的下一步是什麼?

compressSize 方法涵蓋了最常見的壓縮用例:減少嵌入圖像重量。 對於專業場景,IronPDF PDF壓縮範例提供了額外的工作程式碼範例,以及API參考記錄了所有可用的方法簽名。

IronPDF還支持將圖像轉換為PDF、讀取PDF文字,以及從PDF中刪除頁面-- 這些操作均整合於相同的PdfDocument API中。 欲全面了解Node.js PDF功能,請參閱IronPDF Node.js 文件。

準備好在您的專案中測試壓縮了嗎? 開始您的免費試用以運行上述範例而無水印,或查看生產部署的授權選項。

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以獲得百分比減少。

What are some use cases for the `scaleImages` parameter?

The `scaleImages` parameter is useful for PDFs created from high-DPI scans or HTML content, as it downscales images to their visible size, further reducing file size without compromising quality.

How is PDF compression measured in IronPDF?

PDF compression can be measured using the Node.js `fs` module to compare file sizes before and after calling `compressSize`, calculating the percentage reduction.

How does IronPDF handle PDF files generated from HTML?

IronPDF can compress images embedded in PDFs generated from HTML using the `ChromePdfRenderer`, reducing file size by optimizing embedded images.

When should you apply digital signatures in relation to compression?

Digital signatures should be applied after compressing a PDF, as any modifications following signing would invalidate the signature.

What resources are available for learning more about PDF compression in IronPDF?

IronPDF offers a detailed PDF compression example and an API reference documenting method signatures to help developers optimize PDF files effectively.

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

準備好開始了嗎?

版本:2026.10剛剛發布

立即獲取您的免費30天試用金鑰。
無需信用卡或帳戶建立
Node.js模組下載PDF
使用npm安裝

版本: 2026.10

  1. 下載並安裝Node.js 12+。
  2. 在終端機中執行上述命令。

授權從$999起

Key in blue circle

立即免費取得 30 天試用金鑰。

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF for Node.js
預訂您的免費線上演示
Booking Badge

獲得來自全球數百萬工程師的信賴

Iron Software的客戶徽標
獲取您的無義務諮詢
您的資料將始終保密。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
獲得來自全球數百萬工程師的信賴
立即獲取您的30天試用金鑰。
無需信用卡或帳戶建立
Node.js模組下載PDF
使用npm安裝

版本: 2026.10

  1. 下載並安裝Node.js 12+。
  2. 在終端機中執行上述命令。

授權從$999起