小程序下载报告页面保存成pdf

105 阅读2分钟

背景(需求):小程序端使用echart生成报告页面,点击下载按钮,生成整个页面的pdf并保存

吐槽:小程序的问题还是蛮多的,坑是一踩一个准,在微信社区的评论区也能找到同僚的抱怨

image.png

  • 这篇文章主要记录这轮需求主要遇到的问题

1、小程序打包太大,需要分包

报告页面主要用到的是echart的图表,echart的js文件会很大,需要按照需求下载 ## 在微信小程序中使用 ECharts,特别要注意小程序不支持echart的功能

image.png

压缩包的大小还有其他的一些方法

  • 压缩图片体积
  • 公共样式
  • 图片背景使用定位方式,不要使用css的background-image

2、获取页面的图片

全网搜集主要有三种办法

  • canvas手动画
  • wxml2canvas工具生成
  • 用webview

2-1. 方法一咱就是说咱也不是人工智能;

2-2. 方法二主要生成静态的,需要传入已有的wxml和样式文件,也可以去查查相关的文档,评论区也很有趣;

企业微信截图_16977688486268.png 这个插件局限性很明显,就是不能生成动态的页面,只能输入写好的静态页面,然后生成图片,不符合应用场景。

2-3. 方法三在h5中使用html2canvas获取dom对象生成canvas转成图片,具体的步骤如下

  • 小程序端使用web-view嵌入h5页面
  • 在h5中实现业务,上传图片到服务器后拿到图片地址
  • 通过小程序与h5之间的通信,获取到地址,小程序打开图片预览

问题出现在小程序与h5之间的通信,小程序并不支持与web-view之间的通信

image.png 文档中提供的方法并不能实际满足业务需求,所以使用了websocket 具体的流程如下图:

image.png

当然还要解决一个问题,出于节能机制ws会断连,用一下心跳机制就可以解决问题。

总结:小程序的功能实现上当然不能跟浏览器的对比,会有很多的限制,毕竟小程序的特点是小而美,所以在实现功能上需要费多点心思。