TypeScript 中的 PDF 生成:库与工具概览
创建 PDF 文档是 Web 开发中的常见任务之一。TypeScript 凭借其严格的类型检查和现代特性,使得在客户端和服务器端都能编写可靠的 PDF 生成代码。本文将介绍 TypeScript 中用于生成 PDF 的流行库与工具、它们的特点以及使用示例。
1. PDFKit — 强大的服务器端库
PDFKit 是在 Node.js 上创建 PDF 最流行的库之一。它提供对文档结构的完全控制,支持字体、图像、注释和矢量图形。PDFKit 在服务器端运行,非常适合生成复杂的报告、发票或证书。
安装与示例:
npm install pdfkit @types/pdfkitimport PDFDocument from 'pdfkit';import * as fs from 'fs';
const doc = new PDFDocument();
doc.pipe(fs.createWriteStream('output.pdf'));
doc.fontSize(25).text('你好,世界!', 100, 100);doc.fontSize(12).text('这是使用 PDFKit 和 TypeScript 生成的 PDF。', 100, 150);
doc.end();PDFKit 非常适合:
- 在服务器端创建 PDF(Express, NestJS)
- 处理自定义字体和编码(包括西里尔字母)
- 添加图像、表格和图形基元
2. jsPDF — 客户端 PDF 生成
jsPDF 是一个客户端库,用于直接在浏览器中创建 PDF。它易于使用,支持文本、图像、注释和基本形状。通过 DefinitelyTyped 提供 TypeScript 类型。
安装:
npm install jspdf @types/jspdf在浏览器中生成 PDF 的示例:
import { jsPDF } from 'jspdf';
const doc = new jsPDF();
doc.text('你好,TypeScript!', 10, 10);doc.text('这是在浏览器中创建的 PDF。', 10, 20);
doc.save('document.pdf');jsPDF 适用于:
- 在客户端下载 PDF(报告、收据)
- 无需复杂布局的简单文档
- 快速原型开发
3. Puppeteer — 从 HTML 生成
Puppeteer 是一个用于控制 Chrome/Chromium 浏览器的库。它可以将 HTML 页面转换为 PDF,并完整保留样式、字体和布局。非常适合创建复杂的文档、报告和名片。
安装:
npm install puppeteer将 HTML 转换为 PDF 的示例:
import puppeteer from 'puppeteer';
async function generatePDF(html: string, outputPath: string): Promise<void> { const browser = await puppeteer.launch(); const page = await browser.newPage();
await page.setContent(html, { waitUntil: 'networkidle0' }); await page.pdf({ path: outputPath, format: 'A4' });
await browser.close();}
// 使用const htmlContent = `<h1 style="color: blue;">标题</h1><p>带有 HTML 样式的文本</p>`;generatePDF(htmlContent, 'output.pdf');Puppeteer 是以下场景的理想选择:
- 将复杂的 HTML 模板转换为 PDF
- 创建带有 CSS 样式、Flexbox、Grid 的 PDF
- 在服务器端生成 PDF,并完全控制外观
4. pdf-lib — 轻量且快速的库
pdf-lib 是一个用于创建和修改 PDF 文档的现代库,无外部依赖。它既可在 Node.js 中运行,也可在浏览器中运行。支持字体、图像、表单和注释。
安装:
npm install pdf-lib\