echarts自定义下载图表

// 全局注册bus
const bus = new Vue()
Vue.prototype.$bus = bus
// 导出图片  可以自定义一些样式
export function exportImg(myChart, name) {
  var img = new Image()
  img.src = myChart.getDataURL({
    type: 'png',
    pixelRatio: 1, // 放大1倍
    backgroundColor: '#fff'
  })
  img.onload = () => {
    var canvas = document.createElement('canvas')
    canvas.width = img.width
    canvas.height = img.height
    var ctx = canvas.getContext('2d')
    ctx.drawImage(img, 0, 0)
    var dataURL = canvas.toDataURL('image/png')
    var a = document.createElement('a')
    // 创建一个单击事件
    var event = new MouseEvent('click')
    // 将a的download属性设置为我们想要下载的图片名称
    a.download = name
    // 将生成的URL设置为a.href属性
    a.href = dataURL
    // 触发a的单击事件
    a.dispatchEvent(event)
  }
}
// 公用导出图片或者excel的方法(默认图片背景颜色是黑色,暂时还没有研究怎么给背景颜色)
export function downFileBlob(fileData, fileType, fileName) {
  let blobData = fileData
  let contentType = ''
  if (fileType === 'image') {
    //图片
    let parts = fileData.split(';base64,');
    contentType = parts[0].split(':')[1];
    let raw = window.atob(parts[1]);
    let rawLength = raw.length;
    let uInt8Array = new Uint8Array(rawLength);
    for (let i = 0; i < rawLength; ++i) {
      uInt8Array[i] = raw.charCodeAt(i);
    }
    blobData = uInt8Array
  } else if (fileType === 'excel') {
    contentType = 'application/vnd.ms-excel'
  }

  const link = document.createElement('a')
  let blob = new Blob([blobData], {
    type: contentType
  })
  link.style.display = 'none'
  link.href = URL.createObjectURL(blob)

  link.download = fileName
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
}
// 图表公用组件(主要是拿到this.chart = 实例化echarts)
mounted() {
   // this.$nextTick(() => {
   //   this.initChart()
   // })
   this.$bus.$on('exportImage', this.exportImage)
 },
 beforeDestroy() {
   // if (!this.chart) {
   //   return
   // }
   // this.chart.dispose()
   this.$bus.$off('exportImage', this.exportImage)
   // this.chart = null
 },
 methods: {
   exportImage(res) {
     const fileName = res.fileName || 'img'
     if (this.chart) {
     // downFileBlobl来自公用导出图片或者excel的方法
       downFileBlob(this.chart.getDataURL(), 'image', fileName)
     }
   },
 }
// 调用
this.$bus.$emit('exportImage', 'image', { fileName: '导出之后文件的名称' })
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值