一个所有 AI 都无法提供的前端 PDF 生成方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
lmq1919
V2EX    分享创造

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

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

    目前的前端生成 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  
       72 天前
    这种实现方案边缘 case 会比较多吧,牛的牛的,已 star 。

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

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

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