最近有業務需求要將某個頁面生成圖片然后將圖片導出,然后我選擇用html2canvas進行圖片生成.
首先安裝html2canvas
npm install html2canvas --save
然后在需要使用的頁面導入html2canvas
import html2canvas from 'html2canvas';
生成圖片及導出的代碼如下
<template> <el-dialog id="dialog"> <el-table></el-table> <img /> <el-button @click="printReport">導出報告</el-button> </el-dialog> </template> export default { methods: { printReport() { html2canvas(document.getElementById('dialog'), { backgroundColor: 'white', useCORS: true, //支持圖片跨域 scale: 1, //設置放大的倍數 }) .then((canvas) => { // 生成圖片導出 const a = document.createElement('a'); a.href = canvas.toDataURL('image/png'); a.download = this.title; a.click(); }) } } }
結果因為頁面有表格有圖片內容比較多,出現了縱向的滾動條,截圖出來的效果只能截取到視圖窗口顯示的部分,超出窗口部分則無法生成.我查了一些資料基本都是建議加上以下代碼,在生成圖片前讓頁面滾動到最頂端.
window.pageYoffset = 0; document.documentElement.scrollTop = 0; document.body.scrollTop = 0;
但是不知道什么原因,我加上這三行代碼依然無法成功.沒辦法我只能再去翻html2canvas的文檔,研究與高度相關的屬性,最后在設置了如下兩個屬性后問題終於得到解決!
html2canvas(document.getElementById('dialog'), { backgroundColor: 'white', useCORS: true, //支持圖片跨域 scale: 1, //設置放大的倍數 height: document.getElementById('dialog').scrollHeight, windowHeight: document.getElementById('dialog').scrollHeight })