`

批量打印之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 最新版本经过测试可以使用

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

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

    IE打印控件smsx.cab

    IE打印控件smsx.cab 免费打印控件 在jsp asp php中轻松调用,内含示例代码

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

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

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

    java web B/S架构中使用scriptx实现客户端浏览器打印,代码在我的博客里。

    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下载和使用说明

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

    smsx.rar打印控件

    smsx.rar.打印控件。smsx 打印控件.

    打印插件smsx.cab

    控制打印设置的插件,里面包含最新的下载包及简单使用教程

    smsx.cab下载以及使用示例

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

    打印插件smsx.cab技术文档

    插件技术文档插件技术文档插件技术文档插件技术文档插件技术文档

    smsx cab控件可双击安装版

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

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

    NULL 博文链接:https://bluebattle.iteye.com/blog/745147

    smsx.cab 图片处理控件

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

Global site tag (gtag.js) - Google Analytics