IRONSOFTWAREHOME

如何使用 Node.js 压缩 PDF 文件

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

大型PDF文件减慢文件传输、增加存储成本,并降低文档密集型应用程序的性能。 IronPDF for Node.js提供compressSize方法,它降低嵌入式图像质量,并可选择将图像重缩放到文档中可见的尺寸,通常无需更改文档结构即可减少50%或更多的文件大小。

快速入门:在Node.js中压缩PDF

安装该包、加载PDF,并调用compressSize,设置一个品质值,介于1到100之间:

//: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方法如何工作?

scaleImages(可选,布尔值)。 当false(默认值)时,该方法以目标质量重新编码每个嵌入式JPEG。 当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返回一个包含以字节为单位的Stats对象。 对于生产管道,记录每个文档的此比率,以便您可以识别压缩未按预期减少大小的异常情况 - 通常是那些在源头已经压缩的扫描文档。

重要: 在服务器环境下处理文件之前,设置IronPdfGlobalConfig。 查看IronPDF Node.js文档以获取引擎设置详细信息。)]}

如何批量压缩多个PDF?

生产应用程序很少单独压缩一个文档。 下面的示例使用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

每次调用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>应付款金额:$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()合并它们。 压缩合并后的结果比压缩各个文件再合并更有效率。

提示: 在压缩前合并多页文档。 压缩合并后的结果比压缩各个文件再合并更有效率。

PDF压缩在Node.js中的下一步是什么?

compressSize方法涵盖最常见的压缩用例:减少嵌入式图像权重。 对于特殊场景,IronPDF PDF压缩示例提供了额外的工作代码示例,并且API参考记录了所有可用的方法签名。

IronPDF还支持转换图像到PDF,读取PDF文本和从PDF中删除页面——所有操作都与同一PdfDocument API集成。 要全面了解Node.js PDF功能,请参阅IronPDF Node.js文档。

准备好测试项目中的压缩了吗? 开始您的免费试用以在没有水印的情况下运行上述示例,或查看生产部署的许可选项。

PdfDocument

常见问题解答

如何在Node.js中使用IronPDF压缩PDF?

使用PdfDocument.fromFile(path)加载PDF,调用await pdf.compressSize(quality),质量值在1到100之间,然后使用await pdf.saveAs(outputPath)保存结果。首先使用npm install @ironsoftware/ironpdf安装包。

compressSize中的质量参数控制什么?

质量参数(整数1-100)控制嵌入光栅图像的JPEG重新编码级别。80-89的值产生高质量输出并显著减少大小,是大多数业务文档的推荐起始点。低于60的值适合文件大小为主要限制的档案或预览使用场景。

compressSize中的scaleImages参数是什么?

可选的第二个参数scaleImages(布尔值,默认false)将嵌入图像降采样到其在PDF布局中的可见尺寸。对于从高DPI扫描或嵌入全分辨率图像的HTML模板生成的PDF,将其设置为true是有效的。

使用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 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

准备开始了吗?

版本:2026.10刚刚发布

立即获取您的免费30 天试用密钥。
无需信用卡或创建账户
Node.js 模块下载用于 PDF
using 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
using npm 安装

版本: 2026.10

  1. 下载并安装 Node.js 12+。
  2. 在终端中执行上述命令。

$999 起