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 · 3339 次点击
    这是一个创建于 1512 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个移动端的 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  
       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   ·   实用小工具   ·   2754 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:42 · PVG 20:42 · LAX 04:42 · JFK 07:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.