背景(需求):小程序端使用echart生成报告页面,点击下载按钮,生成整个页面的pdf并保存
吐槽:小程序的问题还是蛮多的,坑是一踩一个准,在微信社区的评论区也能找到同僚的抱怨
- 这篇文章主要记录这轮需求主要遇到的问题
1、小程序打包太大,需要分包
报告页面主要用到的是echart的图表,echart的js文件会很大,需要按照需求下载 ## 在微信小程序中使用 ECharts,特别要注意小程序不支持echart的功能
压缩包的大小还有其他的一些方法
- 压缩图片体积
- 公共样式
- 图片背景使用定位方式,不要使用css的background-image
2、获取页面的图片
全网搜集主要有三种办法
- canvas手动画
- wxml2canvas工具生成
- 用webview
2-1. 方法一咱就是说咱也不是人工智能;
2-2. 方法二主要生成静态的,需要传入已有的wxml和样式文件,也可以去查查相关的文档,评论区也很有趣;
这个插件局限性很明显,就是不能生成动态的页面,只能输入写好的静态页面,然后生成图片,不符合应用场景。
2-3. 方法三在h5中使用html2canvas获取dom对象生成canvas转成图片,具体的步骤如下
- 小程序端使用web-view嵌入h5页面
- 在h5中实现业务,上传图片到服务器后拿到图片地址
- 通过小程序与h5之间的通信,获取到地址,小程序打开图片预览
问题出现在小程序与h5之间的通信,小程序并不支持与web-view之间的通信
文档中提供的方法并不能实际满足业务需求,所以使用了websocket
具体的流程如下图:
当然还要解决一个问题,出于节能机制ws会断连,用一下心跳机制就可以解决问题。
总结:小程序的功能实现上当然不能跟浏览器的对比,会有很多的限制,毕竟小程序的特点是小而美,所以在实现功能上需要费多点心思。