V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
lmq1919
V2EX  ›  分享创造

一个所有 AI 都无法提供的前端 PDF 生成方案

  •  
  •   lmq1919 · 36 天前 · 2723 次点击
    这是一个创建于 36 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前的前端生成 pdf 方案

    方案 缺点
    html2canvas + jspdf 图片式的 pdf,文件体积大,无法选中编辑文字,模糊
    jspdf / pdfmake 等 学习成本高,使用复杂

    我的方案

    1. 修改了 html2canvas 的 renderCanvas 方法,将绘制 canvas 的 api 换成了 jspdf 的 api 。
    2. 开发者不再需要手动计算 pdf 的布局,就可以直接将 html 转化成可编辑的矢量 pdf 。
    3. 使用方法和 html2canvas 基本一样,上手难度非常低

    1. 在线体验

    https://dompdfjs.lisky.com.cn

    2. Git 仓库地址 (欢迎 Star⭐⭐⭐)

    https://github.com/lmn1919/dompdf.js

    23 条回复    2025-08-01 18:09:35 +08:00
    weixind
        1
    weixind  
       36 天前
    这种实现方案边缘 case 会比较多吧,牛的牛的,已 star 。

    报个 bug ,demo 里面 table 直接生成会有偏差。

    pike0002
        2
    pike0002  
       36 天前
    先关注一下,有机会在我们的插件中尝试一下 https://www.pixelstech.net/application/pagesaver/
    lmq1919
        3
    lmq1919  
    OP
       36 天前
    @weixind 感谢大佬!!应该是和屏幕分辨率有关系,我晚上回去把宽度写死应该就可以了
    ssb4
        4
    ssb4  
       36 天前
    试了下 demo ,没一个正常的...

    Microsoft Edge
    版本 138.0.3351.109 (正式版本) (64 位)
    ssb4
        5
    ssb4  
       36 天前
    lmq1919
        6
    lmq1919  
    OP
       36 天前
    @pike0002 很棒的产品
    lmq1919
        7
    lmq1919  
    OP
       36 天前
    @ssb4 感谢反馈
    guansixu
        8
    guansixu  
       36 天前
    跨页问题有好的处理方法吗?之前用 html2canvas + jspdf ,跨页怎么不好处理
    lmq1919
        9
    lmq1919  
    OP
       36 天前
    @guansixu 目前在开发分页的功能
    ersic
        10
    ersic  
       36 天前
    官方提供的例子,生成都不正常。win + edge
    lmq1919
        11
    lmq1919  
    OP
       36 天前
    @ersic 感谢大佬反馈
    kokerkov
        12
    kokerkov  
       36 天前
    没看懂。你这个跟 wkhtmltopdf 有啥区别?
    lmq1919
        13
    lmq1919  
    OP
       36 天前
    @kokerkov wkhtmltopdf 需要服务器,我这个是纯前端浏览器运行的
    xhawk
        14
    xhawk  
       36 天前 via Android
    我用 pdfkit 也挺简单的
    lmq1919
        15
    lmq1919  
    OP
       36 天前
    @xhawk 如何要绘制图表就复杂了,所以会有 jsPDF-AutoTable 这种库,还只能绘制简单的表格
    imaple
        16
    imaple  
       35 天前
    @ssb4 #5 基本和你一样,win+edge
    lmq1919
        17
    lmq1919  
    OP
       35 天前
    @imaple 很有可能是 edge 用了 IE 内核,可以用 chrome 试一下
    Felix96
        18
    Felix96  
       35 天前
    官网例子提一个上面没说到过的 bug 吧,macOS + Chrome 环境 MacBook 窗口小的情况下,滚动一段距离,点击 Generate PDF 会截断。同为前端,非常希望 OP 能做成,先收藏了,顺便分享我的:纯前端实现列印就 jsPDF , 因为中文字体需要下载几十兆的资源,解决方法是将各种塞 indexedDB 里。如果超级复杂且可靠能高保真, @page + size 调好交给 puppeteer ,100% 没问题,多复杂都能实现,可以复制,当然 puppeteer 优化的压力就给后端了。
    imaple
        19
    imaple  
       35 天前
    @lmq1919 #17 换了 chrome 一切正常, 效果很好。
    lmq1919
        20
    lmq1919  
    OP
       35 天前
    @Felix96 感谢大佬的支持和分享
    lmq1919
        21
    lmq1919  
    OP
       35 天前
    @lmq1919 ヽ( ̄▽ ̄)ノ
    lmq1919
        22
    lmq1919  
    OP
       35 天前
    @imaple ヾ(◍°∇°◍)ノ゙
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5308 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 07:31 · PVG 15:31 · LAX 00:31 · JFK 03:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.