JavaScript 中的 PDF 生成:pdf-lib 库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 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 已经足够。

推荐