需求说明
公司最近想出一份报告,报告内容包含地图展示,折线图还有各种文字说明,跟后台沟通反映后台无法实现,所以就前端想办法来实现此功能。
所用插件
- html2canvas
- jspdf
html & css
将要导出内容结构包含在一个父元素下,id为pdfDom
<template>
<div class="main-container">
.....
<div id="pdfDom">
<!--需要导出的内容-->
.....
</div>
</div>
</template>
<style>
// 由于导出的这部分html结构是不想让用户看到的,所以我设置了父元素height:100vh,overFlow:hidden; 想要显示的内容正好占据一屏高度
.main-container {
width: 100%;
height: 100vh;
overflow: hidden;
}
</style>
javascript
- 由于 地图上覆盖物有的是svg实现的,而html2canvas不能处理svg,所以,首先先将导出的html中的svg转成canvas
async loadImg(src) {
return new Promise((resolve, reject) => {
const img = new Image()
img.src = src
img.setAttribute('crossOrigin', 'anonymous')
img.onload = () => resolve(img)
img.onerror = () => resolve(img)
})
},
async svg2Canvas() {
const svgTags = document.querySelector('#pdfDom'