用html2canvas和jspdf实现将html转成pdf下载到本地

本文介绍了一种解决从网页导出图片到PDF时出现模糊和偏移问题的方法,通过使用html2canvas、jspdf等工具,实现图片在PDF中的清晰呈现和正确定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决了下载的图片会模糊和偏移的问题

<script src="${basePath!}/js/bluebird.js"></script>
<script src="${basePath!}/js/jspdf.debug.js"></script>
<script src="${basePath!}/js/html2canvas.js"></script>
<script>
$(function() {
	
	$("#download").click(function(){  
		var copyDom = $("#first");// 这个dom元素是要导出pdf的div容器
	    var width = copyDom.width();//dom宽
	    var height = copyDom.height();//dom高
	    var scale = 2;//放大倍数
	    var canvas = document.createElement('canvas');
	    canvas.width = width*scale;//canvas宽度
	    canvas.height = height*scale;//canvas高度
	    var content = canvas.getContext("2d");
	    content.scale(scale,scale);
	    var rect = copyDom.get(0).getBoundingClientRect();//获取元素相对于视察的偏移量
	    content.translate(-rect.left,-rect.top-36);//设置context位置,值为相对于视窗的偏移量负值,让图片复位
	    html2canvas(copyDom, {
	        dpi: window.devicePixelRatio*2,
	        scale:scale,
	        canvas:canvas,
	        width:width,
	        heigth:height,
	    }).then(function (canvas) {
	    	var contentWidth = canvas.width;
	        var contentHeight = canvas.height;
	        //一页pdf显示html页面生成的canvas高度;
	        var pageHeight = contentWidth / 592.28 * 841.89;
	        //未生成pdf的html页面高度
	        var leftHeight = contentHeight;
	        //页面偏移
	        var position = 0;
	        //a4纸的尺寸[595.28,595.28],html页面生成的canvas在pdf中图片的宽高
	        var imgWidth = 595.28;
	        var imgHeight = 592.28/contentWidth * contentHeight;
	        var pageData = canvas.toDataURL('image/jpeg', 1.0);
	        //element.append(canvas)
	        var pdf = new jsPDF('', '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');  
	 
	    });
	      
	})

bluebird.js文件解决了ie下不支持promise的问题

有几个注意的地方:

1.下载的时候,图片最好都是背景图

2.图片不能是远程的

完美~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值