这篇算是业务小笔记吧。
需求描述: 有个 dashboard 界面,需要新增一个 export PDF 的功能。这个功能需要在两个地方存在:1. monitor dashboard 可以直接导出 2. list 页面可以快速导出。
需求分析: 又是一个前后端都可以做的 feature.但是如果从前端可以拿出什么方案呢?我用到的方案就是 dom node 转 canvas 之后再转 PDF。
这个方案用到了两个 package. 1. html2canvs 2. jsPDF
方案很简单。拿到 dom node 后使用 html2canvas 转 image, 再把 image 转 jsPDF。
来看一个简单的 demo:
1 | import jsPDF from "jspdf"; |
这个方案的可行性已经验证没问题。那么下一步,看一下这个方案的局限性在哪?
其实我能想到会遇到的问题就是当 dashboard 的数据巨大的时候,在渲染耗时上会不会存在问题?
比如一年量的数据。关于这个问题我能想到的是,改变交互,使用 web worker 进行 canvas 的转换和渲染。
这部分的工作都交给 web worker 来执行。执行完成后以 notification 的方式通知用户下载。