- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
使用html2canvas截图不全问题的解决办法
目录实现方法遇见问题具体封装代码总结
实现方法
利用html2canvas工具将html转为图片流npminstallhtml2canvas
利用jspdf工具将图片流转为pdf并保存npminstalljspdf
遇见问题
1、截图不全
之前没用过这个,网上找了代码之后发现有滚动条的情况下会截图不全,仅能展示出当前页面展示出来的内容,类似于这种情况,这是带滚动条的html,第一张和第二张分别为滚动条在顶部以及在底部的展现
下载成pdf之后分别为这样,只有窗口展示的部分,滚动条以外的内容没有
百度之后有让改参数的,也有让滚动条滚至顶部的,感觉都不是我的问题,直觉说是元素高度哪里有问题,原来的页面元素是这么写的,对比下载后的文件,内容高度大概和最外面的div高度是一样的,外面盒子的高度又是固定的,本人就试了下在里面再加一个div,且不设置高度,让其高度完全由内容撑开,问题就解决了
divid=pdfDom_children//这里是滚动的div
div/div
div/div
div111/div
/div
修改后的页面元素
div
divid=pdfDom_children
div/div
div/div
div111/div
/div
/div
具体封装代码
//导出页面为PDF格式
importhtml2canvasfromhtml2canvas;
importJsPDFfromjspdf;
consthtmlToPdf={
getPdf(title:string){
consttargetDom=document.getElementById(pdfDom_children);
html2canvas(document.querySelector(#pdfDom_children),{
allowTaint:true,
backgroundColor:white,
useCORS:true,//支持图片跨域
scale:1,//设置放大的倍数
//height:targetDom.clientHeight,//网上原来的设置,没用,注释掉了
//width:targetDom.clientWidth,//网上原来的设置,没用,注释掉了
//windowHeight:targetDom.clientHeight,//网上原来的设置,没用,注释掉了
}).then((canvas)={
//内容的宽度
constcontentWidth=canvas.width;
//内容的高度
constcontentHeight=canvas.height;
//一页pdf显示htm1页面生成的canvas高度,a4纸的尺寸[595.28,841.89];
constpageHeight=(contentWidth/592.28)*841.89;
//未生成pdf的htm1页面高度
letleftHeight=contentHeight;
//页面偏移
letposition=0;
//a4纸的尺寸[595.28,841.89],htm1页面生成的canvas在pdf中图片的宽高
constimgwidth=595.28;
constimgHeight=(592.28/contentWidth)*contentHeight;
//canvas转图片数据
constpageData=canvas.toDataURL(img/jpeg,1.0);
//新建JSPDF对象
constPDF=newJsPDF(,pt,a4);
if(leftHeightpageHeight){
PDF.addImage(pageData,JPEG,0,0,imgwidth,imgHeight);
}else{
while(leftHeight0){
PDF.addImage(pageData,JPEG,0,position,imgwidth,i
文档评论(0)