js实现将html转化成pdf【基于浏览器端插件jsPDF】 - Go语言中文社区

js实现将html转化成pdf【基于浏览器端插件jsPDF】


效果图:

1. 先导入插件的两个js

<script src="${baseResourcePath}/js/pdf/html2canvas.js"></script>
<script src="${baseResourcePath}/js/pdf/jspdf.debug.js"></script>

下载地址:https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js

                  https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js

2. html2canvas官方示例

html2canvas(document.body).then(function(canvas) {
    document.body.appendChild(canvas);
});

3. 根据示例写自己需要的js

效果图代码:(不支持分页)

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<script src="js/jquery.min.js"></script>
		<script src="js/pdf/html2canvas.js"></script>
		<script src="js/pdf/jspdf.debug.js"></script>
	</head>
	<style>
		.div1 {
			width: 100%;
			height: 1100px;
		}
		
		.btn {
			width: 100px;
			height: 34px;
			font-size: 14px;
			font-family: PingFangSC-Regular;
			color: rgba(255, 255, 255, 1);
			background: rgba(76, 132, 255, 1);
			border-radius: 2px;
			border: 1px solid rgba(76, 132, 255, 1);
			padding: 0px;
			text-align: center;
			line-height: 34px;
		}
		
		.title {
			font-size: 20px;
			font-weight: bold;
		}
		
		.ccontent {
			font-size: 16px;
		}
		
		.img {
			float: left;
			width: 300px;
			height: 300px;
		}
		
		#exportdata {
			background: cornsilk;
			width: 50%;
			height: 100%;
		}
	</style>

	<body>
		<div class="div1">
			<div class="btn" onclick="exportData()">导出pdf</div>
			<div id="exportdata">
				<div class="title">SQL 是一种标准 - 但是... </div>
				<div class="ccontent">SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。SQL 语句用于取回和更新数据库中的数据。 SQL 可与数据库程序协同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他数据库系统。 不幸地是,存在着很多不同版本的 SQL 语言,但是为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的关键词 (比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。 注释:除了 SQL 标准之外,大部分 SQL 数据库程序都拥有它们自己的私有扩展!</div>
				<img src="img/哈哈.jpg" class="img">
				<img src="img/chaiquan.jpg" class="img">
			</div>
		</div>
	</body>

</html>
<script>
	function exportData() {
		html2canvas(document.getElementById("exportdata"), {//到导出的部分的id
			onrendered: function(canvas) {
				var imgData = canvas.toDataURL('image/jpeg');
				//初始化pdf,设置相应格式
				var doc = new jsPDF("p", "mm", "a4");

				//这里设置的是a4纸张尺寸
				doc.addImage(imgData, 'JPEG', 0, 0, 210, 297);

				//保存时的文件名,自行设置,这里输出保存命名为www.pdf
				doc.save('www.pdf');
			}
		});
	}
</script>

注意:导出的pdf默认的背景为黑色,最好给要导出的部分一个背景色。

4. 支持分页的方法

function exportData() {
		html2canvas(document.getElementById("exportdata"), {
				onrendered: 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;
					//pdf页面偏移
					var position = 0;
					//a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
					var imgWidth = 595.28;
					var imgHeight = 592.28 / contentWidth * contentHeight;

					var pageData = canvas.toDataURL('image/jpeg', 1.0);

					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('www.pdf');
				});
		}

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/animatecat/article/details/82352101
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 20:42:16
  • 阅读 ( 1134 )
  • 分类:前端

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢