一个不错的WEB打印解决方案!

前段时间做项目时,因为需要用到WEB打印,原来是想用水晶报表的,但由于生成的数据比较麻烦(由多张表并且经过多次计算才生成),因此就想上网找一下有没更好更方便的办法。其实最好的办法就是可以直接打印当前页面需要的内容,这样就不用再去考虑数据源的问题了,所有操作都在客户端实现。

网上的方法一般都是使用样式控制页面所需打印部分,于都在同一页面内控制,所以这样打出来的效果也不好看,而且也不便于控制,于是我就想到将需要打印的内容直接传到另一个页面,然后再在那个页面里进行打印操作,因为是一个新的页面,所以可以很方便去控制需要的样式,只要将所有打印的连接都用此页面进行操作就可以了,这样打出来的效果就可以完全与页面内容一样(包括样式),当然,前提是必须在IE高级设置里将“打印背景图像”一选项打开,否则只能打印前景色。

此方法最终也是调用WebBrowser控件进行的,所以还必须要求客户端IE打开“对没有标记为安全的ActiveX控件进行初始化和脚本运行”的选项,这是使用此方法的唯一一个缺点! emcrook.gif

具体实现:

1、此方法实现其实也非常简单,主要是要先定义好要打印的区域,可以使用一个DIV包含起来,如下:

None.gif   <!--  设置打印区域,ID为Content1  -->
None.gif       
< div  id ="Content1" >
None.gif            
< table  width ="647"  height ="74"  border ="0"  cellpadding ="1"  bgcolor ="#000000" >
None.gif              
< tr >
None.gif                
< td  height ="18"  bgcolor ="#0099FF" >< div  align ="center" >< span  class ="STYLE1" > 编号 </ span ></ div ></ td >
None.gif                
< td  bgcolor ="#0099FF" >< div  align ="center" >< span  class ="STYLE1" > 姓名 </ span ></ div ></ td >
None.gif                
< td  bgcolor ="#0099FF" >< div  align ="center" >< span  class ="STYLE1" > 年龄 </ span ></ div ></ td >
None.gif              
</ tr >
None.gif              
< tr >
None.gif                
< td  height ="22"  bgcolor ="#FFFFFF" >< div  align ="center" > 1 </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > ssd </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > 23 </ div ></ td >
None.gif              
</ tr >
None.gif              
< tr >
None.gif                
< td  height ="22"  bgcolor ="#FFFFFF" >< div  align ="center" > 1 </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > ssd </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > 23 </ div ></ td >
None.gif              
</ tr >   < tr >
None.gif                
< td  height ="22"  bgcolor ="#FFFFFF" >< div  align ="center" > 1 </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > ssd </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > 23 </ div ></ td >
None.gif              
</ tr >   < tr >
None.gif                
< td  height ="22"  bgcolor ="#FFFFFF" >< div  align ="center" > 1 </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > ssd </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > 23 </ div ></ td >
None.gif              
</ tr >   < tr >
None.gif                
< td  height ="22"  bgcolor ="#FFFFFF" >< div  align ="center" > 1 </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > ssd </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > 23 </ div ></ td >
None.gif              
</ tr >   < tr >
None.gif                
< td  height ="22"  bgcolor ="#FFFFFF" >< div  align ="center" > 1 </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > ssd </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > 23 </ div ></ td >
None.gif              
</ tr >   < tr >
None.gif                
< td  height ="22"  bgcolor ="#FFFFFF" >< div  align ="center" > 1 </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > ssd </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > 23 </ div ></ td >
None.gif              
</ tr >   < tr >
None.gif                
< td  height ="22"  bgcolor ="#FFFFFF" >< div  align ="center" > 1 </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > ssd </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > 23 </ div ></ td >
None.gif              
</ tr >   < tr >
None.gif                
< td  height ="22"  bgcolor ="#FFFFFF" >< div  align ="center" > 1 </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > ssd </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > 23 </ div ></ td >
None.gif              
</ tr >   < tr >
None.gif                
< td  height ="22"  bgcolor ="#FFFFFF" >< div  align ="center" > 1 </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > ssd </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > 23 </ div ></ td >
None.gif              
</ tr >   < tr >
None.gif                
< td  height ="22"  bgcolor ="#FFFFFF" >< div  align ="center" > 1 </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > ssd </ div ></ td >
None.gif                
< td  bgcolor ="#FFFFFF" >< div  align ="center" > 23 </ div ></ td >
None.gif              
</ tr >
None.gif            
</ table >
None.gif          
</ div >

2、增加一个打印按钮:

None.gif   < input  type ="button"  value =" 打 印 "  onclick ="OpenPrint();"  id ="Printf"   />

3、增加JS方法:(其实就打开另一个新的打印页面)
None.gif < script >
None.gif
// 打印方法,直接开另一新页面然后将当前页面打印区传过去
None.gif
   function  OpenPrint()
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        window.open('Print.htm','print', 'toolbar
=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');
ExpandedBlockEnd.gif    }

None.gif
</ script >

4、在新建一个Print.htm页面,获取父页面的内容,并且打印出来
None.gif <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
None.gif
< html  xmlns ="http://www.w3.org/1999/xhtml" >
None.gif
< head >
None.gif    
< title ></ title >
None.gif
</ head >
None.gif
<!--  要保留打印区域的样式,此页面的样式必需与父页面的一样  -->
ExpandedBlockStart.gifContractedBlock.gif
< style  type ="text/css" > dot.gif
InBlock.gif<!--
ExpandedSubBlockStart.gifContractedSubBlock.gif.STYLE1 
{dot.gif}{color: #FFFFFF}
ExpandedSubBlockStart.gifContractedSubBlock.gifbody,td,th 
{dot.gif}{
InBlock.gif    font-size
: 12px;
ExpandedSubBlockEnd.gif
}

ExpandedSubBlockStart.gifContractedSubBlock.gif.STYLE4 
{dot.gif}{color: #CC0000; font-weight: bold; }
InBlock.gif
InBlock.gif-->
ExpandedBlockEnd.gif    
</ style >
ExpandedBlockStart.gifContractedBlock.gif
< script > dot.gif
InBlock.gif
//初始化页面大小
InBlock.gif
window.resizeTo(window.screen.availWidth,window.screen.availHeight);
ExpandedBlockEnd.gifwindow.moveTo(
0,0);
None.gif
</ script >
None.gif
< body  style ="background-color:White; background-image:url(nono.jpg); " >
None.gif    
None.gif    
<!-- 注册打印控件 -->
None.gif    
< object  id ="WebBrowser"  classid ="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"  height ="0"  width ="0" ></ object >
None.gif    
None.gif    
<!-- 设置打印标题 -->
None.gif    
< div  id ="title"  class ="STYLE4" >
None.gif    
</ div >
None.gif    
< br  />
None.gif    
None.gif    
<!-- 设置打印的内容 -->
None.gif    
< div  id ="print" >
None.gif    
</ div >
None.gif
ExpandedBlockStart.gifContractedBlock.gif    
< script > dot.gif
InBlock.gif 
InBlock.gif
//从父页面获取内容
InBlock.gif
 var father = window.opener;
InBlock.gif 
if(father != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif 
dot.gif{
InBlock.gif    pagesetup_null();
InBlock.gif    
//获取父页面的标题
InBlock.gif
    document.getElementById('title').innerHTML =  father.title.innerHTML;
InBlock.gif    
//获取父页面需要打印的内容
InBlock.gif
    document.getElementById('print').innerHTML =  father.Content1.innerHTML;  
InBlock.gif    print();
ExpandedSubBlockEnd.gif  }

InBlock.gif 
InBlock.gif  
function print()
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
InBlock.gif    document.all.WebBrowser.ExecWB(
7,1);
InBlock.gif    window.close();
ExpandedSubBlockEnd.gif  }

InBlock.gif
ExpandedBlockEnd.gif    
</ script >
None.gif
None.gif
</ body >
None.gif
</ html >
None.gif

完成!

转载于:https://www.cnblogs.com/winsonet/archive/2007/06/06/773073.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值