首页 > 其他分享 >echarts export three types picture: png、html、svg

echarts export three types picture: png、html、svg

时间:2023-03-29 09:44:33浏览次数:37  
标签:picture canvas const svg image three var images pdf

import './styles.css'
import echarts from 'echarts'
import { saveAs } from 'file-saver'
import JSPDF from 'jspdf'
import { init } from 'canvas-to-blob'

init()

function exportImage(images) {
  const canvas = mergeCanvas(images)
  canvas.toBlob(blob => {
    saveAs(blob, 'exports-captcha.png')
  })
}

function exportHtml(images) {
  const canvas = mergeCanvas(images)
  const imageUrl = canvas.toDataURL('image/png', 1)
  var blob = new Blob(
    [
      `<!DOCTYPE html>
  <html>
    <head>
      <title>测试导出标题</title>
      <meta charset="UTF-8" />
    </head>
    <body>
      <img src="${imageUrl}" alt="测试导出标题">
    </body>
  </html>
  `
    ],
    { type: 'text/html;charset=utf-8' }
  )
  saveAs(blob, 'exports.html')
}

function exportPdf(images) {
  const pdf = new JSPDF()
  const canvas = mergeCanvas(images)
  const imageUrl = canvas.toDataURL('image/png', 1)
  pdf.text('Hello world!', 10, 10)
  pdf.addImage(imageUrl, 'png', 0, 20)
  pdf.save('exports.pdf')
}

function mergeCanvas(images) {
  var canvas = document.createElement('canvas')
  var [maxH, maxW] = images.reduce(
    (ac, image) => {
      ac[0] = ac[0] + image.getHeight()
      if (image.getWidth() > ac[1]) ac[1] = image.getWidth()
      return ac
    },
    [0, 0]
  )
  canvas.width = maxW
  canvas.height = maxH

  var context = canvas.getContext('2d')
  var top = 0,
    left = 0
  images.forEach(image => {
    const [w, h] = [image.getWidth(), image.getHeight()]
    context.drawImage(image.getRenderedCanvas(), left, top, w, h)
    top += h
  })
  return canvas
}

var myChart2 = echarts.init(document.getElementById('canvas2'))
var myChart = echarts.init(document.getElementById('canvas'))

function initLineChart() {
  var option = {
    xAxis: {
      type: 'category',
      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
      type: 'value'
    },
    series: [
      {
        data: [820, 932, 901, 934, 1290, 1330, 1320],
        type: 'line'
      }
    ]
  }

  // 使用刚指定的配置项和数据显示图表。
  myChart2.setOption(option)
}

function initBarChart() {
  var option = {
    title: {
      text: 'ECharts 入门示例'
    },
    tooltip: {},
    legend: {
      data: ['销量']
    },
    xAxis: {
      data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
    },
    yAxis: {},
    series: [
      {
        name: '销量',
        type: 'bar',
        data: [5, 20, 36, 10, 10, 20]
      }
    ]
  }

  // 使用刚指定的配置项和数据显示图表。
  myChart.setOption(option)
}

document.getElementById('export-image').onclick = () => exportImage([myChart, myChart2])
document.getElementById('export-html').onclick = () => exportHtml([myChart, myChart2])
document.getElementById('export-pdf').onclick = () => exportPdf([myChart, myChart2])

initLineChart()
initBarChart()

 

标签:picture,canvas,const,svg,image,three,var,images,pdf
From: https://www.cnblogs.com/liweize/p/17267636.html

相关文章

  • ThreeSum
    packageAigorithmStudy.DoublePointer;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;/***15.三数之和*给你一个整数数组num......
  • threejs加载带材质的fbx格式模型
    threejs加载带材质的fbx格式模型loadFBX(){letmanager=newLoadingManager();manager.addHandler(/\.tga$/i,newTGALoader());......
  • 记录--用three.js渲染真实的下雨效果
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助建模首先我们需要一些贴图素材贴图素材一般可以在3dtextures网站上找到,这里我找了2份,包含了墙的法线贴......
  • parcel工具搭建three.js开发环境及报错填坑
    parcel工具搭建three.js开发环境今天用parcel工具搭建了一个threejs开发环境,遇到了一点小坑,简单的做一个记录。首先贴出正确的操作姿势mkdirthreeJsDemocdthreeJsdem......
  • threejs之检测拖动模型和停止拖动模型以及鼠标缩放事件
       controls.value.addEventListener('start',startEvent) controls.value.addEventListener('end',endEvent); 这样子给轨道控制器绑定事件后即可。......
  • 记录--我在前端干工地(three.js)
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前段时间接触了Three.js后,试着用他加载了一些模型three.js初体验简陋的了解了一下three.js的相关使用,并......
  • SVG、Canvas、WebGL对比
    SVG使用XML描述2D图形SVG中的元素和HTML元素一样,在输出图形前需要经过浏览器引擎的解析、布局计算和生成DOM树(SVG元素太多时非常消耗性能),可以添加事件SVG对象的属性发......
  • threejs点击事件(不同大小的画布)
     threejs点击事件(不同大小的画布) 一、直接是window宽高的画布,点击交互的方案onClick(event){event.preventDefault();this.mouse.x=(event.clie......
  • three.js加载环境贴图
     three.js加载环境贴图 HDR的全称是HighDynamicRange,即高动态范围;动态范围是指图像中所包含的从“最亮”至“最暗”的比值,也就是图像从“最亮”到“最暗”之间灰度......
  • svg基础及示例
    SVG可缩放矢量图形(ScalableVectorGraphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG是W3C制定的一种新的二维矢量图形格式,也是规范中的网络矢量......