当前位置: 首页 > Web前端 > HTML

jspdf+html2canvashtml转pdf(高分辨率版)

时间:2023-04-02 19:15:08 HTML

刚刚解决了html中div块生成pdf的问题,火爆,赶紧记录下介绍的js传送门:https://cdnjs.cloudflare。com/ajax/libs/jspdf/1.0.272/jspdf.debug.jshttps://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.js步进记录:1.生成的pdf中,dom元素的间距异常;2.增加分辨率后,生成的图片有偏差HTML语句:...

点击下载pdf的方法:download(){varelement=$("#demo");//这个dom元素是导出pdf的div容器varw=element.width();//获取容器的宽度varh=element.height();//获取容器的高度varoffsetTop=element.offset().top;//获取容器到文档顶部的距离varoffsetLeft=element.offset().left;//获取容器到文档最左边的距离varcanvas=document.createElement("canvas");绝对变量=0;varwin_i=$(window).width();//获取当前可见窗口的宽度(不包括滚动条)varwin_o=window.innerWidth;//获取当前窗口的宽度(包括滚动条)if(win_o>win_i){abs=(win_o-win_i)/2;//获取滚动条长度的一半}canvas.width=w*2;//将canvas的宽度和高度加倍。高度=h*2;var上下文=画布。getContext("2d");合作社ntext.scale(2,2);context.translate(-offsetLeft-abs,-offsetTop);//这里默认是没有水平滚动条的,因为offset.left()在没有滚动条的时候是有区别的,所以//翻译的时候要把这个区别去掉html2canvas(element).then(function(canvas){varcontentWidth=canvas.width;varcontentHeight=canvas.height;//一页pdf显示html页面高度生成的canvas;varpageHeight=contentWidth/592.28*841.89;//html页面高度没有pdf生成varleftHeight=contentHeight;//页面偏移varposition=0;//a4纸的尺寸[595.28,841.89],生成的html页面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(leftHeight0){pdf.addImage(pageData,'JPEG',0,posi化,imgWidth,imgHeight)leftHeight-=pageHeight;头寸-=841.89;//避免添加空白页if(leftHeight>0){pdf.addPage();}}}pdf.save('我的简历.pdf');})}一开始是想着偷懒,结果没过审。这种方法生成的pdf有一个很大的问题,就是生成的文件(尤其是提高分辨率后)都是几百千字节大小。一些内容基本上将近1mb。还没有找到解决方案。以后如果发现了,会加上8.13的更新:html2canvas(demo).then..=>改成html2canvas(element).then...还有一个就是转换后的容器的背景色要设置成白色,否则生成的pdf的空白区域默认是黑色的,写一个可行的demo,等贴出地址githubdemo地址:https://github.com/haryzxw/de...