6 个用于生成 PDF 的 JS 库的全面比较

2025-05-24

6 个用于生成 PDF 的 JS 库的全面比较

介绍

在本文中,我们将讨论一系列用于
生成 PDF 的 JavaScript 库。
我们将研究实际用例,并主要关注以下 5
点:

  • 运行环境
  • 支持的模块
  • 打字
  • 自定义字体
  • 便于使用

阅读完本文后,您将能够为您的
Javascript 应用程序找到合适的 PDF 库。
最后,我们还将介绍pdfme,一个非常方便且
功能强大的 PDF 库!

pdfme

Let's GO pdfme官方网站

如果你喜欢它,请给我一个开始⭐ https://github.com/pdfme/pdfme


比较

比较 6 个库

1. PDFKit

sukurinshotto-2020-09-23-14.14.32

PDFKit 是庞大的 JavaScript 生态系统中最早发布的 PDF 库之一
。自 2012 年推出以来,它一直广
受欢迎,并且截至 2021 年仍在不断更新。
与其他库相比,它使用起来略有困难,因为它
通过 Webpack 同时支持 Node 和浏览器。

正如我们稍后将在比较中看到的那样,一些 PDF 库是
PDFKit 的包装器。

它支持自定义字体和图像嵌入,但缺乏高级
API;

此外,文档往往比较复杂。
正如你所料,它需要一定的时间来适应
,而且一开始
你就会发现设计 PDF 并不是一件容易的事情。

评估点 评估
适用于 Node 和浏览器 △(有点复杂)
打字 ○(肯定输入)
自定义字体 ○(在浏览器中使用时请小心)
便于使用 △(有点复杂)

2. pdfmake

sukurinshotto-2020-09-23-14.15.29

pdfmake 是一个基于 PDFKit 构建的包装库。主要
区别在于编程范式:

PDFKit 采用了经典的命令式风格,而 pdfmake 则采用了
声明式方法。

这就是为什么你更容易专注于自己想做的事情,而不是
花时间告诉图书馆如何实现确定的结果。

但闪光的东西并非都是金子,
在使用 Webpack 嵌入自定义字体时,你可能会遇到问题。遗憾的是,
网上没有太多关于这个
问题的文档。不过,如果你不使用 Webpack,你可以轻松地克隆
git 仓库并运行字体嵌入脚本。

评估点 评估
适用于 Node 和浏览器 △(小心使用 Webpack)
打字 ○(肯定输入)
自定义字体 △(需自行搭建)
便于使用

3. jsPDF

sukurinshotto-2020-09-23-14.16.48

jsPDF 在 GitHub 的 PDF 库中拥有最高的启动次数
,而且它非常稳定且维护良好,这绝非偶然。
其模块根据 AMD 模块标准导出,
使其易于在 Node 和浏览器中使用。

至于 PDFKit,提供的 API 具有命令式模式,因此
创建复杂的布局往往非常困难。

嵌入字体并不难,但需要额外的步骤:将
字体转换为 TTF 文件。

jsPDF 不是最容易掌握的库,但文档非常丰富,因此在 使用它
时不会遇到任何特殊障碍。https ://rawgit.com/MrRio/jsPDF/master/docs/index.html )

评估点 评估
适用于 Node 和浏览器
打字
自定义字体 ○(ttf文件需要转换)
便于使用 △(有点复杂)

4. 木偶师

sukurinshotto-2020-09-23-14.20.49

您可能知道,Puppeteer 是一个 Node 库,它提供了
控制 Chrome 的高级 API,但它也可以用于创建 PDF。

模板必须用 HTML 编写,这使得
Web 开发人员可以非常轻松地使用 jsPDF。

以下文章是您在
开发时可以参考的优秀文章:使用 puppeteer 从 HTML 生成 PDF

Puppeteer 主要有两个缺点:

  • 您需要实施后端解决方案。
  • 每次创建 PDF 时都需要启动 Puppeteer,这会产生一些开销,而且速度很慢。

如果上面列出的缺点对您来说不是什么大问题,
那么它可能是一个不错的选择,特别是当您需要设计
HTML 表格等时。

评估点 评估
适用于 Node 和浏览器 x
打字 -
自定义字体 ○(网络字体)
便于使用

5. pdf-lib

sukurinshotto-2020-09-23-14.18.03

pdf-lib 是一个完全用 Typescript 实现的用于创建和编辑 PDF 的库
,而 pdfmake 则是围绕 PDFKit 构建的。

尽管它发布得晚于其他所有库,但它非常受欢迎,
在 GitHub 上获得了数千颗星。

API 的设计非常棒,当然可以与
节点和浏览器兼容。

它支持PDF合并、分割、嵌入,并且具有许多
其他库所没有的功能;

pdf-lib 的功能非常强大,而且使用起来也非常简单。

最热门的功能之一是支持使用 Unit8Array 和
ArrayBuffer 嵌入字体文件,这fs
Node.js 和xhr浏览器中均可使用
。与其他库相比,您会感受到它在性能方面的卓越优势
,当然,它也可以
与 Webpack 一起使用。

此外,这个库采用命令式方法,可以
推断,处理复杂的布局并不容易。

评估点 评估
适用于 Node 和浏览器
打字
自定义字体
便于使用 △(有点复杂,布局需要计算)

6. pdfme

pdfme

最后,我们到了结尾,让我来介绍一下 pdfme。这个库是我亲自开发的,目的是
让 Pdf-lib 尽可能具有声明性。

与 pdf-lib 相反,pdfme 不需要
开发人员自己计算布局:
不需要每次定义对齐、行高等。

借助 pdf-lib 的优势,例如可以使用 Uint8Array 和 ArrayBuffer 来存储字体数据,以及可以嵌入 PDF 文件,

pdfme 允许开发人员高效地创建复杂的布局。

您还可以尝试模板设计和代码生成器来设计您
最喜欢的 PDF 布局并生成一些可执行代码!

pdfme 的模板设计和代码生成器

评估点 评估
适用于 Node 和浏览器
打字
自定义字体
便于使用

Let's GO pdfme官方网站

如果你喜欢它,请给我一个开始⭐ https://github.com/pdfme/pdfme

文章来源:https://dev.to/handdot/generate-a-pdf-in-js-summary-and-comparison-of-libraries-3k0p
PREV
🌐 2024 年为开发人员提供 100 多个免费 API 🚀 🌐 2024 年为开发人员提供 100 多个免费 API 🚀
NEXT
坚实的原则:从面向对象编程开始