asp js实现勾选复选框后批量打印?

JavaScript011

asp js实现勾选复选框后批量打印?,第1张

给你一个简单的示例:

<% for t=1 to 10 %>

<input type="checkbox" id="chk<%=t%>" value="<%=t%>" /><span id="span<%=t%>">选项<%=t%></span><br />

<% next%>

<input type="button" value="打印" onclick="javascript:printme()" />

<script type="text/javascript">

function printme(){

   var o=window.open("","print")

   var s=""

   for(var t=1t<=10t++){

    if(document.getElementById("chk"+t).checked==true){

      s+="<br />"+document.getElementById("span"+t).innerHTML 

    }

   }

   o.document.write("<body>")

   o.document.write(s)

   o.document.write("</body>")

}

</script>

你根据需要把要打印的格式处理一下就行了

实现代码如下:

<%@ page contentType="text/htmlcharset=utf-8" language="java" import="java.sql.*" errorPage="" %>

<%@ taglib prefix ="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>

<meta http-equiv="Content-Type" content="text/htmlcharset=utf-8" />

<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bid.css"/>

<title>批量打印模板</title>

<script type="text/javascript" language="javascript">

function printOnload(){

var count = <s:property value="uriList.size()"/>

var index

for(i = 0i <counti++){

index = i + 1

//把iframe的html挪到div上

document.getElementById('page' + index).innerHTML

= window.frames[0].document.getElementsByTagName('body')[0].innerHTML

}

}

</script>

<!-- media="print"表示改样式只在打印预览或打印的时候才生效 -->

<style media="print" type="text/css">

.NOPRINT{display:none}

.PageNext{page-break-after: always}

.none{}

</style>

</head>

<body onload="printOnload()">

<!-- 根据urlList,生成<div><iframe><iframe/></div>这样格式的页面-->

<s:iterator value="uriList" status="status1" id="uri">

<div style="<s:if test='#status1.count != uriList.size()'>page-break-after: always</s:if>" id="page${status1.count}">

<iframe src="<%=request.getContextPath() %>${uri }"></iframe>

</div>

</s:iterator>

</body>

</html>

首先得构造一个适合打印的页面,然后直接用浏览器的打印功能就可以 :

1、后台request保存了一个List<URLObj>,uri属性表示请求地址

2、该打印demo页面,根据List<URLObj>,用struts2标签在body上构建<div><iframe></iframe></div>,iframe打开的是每一个需要批量打印的页面

3、页面加载完成后,调用printOnLoad函数,把iframe里面的html挪到div上

问题描述:

在B/S项目中需要打印大量的图片,我们使用window.print,但是当数据量大至上万的时候,将图片加载出来需要一些时间,加载出来之后打印,如果用户关闭了打印界面会导致打印页的缺失。

解决思路:

1.IE,使用ActiveX控件,非IE,使用Flash插件。这种思路不同的浏览器开发方式不一样,IE/FF/GROME

2.开发一个exe,客户端安装到本地服务,使用HTTP通讯方式。通过JS发送HTTP请求给本地的服务,本地服务起一个小型的HTTP server接收请求,然后返回数据,JS解析,显示在UI上。比如将打印的参数传值到本地服务,本地服务去调用打印机,使浏览器资源得到释放。

我们使用第二种思路。

尝试了以下方法:

1.HttpPrinter

采用原因 免费  ,OME费用很便宜的,而且不限制时间和数量.还可以购买源码的。

HttpPrinter.com

2.葡萄城的ActiveReports

中有B / s端的打印使用window.print实现

https://demo.grapecity.com.cn/ActiveReports/ASPNET/ControlExplorer/Viewers/Default.aspx?category=1001&action=14

另外有C / S端的打印,无法与浏览器交互,但是可以去改进

https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=48785&extra=page%3D1

3. Lodop分为收费版与免费版

 (1)使用Lodop插件,需要客户端安装一个服务,服务的端口默认是8000或18000

 (2)如何购买和使用打印控件的Lodop的注册号

http://blog.sina.com.cn/s/blog_721e77e50100nfzs.html

 (3)Lodop样例演示

http://www.lodop.net/LodopDemo.html

考量问题:

(1)免费版有水印

4. JCP分为收费版与免费版

  安装程序需要替换

  网官   http://printfree.jatools.com/

 考量问题:

免费版只适合于IE浏览器

图片需要渲染到页面,打印时释放浏览器资源可以做其他操作

收费版jatoolsPrint支持大部分浏览器

5.jquery打印

底层是window.print方法

最后考量,我们决定将的ActiveReports中的C / S端程序打包成EXE,利用自定义协议实现打开本地exe服务,使用HTTP方式实现浏览器与本地服务的通讯。