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

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