LibPDF.js:用于解析与签名的 TypeScript PDF 库

LibPDF.js:完整的 TypeScript PDF 解决方案

如果你曾经需要在 JavaScript 环境中读取、编辑或生成 PDF,可能已经在一堆库中兜兜转转:

  • PDF.js 出色的渲染功能,但仅限浏览器。
  • pdf‑lib 拥有流畅的 API,但在处理真实世界 PDF 的细节时会遇到障碍。
  • pdfkit 可以生成 PDF,却无法读取。

引入 LibPDF.js——一款完全用 TypeScript 编写、可在浏览器和服务器上使用的现代 PDF 引擎。由开源 DocuSign 替代方案 Documenso 设计,它填补了前述库的空缺:可打开网络上遇到的任何 PDF,提供简洁的 API,并支持你在生产环境所需的完整 PDF 功能集。

LibPDF.js 能做什么?

功能 可用性 备注
解析任意 PDF ✔️ 宽容解析,支持文件损坏、回退恢复及完整坐标数据
创建 PDF ✔️ 从零生成或修改现有文件
加密 ✔️ RC4、AES‑128、AES‑256(R2‑R6)
数字签名 ✔️ PAdES B‑B、B‑T、B‑LT、B‑LTA;支持 Google Cloud KMS 集成
表单填充 ✔️ 文本、复选框、单选按钮、下拉框、签名
表单扁平化 ✔️ 将字段烘焙到页面内容中
合并与拆分 ✔️ 合并或提取页面
附件 ✔️ 嵌入与提取文件
文本提取 ✔️ 带坐标信息
字体嵌入 ✔️ TTF/OpenType 及子集化
图像 ✔️ JPEG、PNG(alpha)、JBIG2 与 JPEG2000 直通
增量保存 ✔️ 追加更改;保持现有签名

为何重要 – 结合宽容解析、简洁 API 与完整功能集,让你能够构建企业级电子签名或文档生成工作流,而无需重新发明轮子。

安装与快速上手

# npm
npm install @libpdf/core

# bun
bun add @libpdf/core
import { PDF } from "@libpdf/core";

// 从缓冲区加载 PDF
const pdf = await PDF.load(fileBytes);

// 简单读取
const pages = pdf.getPages();
console.log(`Document has ${pages.length} pages.`);

// 创建全新 PDF
const newPdf = PDF.create();
const page = newPdf.addPage({ size: "letter" });
page.drawText("Hello, World!", { x: 50, y: 700, fontSize: 24 });

// 签名示例
import { P12Signer } from "@libpdf/core";
const signer = await P12Signer.create(certificateBytes, "certPassword");
const signed = await pdf.sign({ signer, reason: "I approve this doc" });

API 亮点

高级 API

  • PDF – 载入、合并、创建与写入文档。
  • PDFPage – 操作单页(绘制文本、图像、注释)。
  • PDFForm – 读取、填写或扁平化表单字段。

低级 API

  • PdfDictPdfArrayPdfStream – 如需直接操作原始 PDF 结构,可获得完整控制。

为什么选择 LibPDF.js 而非其他?

维度 LibPDF.js PDF.js pdf‑lib pdfkit
浏览器/Node 支持 ✔️ (Web Crypto + Node 20+) ✔️ (仅渲染器) ✔️ ✔️
宽容解析 ✔️
数字签名 ✔️ ✅ (基本)
表单支持 ✔️
增量保存 ✔️

若你需要一款在真实 PDF 上“开箱即用”,并且提供顺畅开发体验的库,LibPDF.js 就是最佳选择。

社区与贡献

该仓库在 GitHub 上活跃维护,已获得 717 颗星、19 次 Fork,且贡献者数量不断增长。文档位于 https://libpdf.dev,核心库已发布至 npm,包名为 @libpdf/core

  • 贡献指南 – 请查看仓库中的 CONTRIBUTING.md。欢迎提交 bug 修复、功能请求及文档改进。
  • 路线图 – 未来工作包括签名验证、TrueType 集合支持以及浏览器渲染功能。

实际使用场景

  1. 电子签名平台 – 快速添加 PAdES 支持与增量签名。
  2. 文档生成 – 从模板生成 PDF,填写表单,嵌入字体和图像。
  3. PDF 分析 – 提取带排版信息的文本,进行搜索或索引。
  4. 合规工作流 – 合并文件、加密、扁平化表单。

最后想法

LibPDF.js 为现代 JavaScript 开发者带来 PDF 操作的力量,同时以 TypeScript 为首的体验。无论你在构建法律科技栈、定制计费系统还是简单 PDF 查看器,它都能为你提供所需工具,而不必为其他库的痛点而烦恼。

今天就试试 – npm 安装包,运行快速上手示例,看看能有多快开启稳健的 PDF 处理。

原创文章: 查看原文

分享本文