`

批量打印之jquery局部打印

    博客分类:
  • JS
阅读更多

上个月弄了个批量打印的功能,觉得以后可能用得着,就写个博客记一下,免得忘记了。说这个之前,先来说一下我用过的两个打印插件,一个是Jquery打印插件(这次开始用的),一个是smsx.cab控件的打印插件。这里先说jQuery的局部打印功能(个人觉得jqprint和PrintArea就打印功能这块大同小异,所以就说简单点的PrintArea)

 

1、导Jquery库:想用Jquery的功能就得有人家的内库嘛,这个是毋庸置疑的。

 

2、导入jquery.PrintArea.js:在导入jquery库之后导入。其源码如下:

(function($) {
	var printAreaCount = 0;
	$.fn.printArea = function() {
		var ele = $(this);
		var idPrefix = "printArea_";
		removePrintArea(idPrefix + printAreaCount);
		printAreaCount++;
		var iframeId = idPrefix + printAreaCount;
		var iframeStyle = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;';
		iframe = document.createElement('IFRAME');
		$(iframe).attr({
			style : iframeStyle,
			id : iframeId
		});
		document.body.appendChild(iframe);
		var doc = iframe.contentWindow.document;
		$(document).find("link").filter(function() {
			return $(this).attr("rel").toLowerCase() == "stylesheet";
		}).each(
				function() {
					doc.write('<link type="text/css" rel="stylesheet" href="'
							+ $(this).attr("href") + '" >');
				});
		doc.write('<div class="' + $(ele).attr("class") + '">' + $(ele).html()
				+ '</div>');
		doc.close();
		var frameWindow = iframe.contentWindow;
		frameWindow.close();
		frameWindow.focus();
		frameWindow.print();
	}
	var removePrintArea = function(id) {
		$("iframe#" + id).remove();
	};
})(jQuery);

3、demo

<input type="button" id="btnPrint" value="打印"/>
<div id="printContent">要打印的内容区域<div>

<script type="text/javascript">
$(function(){
        $("#btnPrint").click(function(){ $("#printContent").printArea(); });
});
</script>

 4、说一个可能遇到且我已经解决的问题:打印出来的东东没有样式

解决方法:将页面中<style>标签中的样式全部摘出来放到一个css文件中去,然后将这个css文件引入到页面上来。

为什么这样子可以解决:

先看jquery.PrintArea.js的源码,它的实现原理基本上可以理解成这样子

点击“打印”时,它先在页面中生成一个iframe(宽高为0,left、top为-500,这样子在当前页面就看不到这个frame了),

然后将页面里边引入的(link方式)css文件也引入到iframe中,

再将选定区域(jquery选择器选定的对象)的内容复制到iframe中,

最后调用系统的print()方法进行打印。

理解了源码之后,再来理解“打印出来的东西没有样式“”也就容易了,因为它只是处理了<link>标签中的样式,木有处理<style>中的样式呀。

 

顺便再多嘴一句:在解决这个问题时,看到有人说处理将css内容摘到一个文件里边之外,还需要在<link>标签中添加"media=print",我试着加了下打印出来是有样式,但是页面显示的却没有样式了。也不知道是我写的有问题,还是哪里又不对。

 

5、说一说优点

至少有两个:a、可以局部打印,想打哪块打哪块,不需要在打印时顾虑其他的不相干内容也打印出来了;b、兼容性好,因为调用的是window对象的print()方法,且浏览器都支持这个方法(试了IE8、IE11、火狐、谷歌、360、QQ,效果都不错);

 

6、说一说缺点

也至少有三个:a、打印的时候每次都要弹出打印框让选择打印机,这个在自动打印的情况下比较烦人;b、自带页眉页脚,打印时如果不进行页面设置会自动加上页眉页脚且不太好去掉,也需要手动设置页边距,这个也比较烦人。c、不带预览,需要使用其他插件进行预览,如jquery-print-preview-plugin-master(有点复杂)。

分享到:
评论

相关推荐

    批量打印之jquery局部打印和smsx.cab打印联合使用

    本文将深入探讨如何利用jQuery实现局部打印以及与SMSX.CAB打印技术的联合使用,旨在为开发者提供一种高效、灵活的批量打印解决方案。 首先,jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理和动画...

    web页面批量打印

    分页是批量打印中的关键部分,尤其是当每个报告单需要单独占一页时。在HTML和CSS中,可以使用以下技巧进行分页控制: 1. CSS `@media print` 查询:针对打印媒体类型定义不同的样式,比如设置页眉和页脚,以及分页...

    jquery局部打印

    "jquery局部打印"是jQuery的一个扩展功能,它允许用户在不离开当前页面的情况下,选择性地打印网页的特定部分。这个功能对于那些希望提供用户友好打印体验的网站来说非常有用,例如,可能只想让用户打印特定表格或...

    可局部打印的网页打印插件jQuery.PrintArea

    总结来说,`jQuery.PrintArea`是一款实用的网页打印插件,它基于`jQuery`库,提供局部打印功能,适用于那些需要对网页内容进行精确控制打印的场合。通过简单的API调用,开发者可以轻松地集成到自己的项目中,提高...

    jquery网页打印控件制作页面局部打印文本效果

    "jquery网页打印控件制作页面局部打印文本效果"这个主题就是关于如何使用jQuery来创建一个功能,使得用户可以仅打印网页的选定区域,从而提高用户体验并节省纸张。下面将详细介绍这个过程及其相关知识点。 首先,...

    jquery.PrintArea.js实现打印发货单功能

    首先,`jquery.PrintArea.js`是一个jQuery插件,它允许用户选择页面上的特定区域进行打印,避免了整个网页内容被一起打印的困扰。这种插件对于那些只需要打印部分页面元素,如订单、发票或发货单的场景非常实用。 ...

    ext打印、jquery打印、ext导出excel

    `ext打印`、`jquery打印`和`ext导出excel`都是与前端开发密切相关的技术,主要用于提升用户体验和增强数据处理能力。 首先,我们来详细了解一下`ext打印`。EXT是一个流行的JavaScript框架,用于构建富客户端应用。...

    Jquery局部放大镜

    **jQuery局部放大镜技术详解** 在网页设计中,为了提供用户更好的交互体验,尤其是在展示商品细节时,常常会使用到局部放大镜的效果。jQuery作为一款轻量级的JavaScript库,因其简洁的API和丰富的插件,成为了实现...

    原生JS打印插件之jQuery.EasyPrint.js使用文档

    原生JS打印插件之jQuery.EasyPrint.js使用文档 调用浏览器自带打印功能,使用JavaScript的 window.print(); 方法。 使用JS实现打印功能;JavaScript 实现打印操作;javascript打印大全;通用;js实现打印的方式;JS...

    jquery批量上传图片插件

    "jQuery批量上传图片插件"是基于jQuery实现的一种功能,旨在为网页应用提供便捷的图片批量上传功能。这个插件通常利用Ajax技术实现异步上传,即在不刷新页面的情况下,用户可以选择多张图片并将其上传到服务器,大大...

    jQuery 局部div刷新和全局刷新方法总结

    接下来,我们将详细介绍如何使用jQuery进行局部div刷新和全局刷新。 局部div刷新主要指的是只刷新页面中某个特定的div元素区域。这在实现动态内容更新、表单提交、无刷新页面体验等方面有着重要的应用价值。jQuery...

    jQuery批量上传

    jQuery批量上传是一个功能强大的Web开发技术,主要用于在网页上实现多文件同时上传的功能。这个实例是基于jQuery库和ASP.NET后端技术构建的,旨在提供类似QQ空间图片上传的用户体验,让用户可以方便快捷地一次性上传...

    jQuery网页局部打印代码.zip

    jQuery提供了一种便利的方式来实现这样的局部打印功能。这个名为"jQuery网页局部打印代码.zip"的压缩包中包含了一个名为"jq_printarea"的文件,它就是解决这个问题的关键。 首先,我们需要理解jQuery库的作用。...

    jQuery局部div滚动加载远程数据

    "jQuery局部div滚动加载远程数据"这个主题是关于如何利用jQuery实现一个功能,即当用户滚动到页面的某个div区域时,动态地从服务器加载更多的数据,这种技术通常称为"无限滚动"或"滚动加载"。这个特性在新闻网站、...

    jquery showLoading局部指定加载特效

    "jquery showLoading 局部指定加载特效"是jQuery应用中的一个常见需求,尤其是在网页的异步加载或者数据更新时,为了提供更好的用户体验,我们常常会在特定区域显示一个加载指示器,让用户知道内容正在加载。...

    jquery打印插件制作页面局部打印预览插件

    "jquery打印插件制作页面局部打印预览插件"的主题涉及到如何利用jQuery来实现一个功能,允许用户预览并打印网页的特定部分,而不是整个页面。这个功能在很多应用场景中都非常实用,比如报表、发票或者复杂表格的打印...

    可局部打印的网页打印插件jQuery.PrintArea.zip

    "jQuery.PrintArea"是一个优秀的局部打印插件,它允许开发者选择页面中的特定区域进行打印,而不是整个网页。这个插件的压缩包"jQuery.PrintArea.zip"包含了必要的文件,如HTML示例和JavaScript文件。 首先,我们要...

    jQuery打印插件jqprint,内包含使用示例

    jQuery打印插件jqprint,jquery.jqprint-0.3.js 下载,内包含使用示例,下载解压可直接在浏览器打开使用。 jQuery打印插件jqprint,jquery.jqprint-0.3.js 下载,内包含使用示例,下载解压可直接在浏览器打开使用。 ...

    jquery 调用浏览器打印功能

    而“jQuery 调用浏览器打印功能”是利用 jQuery 实现的一种方法,允许用户通过点击按钮或执行特定操作来触发浏览器的打印功能,从而打印网页内容。在描述中提到了 jqPrint 插件,这是一个专门用于打印 jQuery 对象...

Global site tag (gtag.js) - Google Analytics