暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

6 个常用的 JavaScript PDF 生成库

前端新世界 2022-02-16
3178
喜欢就关注我们吧


本文翻译自:
https://dzone.com/articles/angular-vs-react-vs-vue-which-framework-is-best-to

在本文中,我们将讨论用于生成PDF的一系列JavaScript库。

我们将通过研究实际的用例来比较,并且主要关注这5个方面:

  • 运行环境
  • 支持的模块
  • 输入
  • 自定义字体
  • 易用性

阅读之后,你将能够为你的JavaScript应用程序找到合适的PDF库。

1. PDFKit

PDFKit是在庞大的JavaScript生态系统中发布的首批pdf库之一。自2012年推出以来,就广受欢迎,并且到2021年仍在更新。

与其他库相比,PDFKit使用起来稍显困难,因为它通过Webpack为Node和浏览器提供支持。

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

它支持自定义字体和图像嵌入,但是缺少高级API。

此外,文档往往很复杂。

正如你所料,你可能需要一定的时间才能习惯,因此刚开始的时候,你会觉得设计PDF并不是一件那么容易的事。

评估要点评估结果
在Node和浏览器上工作△(有点复杂)
输入○(绝对输入)
自定义字体○(在浏览器中使用时要小心)
易用性△(有点复杂)

官方网站:

https://pdfkit.org/

2. pdfmake

pdfmake是一个围绕PDFKit构建的包装器库。主要的区别在于编程范例:

PDFKit采用经典的命令式样式,而pdfmake具有声明式方法。

这就是为什么pdfmake可以让你更轻松地专注于自己想做的事情,而不是花时间告诉库如何获得确定的结果。

然而,甘瓜苦蒂,天下物无全美,当你尝试使用Webpack嵌入自定义字体时,你可能会遇到问题。

遗憾的是,网络上并没有太多关于此问题的文档。相反,如果你不使用Webpack,则可以轻松克隆git存储库并运行字体嵌入脚本。

评估要点评估结果
在Node和浏览器上工作△(使用Webpack时要小心)
输入○(绝对输入)
自定义字体△(需要自己构建)
易用性

官方网站:

http://pdfmake.org/

3. jsPDF

jsPDF在GitHub的pdf库中启动次数最多,这并非偶然,因为它非常稳定且维护良好。

它的模块根据AMD模块标准导出,方便了我们在node和浏览器中的使用。

对于PDFKit,因为提供的API具有强制性模式,所以导致创建复杂的布局往往非常困难。

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

jsPDF不是最容易掌握的一个库,但是其文档非常丰富,因此我们在使用它时不会遇到任何特别的阻碍。

评估要点评估结果
在Node和浏览器上工作
输入
自定义字体○(需要转换为ttf文件)
易用性△(有点复杂)

官方网站:

https://github.com/MrRio/jsPDF

4. Puppeteer

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

模板必须用HTML编写,这使得Puppeteer非常适合web开发人员使用。

关于Puppeteer在开发过程中的使用,可以参考:Generate a PDF from HTML with puppeteer

https://dev.to/damcosset/generate-a-pdf-from-html-and-back-on-the-front-5ff5

Puppeteer主要有两个缺点:

  • 需要实现后端解决方案。
  • 每次需要创建PDF时都需要启动Puppeteer,这会增加一些开销。太慢了。

如果上面列出的缺点对你而言不是一个大问题,那么Puppeteer或许是一个不错的选择,尤其是在你需要设计HTML表等的情况下。

评估要点评估结果
在Node和浏览器上工作x
输入-
自定义字体○(web字体)
易用性?

官方网站:

https://github.com/puppeteer/puppeteer

5. pdf-lib

pdf-lib是一个完全用Typescript实现的PDF库,就像pdfmake一样,它也是围绕PDFKit而构建的。

尽管它是在其他库之后发布的,但它在GitHub上依然受到了数千star的欢迎。

API的设计很棒,并且可以同时使用:node和浏览器。

它支持PDF合并、拆分、嵌入,且具有许多其他库所没有的功能;pdf-lib非常强大,使用也非常简单。

最热门的功能之一是对嵌入字体文件的Unit8Array和ArrayBuffer支持,如果你使用的是node,则允许使用fs;如果你使用的是浏览器,则可以使用xhr。

当你将其与其他库进行比较时,你可以感受到它在性能方面的优越性,而且,它还可以与Webpack一起使用。

此外,该库采用命令式方法,并且可以推断,使用复杂的布局并不是一件容易的事。

评估要点评估结果
在Node和浏览器上工作
输入
自定义字体
易用性△(有点复杂,需要计算布局)

官方网站:

https://pdf-lib.js.org/

6. labelmake

最后一个是Labelmake,一个pdf-lib的包装器库。我个人亲自开发了此库,目的是使Pdf-lib尽可能的具有声明性。

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

你可以在此处查看代码示例。

https://labelmake.jp/javascript-pdf-generator-library/example/

借助pdf-lib的优势,例如可以将Uint8Array和ArrayBuffer用于字体数据,以及可以嵌入PDF文件的功能,labelmake允许开发人员高效地创建复杂的布局。

评估要点评估结果
在Node和浏览器上工作
输入
自定义字体
易用性

官方网站:

https://labelmake.jp/javascript-pdf-generator-library

(文本完)

每日分享前端插件干货,欢迎关注!

点赞和在看就是最大的支持❤️

文章转载自前端新世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论