JavaScript (Node.js) 中的 PDF 生成:库与工具

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

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

开始课程

JavaScript (Node.js) 中的 PDF 生成:库与工具概述



创建 PDF 文档是 Web 开发中的常见任务之一。无论是生成发票、报告、证书,还是仅仅导出数据,Node.js 都提供了几种强大的解决方案。在本文中,我们将探讨用于在 JavaScript 服务器端处理 PDF 的主要库、它们的功能以及使用示例。



为什么要在服务器上生成 PDF?

在服务器端(Node.js)生成 PDF 具有以下优点:

  • 一致性 — 文档在所有设备上看起来都一样
  • 安全性 — 数据不会离开服务器
  • 自动化 — 可以按计划或在特定事件发生时创建 PDF
  • 支持复杂逻辑 — 可以访问数据库、文件系统和其他资源


Node.js 中用于生成 PDF 的主要库



1. PDFKit

PDFKit — 最流行的从零开始创建 PDF 的库。它不需要外部依赖,并允许完全控制文档内容。

使用示例:

const PDFDocument = require('pdfkit');const fs = require('fs');

const doc = new PDFDocument();doc.pipe(fs.createWriteStream('output.pdf'));

// 添加内容doc.fontSize(25).text('你好,世界!', 100, 100);doc.fontSize(12).text('这是使用 PDFKit 创建的 PDF。', 100, 150);

// 画一条线doc.moveTo(100, 200).lineTo(500, 200).stroke();

// 完成文档doc.end();

功能:

  • 添加不同字体和大小的文本
  • 插入图像(JPEG、PNG)
  • 绘制线条、矩形和圆形
  • 支持链接和书签
  • 创建多页文档


2. Puppeteer

Puppeteer — 一个用于控制 Chrome/Chromium 浏览器的工具。它允许从 HTML 页面生成 PDF,这对于复杂布局非常方便。

使用示例:

const puppeteer = require('puppeteer');

async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage();

await page.setContent('<h1>标题</h1><p>文档文本</p>'); await page.pdf({ path: 'page.pdf', format: 'A4' });

await browser.close();}

generatePDF();

特点:

  • 支持 CSS、JavaScript 和所有现代 Web 技术
  • 非常适合将 HTML 模板转换为 PDF
  • 可以使用指定参数(格式、边距、缩放)进行打印
  • 需要安装 Chromium(约 300 MB)


3. jsPDF(适配 Node.js)

jsPDF — 一个客户端库,但存在用于在 Node.js 中使用的封装(例如 jspdf-autotable)。

示例(使用 jspdf 和 html2canvas):

const { jsPDF } = require('jspdf');const fs = require('fs');

const doc = new jsPDF();doc.text('来自 Node.js 的问候!', 10, 10);doc.save('output.pdf');

限制: jsPDF 不支持复杂布局,并且需要额外的库来处理 HTML。



4. pdfmake

pdfmake — 一个基于 JSON 格式声明式描述文档的库。

示例:

const pdfmake = require('pdfmake');const fs = require('fs');

const fonts = { Roboto: { normal: 'fonts/Roboto-Regular.ttf', bold: 'fonts/Roboto-Medium.ttf' }};

const printer = new pdfmake(fonts);

const docDefinition = { content: [ { text:

推荐