TypeScript 中的 PDF 生成:库、工具和代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

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) 部分 完全
西里尔字母 需要字体 需要字体 需要字体
复杂布局 优秀