如何使用canvas保存网页为pdf文件支持跨域

这篇文章给大家分享的是有关如何使用canvas保存网页为pdf文件支持跨域的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

使用canvas保存网页为pdf文件支持跨域

如何使用canvas保存网页为pdf文件支持跨域

正文

需求:用户点击下载,将页面保存为PDF文件并下载。

思路:继续使用Canvas截图后将画布内容转换为pdf文件。

首先我们需要引入js文件jspdf.debug.js 下载路径 https://github.com/MrRio/jsPDF

引入canvas的js文件,js文件获取地址官网主页:http://html2canvas.hertzen.com/

<scripttype="text/javascript"src="js/html2canvas.js"></script>
<scripttype="text/javascript"src="js/html2canvas.min.js"></script>
<scripttype="text/javascript"src="js/jspdf.debug.js"></script>

div按钮代码

<divid="down_pdf">导出为PDF按钮</div>
<divclass="sta-main">需要获取为PDF的div</div>

jsp代码

<scripttype="text/javascript">
/*vardownPdf=document.getElementById("down_pdf");*/
vardownPdf=document.getElementById("down_pdf");
$("#down_pdf").on("click",function(){
varcanvas2=document.createElement("canvas");
let_canvas=document.querySelector('.sta-main');
//获取宽高
varw=parseInt(window.getComputedStyle(_canvas).width);
varh=parseInt(window.getComputedStyle(_canvas).height);
//将canvas画布放大2倍,然后盛放在小的容器内,处理模糊
canvas2.width=w*2;
canvas2.height=h*2;
canvas2.style.width=w+"px";
canvas2.style.height=h+"px";
varcontext=canvas2.getContext("2d");
//处理偏移
context.scale(1.5,1.5);
//修改背景颜色,默认是黑色
$('.sta-main').css("background","#fff")
html2canvas(_canvas,{
//处理pdf跨域获取不到跨域信息问题
taintTest:false,
useCORS:true,
allowTaint:false,
canvas:canvas2,
dpi:172,//导出pdf清晰度
onrendered:function(canvas){
varcontentWidth=canvas.width;
varcontentHeight=canvas.height;
//一页pdf显示html页面生成的canvas高度;
varpageHeight=contentWidth/592.28*841.89;
//未生成pdf的html页面高度
varleftHeight=contentHeight;
//pdf页面偏移
varposition=0;
//html页面生成的canvas在pdf中图片的宽高(a4纸的尺寸[595.28,841.89])
varimgWidth=595.28;
varimgHeight=592.28/contentWidth*contentHeight;
varpageData=canvas.toDataURL('image/jpeg',1.0);
varpdf=newjsPDF('','pt','a4');
//有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
//当内容未超过pdf一页显示的范围,无需分页
if(leftHeight<pageHeight){
pdf.addImage(pageData,'JPEG',0,0,imgWidth,imgHeight);
}else{
while(leftHeight>0){
pdf.addImage(pageData,'JPEG',0,position,imgWidth,imgHeight)
leftHeight-=pageHeight;
position-=841.89;
//避免添加空白页
if(leftHeight>0){
pdf.addPage();
}
}
}
pdf.save('PDF的名字.pdf');
}
})
$('.sta-main').css("background","")
})
</script>

此次网页改为PDF,与上次截图网页为PNG,使用同一种技术,都是先使用Canvas截图画布后转格式。

同样也有偏移、模糊、跨域等问题,使用之前的代码来处理。

转换pdf会让背景色变为黑色使用css样式改一下背景色就可以了。

完美转换为pdf。

感谢各位的阅读!关于“如何使用canvas保存网页为pdf文件支持跨域”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

发布于 2021-05-30 14:08:32
收藏
分享
海报
0 条评论
175
上一篇:微信小程序如何使用canvas绘制钟表 下一篇:WPF中InkCanvas基本操作方法的示例分析
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码