使用 TypeScript 生成 PDF 报告:库概览与实践示例
PDF 文档生成是现代 Web 应用和企业系统开发中的关键任务之一。报告、账单、证书、分析仪表板——所有这些都需要一个方便且灵活的工具来在服务端或客户端生成 PDF。TypeScript 作为 JavaScript 的强类型超集,为实现此类功能提供了极佳的可能性。本文将介绍用于在 TypeScript 中生成 PDF 的主要库、它们的特点、优势以及使用示例。
为什么要使用 TypeScript 生成 PDF?
TypeScript 添加了静态类型检查,这大大简化了复杂报告生成系统的开发。IDE 提供了自动补全、类型检查和重构功能,从而减少了错误数量。此外,TypeScript 代码易于维护和扩展,尤其是在大型项目中。
用于 TypeScript 生成 PDF 的主要库
我们将介绍三种最流行的工具:PDFKit、jsPDF 和 Puppeteer。每种工具都有其特定的应用领域和特点。
1. PDFKit
PDFKit 是一个用于在 Node.js 上创建 PDF 文档的强大库。它完全用 JavaScript 编写,并通过类型定义 (@types/pdfkit) 支持 TypeScript。PDFKit 允许从头开始创建文档,添加文本、图像、矢量图形、表格等等。
优点:
- 完全控制 PDF 的内容和结构。
- 支持字体、颜色、透明度。
- 内置对西里尔字母的支持(在加载字体后)。
- 高性能。
PDFKit 与 TypeScript 的使用示例:
import PDFDocument from 'pdfkit';import * as fs from 'fs';
const doc = new PDFDocument();doc.pipe(fs.createWriteStream('report.pdf'));
doc.fontSize(25).text('销售报告', 100, 100);doc.fontSize(12).text('日期: 2025-03-15', 100, 150);doc.moveDown();
doc.text('名称: 笔记本电脑');doc.text('数量: 10');doc.text('金额: 1 200 000 卢布');
doc.end();为了正确处理西里尔字母,需要加载字体,例如:
doc.registerFont('Roboto', 'fonts/Roboto-Regular.ttf');doc.font('Roboto').text('你好,世界!');2. jsPDF
jsPDF 是一个客户端库,用于直接在浏览器中生成 PDF。它也有 TypeScript 的类型定义。jsPDF 非常适合创建简单的报告、账单和发票,无需服务端处理。
优点:
- 在客户端运行(无需服务器)。
- 设置和使用简单。
- 通过
html2canvas插件支持 HTML 布局。
jsPDF 与 TypeScript 的使用示例:
import { jsPDF } from 'jspdf';
const doc = new jsPDF();doc.setFontSize(18);doc.text('项目报告', 10, 20);doc.setFontSize(12);doc.text('完成度: 75%', 10, 40);doc.text('预算: 2 500 000 卢布', 10, 50);
doc.save('project-report.pdf');重要提示: jsPDF 不“开箱即用”地支持西里尔字母。要处理俄语文本,需要通过 addFileToVFS 和 addFont 加载字体。
3. Puppeteer
Puppeteer 是一个通过 DevTools 协议控制 Chrome/Chromium 浏览器的库。它允许以最高精度从 HTML/CSS 生成 PDF,因为它使用了浏览器的实际渲染引擎。Puppeteer 拥有官方的 TypeScript 类型定义。
优点:
- 完全支持 CSS、Flexbox、Grid、西里尔字母