TypeScript 中的 PDF 生成:开发者完整指南
创建 PDF 文档是现代 Web 开发中一项常见的需求。在 TypeScript 语言中,有多个强大的库允许您在客户端和服务器端(Node.js)生成 PDF。在本文中,我们将介绍三个主要工具:PDFKit、jsPDF 和 pdf-lib,并展示它们的使用实践示例。
为什么要在 TypeScript 中生成 PDF?
TypeScript 添加了静态类型检查,这在处理结构复杂的文档时尤其重要。使用 TypeScript 生成 PDF 可以:
- 避免在创建表格和样式时出现类型错误
- 简化大型项目的重构
- 将 PDF 生成与现有的 TypeScript 项目(React、Angular、Node.js)集成
PDF 生成库概述
1. PDFKit (Node.js)
PDFKit 是用于在服务器端创建 PDF 的最流行的库。它提供对 PDF 对象的底层访问,支持字体、图像、嵌入矢量图形以及西里尔字母(在连接相应字体后)。
import PDFDocument from 'pdfkit';import fs from 'fs';
const doc = new PDFDocument();doc.pipe(fs.createWriteStream('output.pdf'));
doc.fontSize(24).text('Привет, мир!', 100, 100);doc.fontSize(12).text('Это PDF, созданный с помощью PDFKit и TypeScript', 100, 150);doc.end();特点:
- 仅在 Node.js 中运行(不适用于浏览器)
- 需要手动配置西里尔字母字体
- 支持复杂的布局、表格和图形
2. jsPDF (浏览器和 Node.js)
jsPDF 是一个通用库,可在浏览器和服务器上运行。它更容易上手,但在复杂布局方面有限制。
import { jsPDF } from 'jspdf';
const doc = new jsPDF();doc.text('Генерация PDF на TypeScript', 10, 10);doc.save('document.pdf');特点:
- 用于基本文档的简单 API
- 支持西里尔字母(需要通过 addFont 连接字体)
- 可以与 canvas 和 HTML 元素一起使用
3. pdf-lib (现代且灵活)
pdf-lib 是一个轻量级库,对 TypeScript 有出色的支持。它允许您从头创建 PDF 或编辑现有文档。
import { PDFDocument, StandardFonts, rgb } from 'pdf-lib';
async function createPDF() { const doc = await PDFDocument.create(); const page = doc.addPage(); const font = await doc.embedFont(StandardFonts.Helvetica);
page.drawText('PDF с pdf-lib', { x: 50, y: 700, size: 24, font, color: rgb(0, 0, 0), });
const pdfBytes = await doc.save(); // 保存或发送}特点:
- 完全支持 TypeScript(包含类型)
- 可在浏览器和 Node.js 中运行
- 允许修改现有的 PDF
- 需要手动处理西里尔字母字体
库比较
| 特性 | PDFKit | jsPDF | pdf-lib |
|---|---|---|---|
| 运行环境 | Node.js | 浏览器 + Node.js | 浏览器 + Node.js |
| TypeScript 支持 | 部分(通过 @types) | 部分 | 完全 |
| 西里尔字母 | 需要字体 | 需要字体 | 需要字体 |
| 复杂布局 | 优秀 |