有什么 HTML 转 PDF 的开源工具推荐吗?

2023-07-06 23:53:42 +08:00
 deacyn
以前使用的工具是 wkhrmltopdf

工具希望能够运行在服务器上

各位公司都在用什么工具呢
3627 次点击
所在节点    程序员
30 条回复
harrozze
2023-07-06 23:58:24 +08:00
python3-xhtml2pdf/stable 0.2.5-3 all
A library for converting HTML into PDFs using ReportLab (Python 3 module)
deacyn
2023-07-07 00:03:07 +08:00
@harrozze 支持 css3 和 js es6 语法吗?
dcsuibian
2023-07-07 00:11:21 +08:00
puppeteer ?
deacyn
2023-07-07 00:13:15 +08:00
@dcsuibian 不知道是使用方式不对还是怎么着,发现使用这个生成的 pdf 比 wkhtmltopdf 工具大一倍,尤其是在有图片的时候。
justNoBody
2023-07-07 00:23:11 +08:00
chrome 无头模式最佳

google-chrome --headless --disable-gpu --print-to-pdf=$output_file $html_file
qsnow6
2023-07-07 00:31:53 +08:00
调用 Chrome 的打印功能就行
learningman
2023-07-07 00:38:28 +08:00
你要支持 js ,那最好还是无头浏览器
deacyn
2023-07-07 08:39:25 +08:00
@justNoBody 之前测试了一下 puppeteer ,发现生成的文件太大了,有什么办法解决吧吗
jifengg
2023-07-07 08:49:16 +08:00
前段时间浅浅研究过这俩,wkhtmltopdf 貌似有些支持不是很好,后来用 chrome headless 出来的都挺好,也支持 js 渲染。
不过最好是用 puppeteer ,命令行的方式有些参数不生效。

至于楼主说的体积大一倍,建议楼主可以看看两个 pdf 放大之后,图片清晰度是否一样。如果不一样可以看看哪里有设置 dpi 之类的。
joooooker21
2023-07-07 09:05:05 +08:00
wkhtmltopdf 也可以运行在服务器上
jiejia
2023-07-07 09:41:42 +08:00
PhantomMagick
NealDing
2023-07-07 09:49:34 +08:00
@deacyn puppeteer 应该是目前最强大易用的了,如果有大文件的问题建议把生成功能模块建个 repo 发一下,大家一起帮忙看看
dcdlove
2023-07-07 10:05:16 +08:00
只要系统安装有谷歌浏览器就可以 --print-to-pdf-no-header 隐藏打印的页头脚
google-chrome --headless --disable-gpu --print-to-pdf-no-header --print-to-pdf=test.pdf
https://www.v2ex.com/t/954703#reply10
dcdlove
2023-07-07 10:09:56 +08:00
@deacyn puppeteer 最后调用的还是 chrome 的无头模式 只是定死了一个浏览器内核 所以最好还是直接调用 chrome 输出 最好,想用那个版本就装那个版本 服务端也能调用
C:\Program Files\Google\Chrome\Application\chrome.exe --headless --print-to-pdf-no-header --print-to-pdf="test.pdf" --disable-gpu "http://www.baidu.com"
leroy20317
2023-07-07 10:12:02 +08:00
生成 pdf 我用的也是 puppeteer 就是在服务器中运行时间长了之后内存占用一直在增加 不知道是配置有问题还是这个本身就这样 只能定时去重启服务
Eureka0007
2023-07-07 14:02:53 +08:00
forQ
2023-07-07 14:28:25 +08:00
playwright
yjd
2023-07-07 15:17:50 +08:00
@dcdlove 这种转一个要创建一次进程,相当耗资源。内存回收不及时,就会像上面说的持续增长。
dcdlove
2023-07-07 15:29:58 +08:00
@yjd 但是生产速度真的刚刚的几乎没延迟,目前服务器通过 cmd 调用完成就结束释放没出现内存无法回收的情况
Breacher
2023-07-07 15:43:44 +08:00
前段时间刚做了个 HTML 生成 PDF 发票的功能,调研了 wkhrmltopdf ,发现它好久没更新了,有些 JS 特性它不支持。最后用了 Gotenburg ,一个打包了无头 Chrome 和常用字体的开箱即用的方案。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/954703

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX