HTML页面实现打印时有水印功能

本文档包含 水印背景图片、水印背景文字 2 种功能实现。

以下 2 种方法实现了打印附带水印,浏览页面是不显示水印功能。并可很简单就改成在以上 2 种状态时都显示水印的状态。

1、水印图片

    实现思路:使用 img 标签引入图片作为水印图

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title>Document</title>
	<style type="text/css" media="screen">
		body {
			background-color: #eee;
		}

		#two {
			width: 640px;
			height: 840px;
			margin: 0 auto;
			padding: 10px 15px;
			background-color: #FFFFFF;
			margin-top: 10px;
			position: relative;
			z-index: 1;
		}

		#two-bg img {
			display: none;
		}
	</style>
	<style media="print">
		#two-bg {
			position: absolute;
			top: 0;
			right: 0;
			left: 0;
			z-index: 0;
			width: 100%;
			height: 100%;
		}

		#two-bg img {
			display: block;
			width: 300px;
			opacity: .3;
			transform: rotate(-20deg);
			-ms-transform: rotate(-20deg);
			-moz-transform: rotate(-20deg);
			-webkit-transform: rotate(-20deg);
			-o-transform: rotate(-20deg);
			margin: 0 auto;
			margin-top: 190px;
		}
	</style>
</head>

<body>
	<input type="button" name="print" value="print" onclick="javascript:testprint();" />

	<!--使用定位添加水印,正常显示网页时不显示水印图片,点击打印预览时才显示-->
	<div id="two">
		<article>
			阿Q没有家,住在未庄的土谷祠②里;也没有固定的职业,只给人家做短工,割麦便割麦,舂米便舂米,撑船便撑船。工作略长久时,他也或住在临时主人的家里,但一完就走了。所以,人们忙碌的时候,也还记起阿Q来,然而记起的是做工,并不是“行状”;一闲空,连阿Q都早忘却,更不必说“行状”了。只是有一回,有一个老头子颂扬说:“阿Q真能做!”这时阿Q赤着膊,懒洋洋的瘦

			阿Q又很自尊,所有未庄的居民,全不在他眼神里,甚而至于对于两位“文童”③也有以为不值一笑的神情。夫文童者,将来恐怕要变秀才者也;赵太爷钱太爷大受居民的尊敬,除有钱之外,就因为都是文童的爹爹,而阿Q在精神上独不表格外的崇奉,他想:我的儿子会阔得多啦!加以进了几回城,阿Q自然更自负,然而他又很鄙薄城里人,譬如用三尺三寸宽的木板做成的凳子,未庄人叫“长凳”,他也叫“长凳”,城里人却叫“条凳”,他想:这是错的,可笑!油煎大头鱼,未庄都加上半寸长的葱叶,城里却加上切细的葱丝,他想:这也是错的,可笑!然而未庄人真是不见世面的可笑的乡下人呵,他们没有见过城里的煎鱼!

			谁知道阿Q采用怒目主义之后,未庄的闲人们便愈喜欢玩笑他。一见面,他们便假作吃惊的说:哙,亮起来了。”
		</article>
		<!--图片透明 png 格式的图片-->
		<div id="two-bg">
			<img src="img/logo.jpg" />
			<img src="img/logo.jpg" />
			<img src="img/logo.jpg" />
		</div>
	</div>

	<script>
		function testprint() {
			var body = document.getElementById("two")
			document.body.innerHTML = body.innerHTML
			window.print()
		}
        // 打印后或取消后重载页面,因为打印预览弹框弹出后会导致样式爆炸
		window.onafterprint = function () {
			location.reload()
		}
	</script>
</body>

</html>

2、水印文字

    实现思路:网上找的,不大清楚

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title>Document</title>
	<style type="text/css" media="screen">
		body {
			background-color: #eee;
		}

		#two {
			margin: 0 auto;
			width: 640px;
			padding: 10px 15px;
			background-color: #fff;
			margin-top: 10px;
			position: relative;
			z-index: 1;
		}
	</style>
	<style media="print">
		input {
			display: none;
		}
		#two {
			padding: 10px 15px;
			background-color: #fff;
			margin-top: 10px;
			position: relative;
		}
	</style>
</head>

<body>
	<input type="button" name="print" value="print" onclick="javascript:testprint();" />
	<!--使用定位添加水印,正常显示网页时不显示水印图片,点击打印预览时才显示-->
	<div id="two">
		<ul>
			<li>这是第1个</li>
			<li>这是第2个</li>
			<li>这是第3个</li>
			<li>这是第4个</li>
			<li>扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩</li>
			<li>这是一大段文字照着找着做做做做做做做做做做做做做做做</li>
			<li>这是第4个</li>
			<li>扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩</li>
			<li>这是一大段文字照着找着做做做做做做做做做做做做做做做</li>
			<li>这是第4个</li>
			<li>扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩</li>
			<li>这是一大段文字照着找着做做做做做做做做做做做做做做做</li>
			<li>这是第4个</li>
			<li>扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩</li>
			<li>这是一大段文字照着找着做做做做做做扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩做做做做做做做做做</li>
			<li>这是第4个</li>
			<li>扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩</li>
			<li>这是一大段文字照着找着做做做做做做做做做做做做做做做</li>
			<li>这是第3个</li>
			<li>这是第4个</li>
			<li>扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩</li>
			<li>这是一大段文字照着找着做做做做做做做做做做做做做做做</li>
			<li>这是第4个</li>
			<li>扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩</li>
			<li>这是一大段文字照着找着做做做做做做做做做做做做做做做</li>
			<li>这是第4个</li>
			<li>扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩</li>
			<li>这是一大段文字照着找着做做做做做做做做做做做做做做做</li>
			<li>这是第4个</li>
			<li>扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩</li>
			<li>这是一大段文字照着找着做做做做做做扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩做做做做做做做做做</li>
			<li>这是第4个</li>
			<li>扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩</li>
			<li>这是一大段文字照着找着做做做做做做做做做做做做做做做</li>
		</ul>
	</div>

	<script src="js/jquery-1.8.3.min.js"></script>
	<!-- <script src="js/watermark.jquery.min.js"></script> -->
	<script type="text/javascript">

		function testprint() {
			watermark({ watermark_txt: "温州机场" })//传入动态水印内容
			window.print()
		}

		window.onafterprint = function () {
			location.reload()
		}

		function watermark(settings) {
			//默认设置
			var defaultSettings = {
				watermark_txt: "text",
				watermark_x: 100,//水印起始位置x轴坐标
				watermark_y: 20,//水印起始位置Y轴坐标
				watermark_rows: 20,//水印行数
				watermark_cols: 20,//水印列数
				watermark_x_space: 100,//水印x轴间隔
				watermark_y_space: 50,//水印y轴间隔
				watermark_color: '#bd1b21',//水印字体颜色
				watermark_alpha: 0.3,//水印透明度
				watermark_fontsize: '18px',//水印字体大小
				watermark_font: '微软雅黑',//水印字体
				watermark_width: 120,//水印宽度
				watermark_height: 80,//水印长度
				watermark_angle: 15//水印倾斜度数
			};
			//采用配置项替换默认值,作用类似jquery.extend
			if (arguments.length === 1 && typeof arguments[0] === "object") {
				var src = arguments[0] || {};
				for (key in src) {
					if (src[key] && defaultSettings[key] && src[key] === defaultSettings[key])
						continue;
					else if (src[key])
						defaultSettings[key] = src[key];
				}
			}

			var oTemp = document.createDocumentFragment();

			//获取页面最大宽度
			var page_width = Math.max(document.body.scrollWidth, document.body.clientWidth);
			//获取页面最大长度
			var page_height = Math.max(document.body.scrollHeight, document.body.clientHeight);

			//如果将水印列数设置为0,或水印列数设置过大,超过页面最大宽度,则重新计算水印列数和水印x轴间隔
			if (defaultSettings.watermark_cols == 0 ||
				(parseInt(defaultSettings.watermark_x
					+ defaultSettings.watermark_width * defaultSettings.watermark_cols
					+ defaultSettings.watermark_x_space * (defaultSettings.watermark_cols - 1))
					> page_width)) {
				defaultSettings.watermark_cols =
					parseInt((page_width
						- defaultSettings.watermark_x
						+ defaultSettings.watermark_x_space)
						/ (defaultSettings.watermark_width
							+ defaultSettings.watermark_x_space));
				defaultSettings.watermark_x_space =
					parseInt((page_width
						- defaultSettings.watermark_x
						- defaultSettings.watermark_width
						* defaultSettings.watermark_cols)
						/ (defaultSettings.watermark_cols - 1));
			}
			//如果将水印行数设置为0,或水印行数设置过大,超过页面最大长度,则重新计算水印行数和水印y轴间隔
			if (defaultSettings.watermark_rows == 0 ||
				(parseInt(defaultSettings.watermark_y
					+ defaultSettings.watermark_height * defaultSettings.watermark_rows
					+ defaultSettings.watermark_y_space * (defaultSettings.watermark_rows - 1))
					> page_height)) {
				defaultSettings.watermark_rows =
					parseInt((defaultSettings.watermark_y_space
						+ page_height - defaultSettings.watermark_y)
						/ (defaultSettings.watermark_height + defaultSettings.watermark_y_space));
				defaultSettings.watermark_y_space =
					parseInt((page_height
						- defaultSettings.watermark_y
						- defaultSettings.watermark_height
						* defaultSettings.watermark_rows)
						/ (defaultSettings.watermark_rows - 1));
			}
			var x;
			var y;
			for (var i = 0; i < defaultSettings.watermark_rows; i++) {
				y = defaultSettings.watermark_y + (defaultSettings.watermark_y_space + defaultSettings.watermark_height) * i;
				for (var j = 0; j < defaultSettings.watermark_cols; j++) {
					x = defaultSettings.watermark_x + (defaultSettings.watermark_width + defaultSettings.watermark_x_space) * j;

					var mask_div = document.createElement('div');
					mask_div.id = 'mask_div' + i + j;
					mask_div.appendChild(document.createTextNode(defaultSettings.watermark_txt));
					//设置水印div倾斜显示
					mask_div.style.webkitTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
					mask_div.style.MozTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
					mask_div.style.msTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
					mask_div.style.OTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
					mask_div.style.transform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
					mask_div.style.visibility = "";
					mask_div.style.position = "absolute";
					mask_div.style.left = x + 'px';
					mask_div.style.top = y + 'px';
					mask_div.style.overflow = "hidden";
					mask_div.style.zIndex = "9999";
					//mask_div.style.border="solid #eee 1px";
					mask_div.style.opacity = defaultSettings.watermark_alpha;
					mask_div.style.fontSize = defaultSettings.watermark_fontsize;
					mask_div.style.fontFamily = defaultSettings.watermark_font;
					mask_div.style.color = defaultSettings.watermark_color;
					mask_div.style.textAlign = "center";
					mask_div.style.width = defaultSettings.watermark_width + 'px';
					mask_div.style.height = defaultSettings.watermark_height + 'px';
					mask_div.style.display = "block";
					oTemp.appendChild(mask_div);
				};
			};
			document.body.appendChild(oTemp);
		}

	</script>
</body>

</html>

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在 JavaScript 中,可以使用以下两种方法将 HTML 页面转换为 PDF 文件: 1. 使用第三方库,如 jsPDF 或 html2canvas。 2. 使用浏览器的内置功能,如 window.print() 方法,可以将 HTML 页面转换为 PDF 文件。 下面是使用 jsPDF 的例子: ``` // 引入 jsPDF 库 import jsPDF from 'jspdf'; // 创建一个新的 jsPDF 实例 const pdf = new jsPDF(); // 设置文档的页面大小为 A4 纸张 pdf.setProperties({ title: 'HTML to PDF', subject: 'Generated PDF file using jsPDF library', author: 'Your Name', keywords: 'html, pdf, javascript', creator: 'Your Name' }); // 使用 html2canvas 库将 HTML 页面转换为 canvas 元素 html2canvas(document.querySelector('#html-to-pdf')).then(canvas => { // 将 canvas 元素转换为图像数据 const imgData = canvas.toDataURL('image/png'); // 将图像数据添加到 PDF 文档中 pdf.addImage(imgData, 'PNG', 0, 0); // 下载 PDF 文件 pdf.save('html-to-pdf.pdf'); }); ``` 使用 window.print() 方法的例子: ``` // 在点击按钮时触发打印功能 document.querySelector('#btn-print').addEventListener('click', () => { window.print(); }); ``` 在浏览器中,你可以使用快捷键 Ctrl + P 或在浏览器菜单中点击“打印”来打开浏览器的打印对话框,然后选择“保存为 PDF”即可将当前页面保存为 PDF 文件。 ### 回答2: 要将HTML页面转换为PDF,可以使用JavaScript和一些库或工具来完成。以下是一个基本的步骤: 1. 获取HTML页面的内容:使用JavaScript的内置方法(如 `querySelector`)或库(如jQuery)来获取HTML页面的内容。 2. 创建一个PDF文档:使用JavaScript中的一个PDF库,如pdfmake或jsPDF,来创建一个空的PDF文档。 3. 将HTML内容转换为PDF格式:使用HTML到PDF转换库,如html2pdf.js或html-pdf,将获取到的HTML内容转换为PDF格式,并将其添加到PDF文档中。 4. 添加其他内容(可选):如果需要,可以使用PDF库提供的方法来添加其他内容,例如页眉、页脚、水印等。 5. 下载或保存PDF文档:最后,将生成的PDF文档提供给用户下载或保存。可以使用JavaScript内置的方法(如 `a` 标签的 `download` 属性)或库(如FileSaver.js)来实现下载功能。 需要注意的是,因为转换过程可能涉及到加载和渲染HTML内容,所以可能需要处理一些异步操作和事件处理程序来确保正确的转换结果。 总结起来,使用JavaScript、PDF库和HTML到PDF转换库,我们可以实现HTML页面转换为PDF的功能。具体实现方法可以根据所选的库和工具来调整,并根据具体需求进行扩展和定制。 ### 回答3: 将HTML页面转换为PDF是一种常见的需求,可以通过JavaScript来实现。下面是一种实现方法: 1. 首先,使用JavaScript中的HTML5 `canvas` 元素创建一个空白的画布。一个画布是一个可以用于进行绘制和呈现图像的容器。 2. 然后,使用 `html2canvas` 库将HTML页面的内容绘制到画布上。该库可以将整个HTML页面或指定的元素转换为图像并渲染在画布上。 3. 接下来,使用 `jsPDF` 库创建一个PDF文档对象。该库提供了一系列API,可以用于创建和编辑PDF文档。 4. 使用 `canvas.toDataURL()` 方法将画布上的图像转换为数据URL。数据URL是一种表示图像的字符串,可以嵌入到PDF文档中。 5. 使用 `jsPDF.addImage()` 方法将数据URL插入PDF文档。该方法在指定的位置和大小绘制图像。 6. 最后,使用 `jsPDF.save()` 方法将PDF文档保存到本地。 通过以上步骤,可以使用JavaScript将HTML页面转换为PDF。这个方法广泛应用于需要在Web应用程序中生成PDF报告或保存网页内容的场景中。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值