JavaScript中的PDF生成:pdf-lib库

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

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

开始课程

什么是 pdf-lib,为什么需要它?

pdf-lib 是一个功能强大且轻量级的库,用于在 JavaScript(Node.js 和浏览器)中创建和编辑 PDF 文档。与 Puppeteer 或 jsPDF 等重量级解决方案不同,pdf-lib 无需安装浏览器环境(Chromium),仅基于 PDF 原生结构工作。它非常适合服务器端生成报告、发票、证书以及任何需要对内容(文本、字体(包括嵌入)、图像、表单、注释和页面)进行完全控制的文档。

安装

通过 npm 安装非常简单:

npm install pdf-lib

然后将其导入到项目中:

const { PDFDocument, rgb, StandardFonts } = require('pdf-lib');

主要功能

  • 从零创建 PDF — 添加页面、文本、图像。
  • 编辑现有 PDF — 复制页面、在表面插入文本、合并文档。
  • 字体处理 — 支持标准字体(Helvetica、TimesRoman)以及嵌入自定义 TTF 字体。
  • 绘制形状 — 线条、矩形、椭圆,可设置颜色和透明度。
  • 表单和注释 — 创建文本字段、按钮、链接。
  • 导出为 Uint8Array — 结果可以保存为文件或发送给客户端。

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), }); // 矩形 page.drawRectangle({ x: 50, y: 200, width: 200, height: 100, color: rgb(0.9, 0.1, 0.1), borderColor: rgb(0, 0, 0), borderWidth: 2, }); // 嵌入图像 (PNG) const imageBytes = fs.readFileSync('logo.png'); const image = await doc.embedPng(imageBytes); page.drawImage(image, { x: 300, y: 250, width: 100, height: 100, }); const pdfBytes = await doc.save(); fs.writeFileSync('output.pdf', pdfBytes);}

createPDF().catch(console.error);

何时使用 pdf-lib?

pdf-lib 是最佳选择,如果你在 Node.js(或浏览器)环境中工作,并且需要:
- 无需启动浏览器即可快速生成 PDF(节省内存和时间)。
- 嵌入自定义字体(例如,用于西里尔字母)。
- 编辑现有 PDF(添加水印、合并文档)。
- 创建交互式表单。

如果需要将复杂的 HTML/CSS 渲染为 PDF(这种情况下 Puppeteer 更合适)或处理大量数据(重 PDF 可能会降低性能),则应避免使用 pdf-lib。

推荐