有什么 HTML 转 PDF 的开源工具推荐吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
deacyn
V2EX    程序员

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

  •  
  •   deacyn 2023-07-06 23:53:42 +08:00 via iPhone 4333 次点击
    这是一个创建于 835 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以前使用的工具是 wkhrmltopdf

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

    各位公司都在用什么工具呢
    30 条回复    2024-03-20 11:52:12 +08:00
    harrozze
        1
    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
        2
    deacyn  
    OP
       2023-07-07 00:03:07 +08:00 via iPhone
    @harrozze 支持 css3 和 js es6 语法吗?
    dcsuibian
        3
    dcsuibian  
       2023-07-07 00:11:21 +08:00
    puppeteer ?
    deacyn
        4
    deacyn  
    OP
       2023-07-07 00:13:15 +08:00 via iPhone
    @dcsuibian 不知道是使用方式不对还是怎么着,发现使用这个生成的 pdf 比 wkhtmltopdf 工具大一倍,尤其是在有图片的时候。
    justNoBody
        5
    justNoBody  
       2023-07-07 00:23:11 +08:00 via iPhone   4
    chrome 无头模式最佳

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

    至于楼主说的体积大一倍,建议楼主可以看看两个 pdf 放大之后,图片清晰度是否一样。如果不一样可以看看哪里有设置 dpi 之类的。
    joooooker21
        10
    joooooker21  
       2023-07-07 09:05:05 +08:00
    wkhtmltopdf 也可以运行在服务器上
    jiejia
        11
    jiejia  
       2023-07-07 09:41:42 +08:00
    PhantomMagick
    NealDing
        12
    NealDing  
       2023-07-07 09:49:34 +08:00
    @deacyn puppeteer 应该是目前最强大易用的了,如果有大文件的问题建议把生成功能模块建个 repo 发一下,大家一起帮忙看看
    dcdlove
        13
    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
    t/954703#reply10
    dcdlove
        14
    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
        15
    leroy20317  
       2023-07-07 10:12:02 +08:00
    生成 pdf 我用的也是 puppeteer 就是在服务器中运行时间长了之后内存占用一直在增加 不知道是配置有问题还是这个本身就这样 只能定时去重启服务
    forQ
        17
    forQ  
       2023-07-07 14:28:25 +08:00
    playwright
    yjd
        18
    yjd  
       2023-07-07 15:17:50 +08:00
    @dcdlove 这种转一个要创建一次进程,相当耗资源。内存回收不及时,就会像上面说的持续增长。
    dcdlove
        19
    dcdlove  
       2023-07-07 15:29:58 +08:00
    @yjd 但是生产速度真的刚刚的几乎没延迟,目前服务器通过 cmd 调用完成就结束释放没出现内存无法回收的情况
    Breacher
        20
    Breacher  
       2023-07-07 15:43:44 +08:00 via iPhone   1
    前段时间刚做了个 HTML 生成 PDF 发票的功能,调研了 wkhrmltopdf ,发现它好久没更新了,有些 JS 特性它不支持。最后用了 Gotenburg ,一个打包了无头 Chrome 和常用字体的开箱即用的方案。
    Breacher
        21
    Breacher  
       2023-07-07 15:45:02 +08:00 via iPhone
    @Breacher gotenberg
    yjd
        22
    yjd  
       2023-07-07 16:32:47 +08:00
    @dcdlove 多谢。 下次测试看看。
    之前我用的是第三方软件 coolutils ,htmlToPdf 不理想转出来排版很差。
    adnoh
        23
    adnoh  
       2023-07-07 16:37:54 +08:00 via Android
    用过 phantomjs
    leroy20317
        24
    leroy20317  
       2023-07-07 16:39:54 +08:00
    @yjd 确实是的 重复创建耗资源而且有时候会出现丢失 所以才提前创建几个 page 所有的转换任务都只在这几个 page 中渲染转换 可能就是这样才会内存一直在叠加吧
    haokuixi
        25
    haokuixi  
       2023-07-07 17:35:10 +08:00
    @dcdlove 这个好使,感谢
    yh648559276
        26
    yh648559276  
       2023-07-07 17:50:25 +08:00
    @dcdlove 为什么我执行没有本地没有找到 test.pdf
    dcdlove
        27
    dcdlove  
       2023-07-07 19:33:14 +08:00
    @yh648559276 可以写绝对地址,相对路径会在浏览器 bin 目录下
    xeneizes
        28
    xeneizes  
       2023-07-08 08:34:44 +08:00
    @dcdlove 银河麒麟 sv 系统 可以用这种方案吗 arm 系统可以装 chrome 吗
    zero3412
        29
    zero3412  
       2023-07-08 15:11:43 +08:00
    @Breacher 感觉这个挺好的,麻烦点在需要独立服务器
    正好我也有个项目有这需求,目前使用的是 mPDF ,支持度一般般,要求别太高的都 OK
    solgh
        30
    solgh  
       2024-03-20 11:52:12 +08:00
    我目前也是用 mPDF , puppeteer 也用,puppeteer 直接 HTML 面打印出的效果是非常好的,但是生成出的 PDF 容高度和原 HTML 高度相差是有差
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2656 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 03:16 PVG 11:16 LAX 20:16 JFK 23:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86