如何在Vue JS中使用html2canvas?

时间:2018-03-20 17:10:28

标签: javascript vue.js html2canvas

我遇到的第一个障碍是Vue中没有document.getElementById的简写,所以我实现了function like this one。我面临的第二个障碍是,在处理没有<!DOCTYPE html><body>的情况时,恕我直言html2canvas docs非常有限。

以下是我的.vue文件中的标记摘要:

<template>
   <div>
      <md-layout>
         <div id="capture" class='m1 '>
            // more markup...
         </div>
      </md-layout>
   </div>
</template>

这就是我试图实现捕获功能的方法:

//Vue equivalent for document.getElementById
showCaptureRef() {
   console.log(this.$refs.capture);
},
// Screen capture function
downloadVisualReport () {
  let vc = this
  alert("Descargando reporte visual")
  html2canvas(vc.showCaptureRef).then(canvas => {
      vc.document.body.appendChild(canvas)
  }).catch((error) => {
    console.log("Erorr descargando reporte visual")
    alert("Error descargando el reporte visual")
  });
},

3 个答案:

答案 0 :(得分:0)

我明白了,我有两个错误:

首先,我有id='capture'而不是ref="capture"

其次,此行vc.document.body.appendChild(canvas)需要更改为document.body.appendChild(canvas)

这是将此类画布下载为图像的函数的最终代码:

downloadVisualReport () {
  let vc = this
  let filename = 'Reporte de ' + vc.campaign.name + '.png'; 
  html2canvas(vc.showCaptureRef()).then(canvas => {  
      vc.saveAs(canvas.toDataURL(), filename);      
  }).catch((error) => {
    alert("Error descargando el reporte visual")
  });
},

答案 1 :(得分:0)

对于未来的读者。试试这个vue-html2canvas mixin。

<template>
  <div>
    <!-- SOURCE -->
    <div ref="printMe">
      <h1>Print me!</h1>
    </div>
    <!-- OUTPUT -->
    <img :src="output">
  </div>
<teplate>

<script>
export default {
  data() {
    return {
      output: null
    }
  },
  methods: {
    print() {
      const el = this.$refs.printMe;
      // add option type to get the image version
      // if not provided the promise will return 
      // the canvas.
      const options = {
        type: 'dataURL'
      }
      this.output = await this.$html2canvas(el, options);
    }
  }
}
</script>

答案 2 :(得分:0)

const [groupZero, groupOne, groupTwo, groupThree, groupFour] = groupData;