如何使用 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扫描生成的PDF,或由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 `fs.statSync` API](https://nodejs.org/api/fs.html#fsstatsynspath-options) 返回一个 `Stats` 对象,该对象包含以字节为单位的 `size` 属性。 对于生产管道,记录每个文档的此比率,以便您可以识别压缩未按预期减少大小的异常情况 - 通常是那些在源头已经压缩的扫描文档。
重要在服务器环境中处理文件前,请设置 `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.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/) 进行合并。 压缩合并后的结果比压缩各个文件再合并更有效率。
提示在压缩前合并多页文档。 压缩合并后的结果比压缩各个文件再合并更有效率。
## PDF压缩在Node.js中的下一步是什么?
`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)。
`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以获得百分比减少。





