什么是 pdf-lib,为什么需要它?
pdf-lib 是一个功能强大且简洁的 JavaScript 库,用于在服务端(Node.js)和浏览器中创建和修改 PDF 文档。与 Puppeteer 等重量级解决方案不同,pdf-lib 无需安装浏览器或外部依赖。它直接操作 PDF 规范,使其成为生成简单到中等复杂度文档(如报告、发票、证书、问卷和合同)的理想选择。
安装
要在 Node.js 项目中安装,请执行以下命令:
npm install pdf-lib该库没有原生依赖,并且兼容 Node.js 10+。
主要功能
- 从零开始创建 PDF(空白页、文本、图像、嵌入字体)。
- 编辑现有 PDF(提取页面、插入、删除、旋转)。
- 处理表单(填写字段、创建复选框和单选按钮)。
- 支持 Unicode 和自定义字体(TTF、OTF)。
- 添加元数据(作者、标题、日期)。
- 导出为 ArrayBuffer、Uint8Array 或 Blob。
JavaScript 代码示例 (Node.js)
以下是一个创建包含文本和图像的 PDF 的简单示例:
const { PDFDocument, rgb } = require('pdf-lib');const fs = require('fs');
async function createPDF() { const doc = await PDFDocument.create(); const page = doc.addPage([600, 400]); // 添加文本 page.drawText('Привет, мир!', { x: 50, y: 350, size: 30, color: rgb(0, 0.53, 0.71), }); // 嵌入字体(可选) const fontBytes = fs.readFileSync('./fonts/roboto.ttf'); const font = await doc.embedFont(fontBytes); page.drawText('Кастомный шрифт', { x: 50, y: 300, size: 20, font: font, }); // 保存 const pdfBytes = await doc.save(); fs.writeFileSync('output.pdf', pdfBytes); console.log('PDF создан!');}
createPDF().catch(console.error);这段代码创建了一个包含两行文本的文档,其中一行使用了嵌入字体。要处理图像,请使用 doc.embedPng() 或 doc.embedJpg()。
何时使用 pdf-lib
- 您需要快速生成 PDF,而无需启动浏览器。
- 文档不包含复杂布局(如表格、多列)——此类需求更适合使用 Puppeteer 等模板引擎。
- 需要一个轻量级且体积较小(约 500 KB)的库。
- 您在处理表单或编辑现有 PDF。
总结
pdf-lib 是在不需要额外依赖的情况下,于 Node.js 中生成 PDF 的项目中的绝佳选择。它易于学习、文档完善,并支持所有基本操作。对于复杂布局,请考虑使用 Puppeteer 或 jsPDF,但对于 80% 的任务而言,pdf-lib 已经足够。