V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
f1ynnv2
V2EX  ›  问与答

求一个保存样式的 html 转 pdf 的方案

  •  
  •   f1ynnv2 · 2023-03-27 14:08:30 +08:00 · 1392 次点击
    这是一个创建于 614 天前的主题,其中的信息可能已经有所发展或是发生改变。

    手里一堆以.html 方式存的资料文件,想要转在 pdf 保存,后续也会陆续产生这类 html 文件。

    试了 v2 里提到的 html 转 pdf 的方案,不管是浏览器打印成 pdf ,还是使用一些库比如:pdfkit 、wkhtmltopdf 等 效果都不好,很多都会丢样式,似乎是调用了打印样式?

    对比下来只有 Safari->文件->导出为 PDF 这种方式能 100%的保证 HTML 的样式(不管什么样的网页),但是这个方式有个 bug ,详见 https://v2ex.com/t/927485

    所以想问问有没有能完整的保存 HTML 样式的转 PDF 的方案?浏览器插件、各种开发语言库啥的都行。网上收费的 API 就算了,看了几家都好贵。

    12 条回复    2023-03-28 09:15:11 +08:00
    rsy
        1
    rsy  
       2023-03-27 14:12:39 +08:00
    Word 打开文件-选择 html 文件打开-另存为-文件格式选择 PDF 导出
    zuiluo
        2
    zuiluo  
       2023-03-27 14:19:16 +08:00
    puppeteer 算得上最简单方便,兼容性最好的方案了吧
    akira
        3
    akira  
       2023-03-27 14:27:46 +08:00
    用 cef 打开 然后再打印成 pdf 不知道行不行
    f1ynnv2
        4
    f1ynnv2  
    OP
       2023-03-27 14:37:14 +08:00
    @zuiluo puppeteer 本质上还是调用 Chromium 的 pdf 打印功能吧,这个 pdf 打印功能其实是调用网页的打印样式的,感觉还是无法完全做到和 html 一样的样式。
    bootvue
        5
    bootvue  
       2023-03-27 14:51:05 +08:00
    发一份大家看看
    zuiluo
        6
    zuiluo  
       2023-03-27 14:56:48 +08:00
    @f1ynnv2 比如什么样式不兼容?
    raymanr
        8
    raymanr  
       2023-03-27 15:20:50 +08:00
    感觉完美兼容有点困难啊, 毕竟 HTML 并不考虑分页, 宽高这些打印因素, PDF 更类似于打印成特定纸张后的文档
    f1ynnv2
        9
    f1ynnv2  
    OP
       2023-03-27 16:38:45 +08:00
    @hua123s 这个确实能保存 pdf ,但是是把图片做成 pdf 了,没法索引了。
    f1ynnv2
        10
    f1ynnv2  
    OP
       2023-03-27 16:39:30 +08:00
    @raymanr 对,所以才说 Safari 的这个功能真的不错,真正的 100%保持了 HTML 的样式,结果还有点 bug 。
    j3llypunk777
        11
    j3llypunk777  
       2023-03-27 17:05:45 +08:00
    做过一个 html 生成 pdf 的需求 用的是 html-to-image 和 jspdf 纯前端
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   934 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:02 · PVG 05:02 · LAX 13:02 · JFK 16:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.