1.首先前端获取到图表的base64编码传给后端
用的myChart.getDataURL({pixelRatio: 2,});
这里需要提一下如果在生成时的局部变量里获取这个值,需要将animation:false,否则生成没加载完就获取base64拿到后端图片就不完整。也可以将mychart设为全局变量,在ajax向后端传数据时再获取
2.修正获得的base64值
这个地方就很坑了,花了好长时间。我用的是python,后台是django
1.info.replace(" ", "+") 传输过程中会丢失+号这里要变回来
2.python的base64解码不需要这个头部数据 ——data:image/png;base64, 所以需要info=info[22:]
3.查阅资料说python的base64长度一定要按4的整数倍,还得用=号补齐,所以需要用这个函数
def tran64(s):
missing_padding = len(s) % 4
if missing_padding != 0:
s = s+'='* (4 - missing_padding)
return s
3.最后解码保存成图片,用docxtpl模块插入word模板,大功告成
with open(imgpath,'wb') as f:
f.write(base64.b64decode(info))
顺便提一句docxtpl插入图片很方便 InlineImage(doc,imgpath,width=Mm(60)),
doc是模板地址,imgpath是图片地址,后面控制图片大小