canvas节点无法导出图片_HTML转为PDF,图片导出失败的终极解决方案

博客介绍了在将HTML页面导出为PDF时遇到的图片导出失败问题,尤其是canvas节点中的图片。作者通过分析发现是由于同源策略导致的跨域请求图片失败。尝试了多种方案,包括使用nodeJS下载图片、修改img标签src、XMLHttpRequest下载图片等,最终成功解决了问题。提供了完整的JavaScript代码实现。
摘要由CSDN通过智能技术生成

如题项目有需求将一个页面导出为pdf,然而页面中的图片却始终无法导出成功

一、导出的方法

查询了许多大佬的帖子,找到了如下导出的方法

const PdfDownload = function(domId) {var targetDom = $('#'+domId)//把需要导出的pdf内容clone一份,这样对它进行转换、微调等操作时才不会影响原来界面

var copyDom =targetDom.clone()//新的div宽高跟原来一样,高度设置成自适应,这样才能完整显示节点中的所有内容(比如说表格滚动条中的内容)

copyDom.width(targetDom.width() + 'px')

copyDom.height(targetDom.height()+200 + 'px')

$('body').append(copyDom)//ps:这里一定要先把copyDom append到body下,然后再进行后续的glyphicons2canvas处理,不然会导致图标为空

//svg2canvas(copyDom)

//loadImg(copyDom)

html2canvas(copyDom, {

onrendered:function(canvas) {var imgData = canvas.toDataURL('image/jpeg')var img = newImage()

img.src=imgData//根据图片的尺寸设置pdf的规格,要在图片加载成功时执行,之所以要*0.225是因为比例问题

img.onload = function() {//此处需要注意,pdf横置和竖置两个属性,需要根据宽高的比例来调整,不然会出现显示不完全的问题

if (this.width > this.height) {var doc = new jsPDF('l', 'mm', [this.width * 0.225, this.height * 0.225])

}else{var doc = new jsPDF('p', 'mm', [this.width * 0.225, this.height * 0.225])

}

doc.addImage(imgData,'jpeg', 0, 0, this.width * 0.225, this.height * 0.225)//根据下载保存成不同的文件名

doc.save('pdf_' + new Date().getTime() + '.pdf')

}//删除复制出来的div

copyDom.remove()

},

background:'#FFF',//这里给生成的图片默认背景,不然的话,如果你的html根节点没设置背景的话,会用黑色填充。

allowTaint: true //避免一些不识别的图片干扰,默认为false,遇到不识别的图片干扰则会停止处理html2canvas

})

}

二、初步测试的结果

有了上面的方法当然迫不及待的进行测试-- 测试导出页面如下

导出成功结果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值