`

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

    博客分类:
  • JS
阅读更多

前面之所以讲Jquery的打印和smsx.cab打印,是因为最近用的项目里边需要把两个都结合起来才能实现效果。

 

基本业务是这样子的:同时打印多个人的简历,要求每个人的打5份,自动打印,且有进度条显示。

 

为什么需要用到两种打印方式:既然是自动打印就不能弹出打印机选择框那么只能是smsx.cab,而使用

smsx.cab打印时就需要将进度条信息隐藏起来否则进度条也会被打印进去。所以两个要综合起来用。

 

最后的思路就是:打印时使用smsx.cab设置好打印机弹出框信息和页眉页脚页边距,然后使用Jquery局部打印的原理将打印内容和样式拷贝到一个新的iframe中,再调用smsx.cab进行打印。

 

效果就不截图了,直接上代码:

1、打印的基本机构:这里是打印了5个人的,若有多的人直接在后面添加div即可。进度条的样式已上传到附件。

<%--需要打印的内容--%>
    <div class="box" id="page1">简历基本信信息</div><%--当前正在打印 --%>
    <div class="box" id="page2" style="display: none;">简历基本信信息</div>
    <div class="box" id="page3" style="display: none;">简历基本信信息</div>
    <div class="box" id="page4" style="display: none;">简历基本信信息</div>
    <div class="box" id="page5" style="display: none;">简历基本信信息</div>
<%--进度条 --%>
<div id="container">
	<div class="content">
		<p id="allUserInfo"></p>
		<p>正在打印:<span id="curUserInfo"></span></p>
	</div>
	<div id="progress_bar" class="ui-progress-bar ui-container">
		<div class="ui-progress" id="ui-progress" style="width: 0%;">
			<span class="ui-label"><b class="value" id="curProgress">0%</b></span>
		</div>
	</div>	
</div>
<%-- 遮罩层 --%>
<div id="zhegai" style="z-index:100;width:100%;height: 100%;top:0px;left:0px;position:absolute;filter:Alpha(Opacity=50);background:#000000;-moz-opacity: 0.5; opacity:.50; " ></div>

2、js处理:

var count = '${count}';//总共有几个人的简历需要打印
var userInfo = '${userInfo}';//打印简历的人的姓名,字符串,以中文半角的逗号分开
var printContent = "打印简历的人员:"+userInfo;
var pages = 5;//打印5份

var array = userInfo.split(",");
var current = 1;
var iframe = null;//打印用的iframe
var timeOut = (pages*3*2)*1000;//30秒之后再执行下一个:假设每个人的简历有3页每页打2秒
$(function() {
	$("#allUserInfo").text(printContent);//显示需要打印的所有内容
	unScroll();//禁止滚动条滚动
	printTZS();//页面加载完成后直接打印
});
// 主页面不允许右键(兼容多浏览器)
document.oncontextmenu=function(e){
     return false; 
};
//禁止页面点击
$(document).click(function(event){
	return false;
});
//该方法用来打印简历信息
function printTZS(){
	//计算进度条信息
	calcProgress();
	
	//移除已经打印完成的简历信息
	if(current>1){//说明至少到第二个人了,那么需要移除掉前面的人的简历信息
		$("#page"+(current-1)).remove();
	}
	//显示正在打印的简历信息
	$("#page"+current).show();

	//进行打印
	printArea($("#page"+current));
	
	current++;
	//循环打印
	if(current<=count){//说明还没有打完,那么继续打
		//printTZS();
		window.setTimeout(function(){
			printTZS();//timeOut秒后再打
		}, timeOut);
	}else{//说明打印完成,跳转到上一页
		history.back();
	}
}
//该方法用来计算进度条信息
function calcProgress(){
	//显示进度条信息
	$("#curUserInfo").text(array[current-1]);//当前正在打印的简历信息
	//计算进度
	var progress = ((current/count).toFixed(2))*100;
	//alert(progress);
	$("#ui-progress").css("width",progress+"%");
	$("#curProgress").text(progress+"%");
}

//禁止滚动条滚动
function unScroll() {
    var top = $(window).scrollTop();
    $(window).scroll(function() {
    	$(window).scrollTop(top);
	});
}

/**
*该方法用来打印简历信息(根据Jquery的局部打印进行修改而来)
*@param obj:需要进行打印的区域
*/
function printArea(obj){
	var $this = $(obj);
	if(current==1){//说明是第一次打印,那么需要添加iframe
		var iframeId = "printArea";//iframe的id
		var iframeStyle = "position:absolute;width:0px;height:0px;left:-500px;top:-500px;";
		iframe = document.createElement("IFRAME");//创建ifreame
		
		//添加属性
		$(iframe).attr({
			style : iframeStyle,
			id : iframeId
		});
		document.body.appendChild(iframe);//添加到document中
		var doc = iframe.contentWindow.document;
		
		//添加css样式
		$(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") + '" >');
		});
		//添加Object控件
		doc.write("<OBJECT id=\"factory\" codeBase=\"redist/smsx.cab#Version=6,3,434,26\" height=\"0\" width=\"0\" classid=\"clsid:1663ed61-23eb-11d2-b92f-008048fdd814\" viewastext></OBJECT>");
	}
	var doc = iframe.contentWindow.document;
	
	//清空先前打印的数据
	var $printNode = $(doc.getElementById("printDiv"));
	$printNode.remove();
	
	//添加盛放打印内容的div
	var printNode = doc.createElement("div");//创建ifreame
	printNode.setAttribute("id","printDiv");
	printNode.setAttribute("class",$this.attr("class"));
      
	doc.body.appendChild(printNode);//添加到document中
	
	$printNode = $(printNode);
	//将需要打印的内容添加iframe中
	var html = $this.html();
	for(var i=0;i<pages;i++){//打印pages份
		if(i==0){$printNode.html(html);}
		else{$printNode.append(html);}
		//除了最后一份,其他(pages-1)份最后都需要添加分页打印的代码
		if(i<pages-1){
			$printNode.append("<div style=\"page-break-before: always;width: 500px;\" ></div>");
		}
	}
	doc.close();//关闭文档
	
	//调用iframe框进行打印
	var frameWindow = iframe.contentWindow;
	frameWindow.close();
	frameWindow.focus();
	var factory = frameWindow.document.getElementById("factory");
	
	//进行打印设置
	factory.printing.header = ""; // 页眉
	factory.printing.footer = ""; // 页脚
	factory.printing.portrait = true; // true为纵向打印,false为横向打印
	factory.printing.leftMargin = 19.05;
	factory.printing.topMargin = 0;
	factory.printing.rightMargin = 0;
	factory.printing.bottomMargin = 0;
	factory.printing.Print(false);//进行打印,false:不弹出打印框让选择打印机
}

说明:${count}和 ${userInfo}都是从后台传递过来的数据。

分享到:
评论

相关推荐

    smsx.cab下载及使用说明

    Web打印控件smsx.cab使用说明 在项目开发中,经常会用到... 使用方法:一般会先定义一个用于打印的母版页(Print.Master),在母版页上做好布局,包括页面布局、js 的引用、smsx.cab控件加载、打印和预览按钮的放置。

    smsx.cab 最新

    smsx.cab 最新版本经过测试可以使用

    scriptx打印控件(smsx.cab,smsx.exe)

    本文将深入探讨ScriptX打印控件,包括其核心组件smsx.cab和smsx.exe,以及如何在实际项目中应用。 ScriptX是由Meadroid公司开发的一款专门用于Web打印的解决方案。它提供了一种在IE和基于Chromium的Edge浏览器中...

    smsx.cab控件打印安装包.zip

    smsx.cab是WEB页面打印控件,此插件可设置Web打印时的页眉页脚,IE浏览器下使用smsx.cab组件实现打印和打印预览功能,可以通过属性设置横向竖向打印模式,打印页眉等打印格式。网上有详细的使用方法。

    IE打印控件smsx.cab

    【IE打印控件smsx.cab】是一种专为网页应用设计的打印解决方案,它使得开发者能够在JSP、ASP和PHP等不同的Web开发平台上方便地实现打印功能。这个控件允许用户在不离开浏览器的情况下,直接从网页上打印内容,极大地...

    打印插件smsx.cab

    smsx.cab并非一个独立的软件,而是嵌入到其他打印应用中的组件,它提供了丰富的打印设置选项,帮助用户更好地管理和定制打印任务。通过下载并安装这个插件,用户可以访问到更多的打印机配置选项,如页面布局、色彩...

    ScriptX(smsx.cab) 打印控件教程

    Asp.Net(IE) ScriptX/smsx.cab 打印控制插件 如何使用详细教程 注:该插件只限IE使用。 当前示例版本:ScriptX version 6,6,440,26 第一步: 将smsx.cab 复制到.net工程中,如send_js 文件夹中。 第二步: ...

    打印插件smsx.cab技术文档

    本文档将深入探讨"打印插件smsx.cab"的技术细节,帮助开发者理解和利用该插件实现更高效的打印解决方案。"smsx.cab"文件是一种常见的Windows Cabinet压缩格式,它通常包含一个或多个DLL(动态链接库)文件,这些文件...

    web 打印包smsx.cab

    实现打印控制,使用javaScript。 可以实现基本的打印控制

    Web打印控件smsx.cab下载以及使用说明

    在项目开发中,经常会用到页面... 使用方法:一般会先定义一个用于打印的母版页(Print.Master),在母版页上做好布局,包括页面布局、js 的引用、smsx.cab控件加载、打印和预览按钮的放置。 母版页(Print.Master):

    smsx.cab 打印控件下载

    找了好久,好像与scriptX.cab相似,功能应该差不多。这个可以用,已试过。使用方法可上网查询,很多

    Web网页横向打印(smsx.cab)

    标题“Web网页横向打印(smsx.cab)”所指的是一个与网页打印相关的工具或解决方案,其中包含了名为“smsx.cab”的压缩包文件。在Web开发中,打印功能是必不可少的一部分,允许用户将网页内容以纸质形式保存或分享。...

    smsx cab控件可双击安装版

    IE下使用smsx.cab组件实现打印和打印预览功能,可以通过属性设置横向竖向打印,打印页眉等打印格式。是免费版,不支持设置打印机和预览效果,软件集成用比较方便。

    Web打印控件smsx.cab

    Web打印控件smsx.cab

    smsx.cab下载和使用说明

    在项目开发中,经常会用到页面打印的功能,在ASP.NET环境下... 使用方法:一般会先定义一个用于打印的母版页(Print.Master),在母版页上做好布局,包括页面布局、js 的引用、smsx.cab控件加载、打印和预览按钮的放置。

    smsx.rar打印控件

    【smsx.rar打印控件】是一款专用于打印功能的控件,主要应用于Windows操作系统环境,为开发者提供便捷的打印解决方案。smsx控件的核心在于它能够帮助程序员在应用程序中轻松集成打印功能,使得用户可以方便地打印...

    smsx.cab下载以及使用示例

     使用方法:一般会先定义一个用于打印的母版页 Print Master 在母版页上做好布局 包括页面布局 js 的引用 smsx cab控件加载 打印和预览按钮的放置 母版页 Print Master :"&gt;在项目开发中 经常会用到页面打印的...

    smsx.cab 图片处理控件

    smsx是图片处理控件 可以各种图片 如jgp,tif,bmp等

Global site tag (gtag.js) - Google Analytics