vue使用html2canvas报错:The image argument is a canvas element with a width or height of 0.

vue使用html2canvas报错

在这里插入图片描述
最近这两天,因为项目需要将特定的网页保存为pdf,看网上的代码感觉都前篇一律,可能是页面中的数据都是axios异步请求出来的,导出为pdf要不就是空白要不就是报图上的错误,后面解决了,看下面代码。

*注:导出pdf想要两边留间距,就修改imgWidth,并且在addImage时x方向参数设置你要的边距,a4纸正常宽度是595.28,我这里两边留了20的间距,所以减了一个40,具体代码如下

var element = document.getElementById('report')
      html2canvas(element, {
        foreignObjectRendering: true, // 最主要是这句话,官方给出解释是否在浏览器支持的情况下使用ForeignObject渲染,
        async: false, // 同步执行
        x: 0, //裁剪画布x坐标 (导出的时候位置不太对,使用这个属性完美解决)
        y: 0,
        useCORS: true, // 设置 useCORS 为 true,即可开启图片跨域
        background: '#FFFFFF', // 默认为黑色,将 background 为其他颜色
      }).then(function (canvas) {
        var contentWidth = canvas.width
        var contentHeight = canvas.height
        var imgWidth = 555.28
        // 一页pdf显示html页面生成的canvas高度;
        var pageHeight = contentWidth / imgWidth * 841.89
        // 未生成pdf的html页面高度
        var leftHeight = contentHeight
        // 页面偏移
        var position = 0
        // a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
   
      var imgHeight = imgWidth / contentWidth * contentHeight

        var pageData = canvas.toDataURL('image/jpeg', 1.0)

        var pdf = new jsPDF('', 'pt', 'a4')

        // 有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
        // 当内容未超过pdf一页显示的范围,无需分页
        if (leftHeight < pageHeight) {
          pdf.addImage(pageData, 'JPEG', 20, 0, imgWidth, imgHeight)
        } else {
          while (leftHeight > 0) {
            pdf.addImage(pageData, 'JPEG', 20, position, imgWidth, imgHeight)
            leftHeight -= pageHeight
            position -= 841.89
            // 避免添加空白页
            if (leftHeight > 0) {
              pdf.addPage()
            }
          }
        }
        pdf.save('stone.pdf')
      })
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值