最近因为项目需要,学习了几天用JS导出页面上的div为图片。项目需求是这样的,一个页面上有统计图和统计表,另外一部分是地图,当用户点击导出报告时,需要将页面内容导出到Excel,统计表可以从后台查出列表,然后以表格形式导出;统计通采用的echarts,可以转换为base64编码,然后后台处理之后导出。但是地图这块就有点难了,首先地图不是一张图片,其次地图的图片不在本地。
div导出为图片,并不是直接完成的,原理可以认为截取屏幕上div大小,然后转换为图片格式。现在有两种方式,首先是将div转换为Html5的画布,然后画布转换成base64编码,传回后台进行处理;第二种是先把div内容转成svg,然后再转换成base64。
第一种
【JS如何导出Div的内容为图片】
测试图片
测试
这个方式有要注意的问题,是在canvas.toDataUrl()这个方法,这个方法是把canvas转换成base64码,如果你的div中是图片的话,那么这个方法是执行不成功的。另外,上面提到的导出地图的功能,因为地图是多张图片,同时图片在服务器上,所以涉及到跨域和多张图片信息的问题,这时候也是执行不成功的。
第二种
Output Image:
文章图片
这种是先把html拼接为svg,然后将组成的svg串赋给一个img的src,然后在画布上画出这个img,最后执行canvas的toDataUrl方法来获得base64码。
这种方式也没能成功导出地图,地图是openlayers做的,本身就是svg,在ctx.drawImage()方法执行时,出现错误,所以没成功。
上面这两种方法,参考了官网上的方式和网上的一篇博客,对于其他比较常用的情况,上面两种转换效果还是蛮好的;如果上面写的有什么不合适的,请批评指正;另外如果有做过导出地图为图片到word文档的,希望您能不吝赐教,谢谢。
推荐阅读
- CSS三栏布局方法
- 前端学习(十四)CSS 圆角边框代码
- 前端学习|【javascript】实现动画效果
- 自学前端—day 7
- 自学前端 day10
- 自学前端day 8
- 前端学习|回归前端学习第24天-实现俄罗斯方块小游戏7(实现单机版3—实现消行、更新方块、结束)
- 自学前端---day 3
- 前端学习——Day01
- 前端学习之——js解析json数组