请教 移动端 web 页面如何导出为 pdf - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
sybb
V2EX    Javascript

请教 移动端 web 页面如何导出为 pdf

  •  
  •   sybb 2020-09-18 16:26:11 +08:00 3922 次点击
    这是一个创建于 1924 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个移动端的 web 项目,想把页面输出成一个 pdf 文件, 来实现打印页面到 A4 纸
    我了解的是 pc 端的网页可以直接用 window.print()方法输出页面的 pdf, 但是移动端的话就没有这个方法了
    请教一下各位有什么方案可行呢
    第 1 条附言    2020-09-18 20:54:15 +08:00
    感谢各位的指点,感谢感谢!

    接手的别人的项目 前端后端(nodejs)都要自己搞, 如果是后端的话, 看博客都是需要有模版然后 replace 如替换,但是动态的话要怎么渲染呢, 或者后端 nodejs 大家有用过的比较好的方案吗
    第 2 条附言    2020-09-25 14:23:24 +08:00
    功能实现了, 看有人收藏了那就记录一下.

    开始时候用的是前端传要渲染的数据给后端,后端动态渲染 html 字符串, 然后用 html-pdf 生成 pdf 给前端地址去下载
    但是!!!!!!! 在本地完全 ok, 部署后(docker)就会报错 write EPIPE 错误, 折腾了大半天,用了 html-pdf 库 issues 中提到的各种方法都试了无果(这也说明这个问题和这个库有关吧)

    本来就是个工作之余加班的额外项目,临时换也懒得去换库了

    最后换回了前端来生成...... 回到了最初的地方.....

    html2canvas + jspdf , html 转成 canvas,canves 转 pdf, 所以缺点就是生成的内容分页时候完全就是图片截开了
    12 条回复    2020-09-19 15:00:44 +08:00
    alertZ
        1
    alertZ  
       2020-09-18 16:53:04 +08:00
    可以试一下这个方法。先使用 html2canvas 将 HTML 转成 canvas,然后调用 canvas 方法转成图片。最后使用 jspdf 将图片导出为 PDF 文件。之前在 angular 的一个项目上是使用这种方法导出的。
    JerryY
        2
    JerryY  
       2020-09-18 16:57:37 +08:00   3
    让后端生成 [逃
    zhuweiyou
        3
    zhuweiyou  
       2020-09-18 17:09:17 +08:00
    一楼理论上可行, 但是手机上不会触发 download, 视频 /文档之类的浏览器应该会直接预览...
    alertZ
        4
    alertZ  
       2020-09-18 17:23:50 +08:00
    @zhuweiyou 恩,之前那个项目是没有在移动端测试过。不过我在网上找了一个 demo,尝试了一下,在微信浏览器和小米浏览器上能够触发下载。 测试地址: https://linwalker.github.io/render-html-to-pdf/demo5.html
    cirzear
        5
    cirzear  
       2020-09-18 17:29:44 +08:00
    一楼的方法跟我之前做的 vue 的项目里用的一样,这个方案绘制页面为图片时,页面滚动条必须在顶部,不然会导致页面绘制图片不全的情况
    ccraohng
        6
    ccraohng  
       2020-09-18 17:36:00 +08:00 via iPhone
    如果要兼容 ios ,最好后端返回文件流的
    zhuweiyou
        7
    zhuweiyou  
       2020-09-18 17:49:32 +08:00
    @alertZ 我的 iOS, 微信点了没反应, Safari 点了会跳出一个 PDF 预览页,除非去点浏览器的菜单,存储到文件....
    TimePPT
        8
    TimePPT  
    PRO
       2020-09-18 18:10:46 +08:00
    之前做过都是后端生成,生成后给到下载链接,还可以填写邮箱发邮件。
    Sparetire
        9
    Sparetire  
       2020-09-19 08:19:44 +08:00 via Android
    后端跑 pupputeer 访问页面导出 pdf 前端下载,唯一需要注意的是前端页面需要适配下 pdf 打印
    abelmakihara
        10
    abelmakihara  
       2020-09-19 09:42:16 +08:00
    html2canvas 之前用的时候有坑..
    包括 5#说的绘制不全
    还有超过一页也有问题(这个后来自己改源码才好的..
    部分 css 失效等
    sybb
        11
    sybb  
    OP
       2020-09-19 10:07:59 +08:00
    @Sparetire 感谢感谢 我试上一试
    @abelmakihara 感谢感谢 我会试一下用后端来动态渲染出 pdf 内容模版 然后存起来下载
    edk24
        12
    edk24  
       2020-09-19 15:00:44 +08:00
    php 后端用 mPDF
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1319 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 17:03 PVG 01:03 LAX 09:03 JFK 12:03
    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