場景
導出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’}是存在缺陷的,存在中文轉譯、內容不全的問題