6 个用于生成 PDF 的 JS 库的全面比较
介绍
在本文中,我们将讨论一系列用于
生成 PDF 的 JavaScript 库。
我们将研究实际用例,并主要关注以下 5
点:
- 运行环境
- 支持的模块
- 打字
- 自定义字体
- 便于使用
阅读完本文后,您将能够为您的
Javascript 应用程序找到合适的 PDF 库。
最后,我们还将介绍pdfme,一个非常方便且
功能强大的 PDF 库!
Let's GO pdfme官方网站
如果你喜欢它,请给我一个开始⭐ https://github.com/pdfme/pdfme
比较
比较 6 个库
1. PDFKit
PDFKit 是庞大的 JavaScript 生态系统中最早发布的 PDF 库之一
。自 2012 年推出以来,它一直广
受欢迎,并且截至 2021 年仍在不断更新。
与其他库相比,它使用起来略有困难,因为它
通过 Webpack 同时支持 Node 和浏览器。
正如我们稍后将在比较中看到的那样,一些 PDF 库是
PDFKit 的包装器。
它支持自定义字体和图像嵌入,但缺乏高级
API;
此外,文档往往比较复杂。
正如你所料,它需要一定的时间来适应
,而且一开始
你就会发现设计 PDF 并不是一件容易的事情。
评估点 | 评估 |
---|---|
适用于 Node 和浏览器 | △(有点复杂) |
打字 | ○(肯定输入) |
自定义字体 | ○(在浏览器中使用时请小心) |
便于使用 | △(有点复杂) |
2. pdfmake
pdfmake 是一个基于 PDFKit 构建的包装库。主要
区别在于编程范式:
PDFKit 采用了经典的命令式风格,而 pdfmake 则采用了
声明式方法。
这就是为什么你更容易专注于自己想做的事情,而不是
花时间告诉图书馆如何实现确定的结果。
但闪光的东西并非都是金子,
在使用 Webpack 嵌入自定义字体时,你可能会遇到问题。遗憾的是,
网上没有太多关于这个
问题的文档。不过,如果你不使用 Webpack,你可以轻松地克隆
git 仓库并运行字体嵌入脚本。
评估点 | 评估 |
---|---|
适用于 Node 和浏览器 | △(小心使用 Webpack) |
打字 | ○(肯定输入) |
自定义字体 | △(需自行搭建) |
便于使用 | ○ |
3. jsPDF
jsPDF 在 GitHub 的 PDF 库中拥有最高的启动次数
,而且它非常稳定且维护良好,这绝非偶然。
其模块根据 AMD 模块标准导出,
使其易于在 Node 和浏览器中使用。
至于 PDFKit,提供的 API 具有命令式模式,因此
创建复杂的布局往往非常困难。
嵌入字体并不难,但需要额外的步骤:将
字体转换为 TTF 文件。
jsPDF 不是最容易掌握的库,但文档非常丰富,因此在 使用它
时不会遇到任何特殊障碍。https ://rawgit.com/MrRio/jsPDF/master/docs/index.html )
评估点 | 评估 |
---|---|
适用于 Node 和浏览器 | ○ |
打字 | ○ |
自定义字体 | ○(ttf文件需要转换) |
便于使用 | △(有点复杂) |
4. 木偶师
您可能知道,Puppeteer 是一个 Node 库,它提供了
控制 Chrome 的高级 API,但它也可以用于创建 PDF。
模板必须用 HTML 编写,这使得
Web 开发人员可以非常轻松地使用 jsPDF。
以下文章是您在
开发时可以参考的优秀文章:使用 puppeteer 从 HTML 生成 PDF
Puppeteer 主要有两个缺点:
- 您需要实施后端解决方案。
- 每次创建 PDF 时都需要启动 Puppeteer,这会产生一些开销,而且速度很慢。
如果上面列出的缺点对您来说不是什么大问题,
那么它可能是一个不错的选择,特别是当您需要设计
HTML 表格等时。
评估点 | 评估 |
---|---|
适用于 Node 和浏览器 | x |
打字 | - |
自定义字体 | ○(网络字体) |
便于使用 | ? |
5. pdf-lib
pdf-lib 是一个完全用 Typescript 实现的用于创建和编辑 PDF 的库
,而 pdfmake 则是围绕 PDFKit 构建的。
尽管它发布得晚于其他所有库,但它非常受欢迎,
在 GitHub 上获得了数千颗星。
API 的设计非常棒,当然可以与
节点和浏览器兼容。
它支持PDF合并、分割、嵌入,并且具有许多
其他库所没有的功能;
pdf-lib 的功能非常强大,而且使用起来也非常简单。
最热门的功能之一是支持使用 Unit8Array 和
ArrayBuffer 嵌入字体文件,这fs
在
Node.js 和xhr
浏览器中均可使用
。与其他库相比,您会感受到它在性能方面的卓越优势
,当然,它也可以
与 Webpack 一起使用。
此外,这个库采用命令式方法,可以
推断,处理复杂的布局并不容易。
评估点 | 评估 |
---|---|
适用于 Node 和浏览器 | ○ |
打字 | ○ |
自定义字体 | ○ |
便于使用 | △(有点复杂,布局需要计算) |
6. pdfme
最后,我们到了结尾,让我来介绍一下 pdfme。这个库是我亲自开发的,目的是
让 Pdf-lib 尽可能具有声明性。
与 pdf-lib 相反,pdfme 不需要
开发人员自己计算布局:
不需要每次定义对齐、行高等。
借助 pdf-lib 的优势,例如可以使用 Uint8Array 和 ArrayBuffer 来存储字体数据,以及可以嵌入 PDF 文件,
pdfme 允许开发人员高效地创建复杂的布局。
您还可以尝试模板设计和代码生成器来设计您
最喜欢的 PDF 布局并生成一些可执行代码!
评估点 | 评估 |
---|---|
适用于 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