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
PdfDict、PdfArray、PdfStream– 如需直接操作原始 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 集合支持以及浏览器渲染功能。
实际使用场景
- 电子签名平台 – 快速添加 PAdES 支持与增量签名。
- 文档生成 – 从模板生成 PDF,填写表单,嵌入字体和图像。
- PDF 分析 – 提取带排版信息的文本,进行搜索或索引。
- 合规工作流 – 合并文件、加密、扁平化表单。
最后想法
LibPDF.js 为现代 JavaScript 开发者带来 PDF 操作的力量,同时以 TypeScript 为首的体验。无论你在构建法律科技栈、定制计费系统还是简单 PDF 查看器,它都能为你提供所需工具,而不必为其他库的痛点而烦恼。
今天就试试 – npm 安装包,运行快速上手示例,看看能有多快开启稳健的 PDF 处理。
原创文章:
查看原文