如何使用 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. 从`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`方法如何工作?
`scaleImages`(可选,布尔值)。 当`false`(默认值)时,该方法以目标质量重新编码每个嵌入式JPEG。 当`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: 低质量。 适用于预览缩略图、归档副本或文件大小至关重要的情况。
如何在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`对象。 对于生产管道,记录每个文档的此比率,以便您可以识别压缩未按预期减少大小的异常情况 - 通常是那些在源头已经压缩的扫描文档。
重要在服务器环境下处理文件之前,设置`IronPdfGlobalConfig`。 查看[IronPDF Node.js文档](https://ironpdf.com/nodejs/docs/)以获取引擎设置详细信息。)]}
## 如何批量压缩多个PDF?
生产应用程序很少单独压缩一个文档。 下面的示例使用`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}`));每次调用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("
应付款金额:$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还支持转换[图像到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以获得百分比减少。





