Echarts导出SVG矢量图

场景

导出SVG矢量图置入Word文档中

思路

  1. 先将图表渲染为SVG,echarts.init设置为svg渲染
var chart = echarts.init(containerDom, null, {renderer: 'svg'})
  1. 使用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>

踩的坑

  1. 导出的SVG文件在浏览器打开时是没有问题的,但是在word或者图片阅读器打开时,title和legend是一个黑框框。
    原因:没有设置title和legend的背景色,svg为透明背景,所以是黑色

  2. 用WPS置入该SVG图片,会错位。
    原因:WPS对导出的SVG文件兼容性不足,使用office2016以上才支持插入SVG图片,最好是最新版本

  3. 使永saveAsImage:{type: ‘svg’}是存在缺陷的,存在中文转译、内容不全的问题

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章