使用 window.print() 时将 DOM 中的 canvas 转为 image

  最近有个导出 pdf 的需求,尝试过程中遇到了 window.print() 导出时,内容区域有 echarts 图表,图表区域是个 canvas,导出后的 pdf 文件中 canvas 区域空白,记录一下解决方法。

一、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const oldInnerHtml = window.document.body.innerHTML

const mainCanvas = document.getElementsByTagName('canvas')[0]
const mainRef = this.$refs['mainRef']

// 将 canvas 转为图片
const mainImg = new Image()
const mainImgSrc = mainCanvas.toDataURL('image/png')
mainImg.src = mainImgSrc

// 图片加载完成后
mainImg.onload = () => {
mainRef.innerHTML = `<img src=${ mainImgSrc }>` // 用图片替换 canvas

window.document.body.innerHTML = this.$refs['reportPdfRef'].innerHTML
window.print()
window.document.body.innerHTML = oldInnerHtml
// window.location.reload() // 或者刷新页面
}

注意事项

注意

  • 1、导出正常 pdf 后原先的 canvas 区域会空白
  • 2、通过window.location.reload()可解决上一条问题,但是会刷新页面
以上

随笔标题:使用 window.print() 时将 DOM 中的 canvas 转为 image

随笔作者:刘先玉

发布时间:2020年09月30日 - 17:32:40

最后更新:2020年09月30日 - 17:32:40

原文链接:https://liuxianyu.cn/article/window-print-canvas-image.html