场景
导出SVG矢量图置入Word文档中
思路
- 先将图表渲染为SVG,
echarts.init
设置为svg渲染
var chart = echarts.init(containerDom, null, {renderer: 'svg'})
- 使用blob包裹svg标签导出svg文件
实现
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0">
<title>Title</title>
<script src="https://cdn.bootcss.com/echarts/4.2.1-rc1/echarts.min.js"></script>
</head>
<body>
<a id="download" href="">下载</a>
<div id="main" style="width: 800px;height:600px;"></div>
<script>
const a = window.document.querySelector('#download')
a.addEventListener('click',()=>{
const content = document.querySelector('svg').outerHTML
const blob= new Blob([content], {type: 'xml/svg'})
a.href = URL.createObjectURL(blob)
a.download = 'test.svg'
})
var myChart = echarts.init(document.querySelector('#main'), null, {renderer: 'svg'});
// 指定图表的配置项和数据
var data = [];
for (var i = 0; i <= 360; i++) {
var t = i / 180 * Math.PI;
var r = Math.sin(2 * t) * Math.cos(2 * t);
data.push([r, i]);
}
var option = {
title: {
text: '极坐标双数值轴',
backgroundColor: '#fff'
},
legend: {
data: ['line']
},
polar: {
center: ['50%', '54%']
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross'
}
},
angleAxis: {
type: 'value',
startAngle: 0
},
radiusAxis: {
min: 0
},
series: [{
coordinateSystem: 'polar',
name: 'line',
type: 'line',
showSymbol: false,
data: data
}],
animationDuration: 2000
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
</script>
</body>
</html>
踩的坑
-
导出的SVG文件在浏览器打开时是没有问题的,但是在word或者图片阅读器打开时,title和legend是一个黑框框。
原因:没有设置title和legend的背景色,svg为透明背景,所以是黑色 -
用WPS置入该SVG图片,会错位。
原因:WPS对导出的SVG文件兼容性不足,使用office2016以上才支持插入SVG图片,最好是最新版本 -
使永saveAsImage:{type: ‘svg’}是存在缺陷的,存在中文转译、内容不全的问题