关闭

在 Web 上打印的一些方法

标签: web报表javascriptbuttondllcss
1938人阅读 评论(1) 收藏 举报
分类:

一、利用IE内部打印组件:    
  这个方案也许是最简单的,当然不会很“专业”。我们假设客户端是IE6.0版本,因为在IE6.0中才完全体现我们所要应用的“打印模板机制”。它在精确控制页面边界,文本间隔,以及打印的统一性上,功能更为完备。    
    至于这种方案的实现也相当简单,它主要只涉及到DEVICERECT,LAYOUTRECT两种行为方式,分别用来定义整体页面风格及单个页面内容风格。而我们所要打印的HTML可以通过LAYOUTRECT的CONTENTSRC属性来指定。可喜的是即使我们有1000个页面要打印,也可以简单的通过我们的打印模板添加动态修建HTML功能,实现单模板控制多文件风格。(请参考本文所附代码)。这个方案在CSDN有详细的介绍,但没有附示例。示例文件可以在MSDN上下载得到。    
   
   
  二、利用外部DLL打印组件:    
   
    此类方案实现倒也不很复杂,只是利用DLL本身内部类函数操作,创建报表、格式并进行打印,而无需考虑内部实现环节。但对于WEB打印来说,似乎不合适。我个人认为在WEB上创建报表的HTML,然后利用客户端IE打印是最好的解决方式。而如果你的C#或VB不是很好,那么外部DLL的类型解决是一个很让人头疼的事情,何况还要应用到WEB环境下。这种方案我用傻儿的打印组件调试过,但没成功。    
   
  三、利用外部OCX类控件    
    这类方案和第二种差不多,也是建立在别人的成果的基础上,但是在ASP.net下,如果没有这个控件的说明书,我相信你也会和我一样,不知道该从哪里下手开始设计。    
   
  四、利用XML解析打印    
    这种解决方案在微软家园有很详细的介绍,其原理就是解析出定义好的XML格式标记,解读出文件中标记的参数定义,最后将这些信息还原成打印机输出的图形格式。很简单的理解,例如你要打印一个简单的表格,那么我们将表格解析成为文本和表格两部分,程式设计时我们遇到文本文本则输出文本到打印机,遇到表格标签即输出LINE到打印机。如此你可以自定义一些特殊的标签,如图片,特殊形状等。这种方案开发起来很简单,而且很“专业”,不过其缺点:客户端需要安装.NET   FrameWork.(傻了。。)    
   
  五、转化为PDF文件,利用PDF打印    
    转化为其它类型的文件输出,是打印方案很常用的一种方式,而PDF文件格式以其优异的“品质”(打印品质)和“性能”(应用功能)无疑是一种很经济的方式。而且从WEB向PDF转换不是很困难,资源占用也不是很严重,这是它在同类方案中的优点,也是异类方案中的缺点。如此你可以去PDFCHINA上搜寻相关可用信息。    
   
  六、利用外部设计器设计报表,内部程式码控制打印    
    这里我针对思路来讲这种方案,并针对VISUAL DESIGNER报表组件。我们预先得利用设计器做好报表的格式,尔后在程式码里面住报表各表单“套值”,就这么简单。有点像ACCESS里面的报表设计方式。我所在公司的管理系统就是ACCESS写的,所以我其实挺喜欢这种方案。至于VISUAL DESIGNER可以在CSDN下载到,并有开发说明书。    
   
  七、自己写专业报表打印组件    
    这是*不得已的作法,当然更符合自己的要求,但是如果你不是专业的开发人员或有其它特殊目的,这些时间就不要花了。很罗索的。如果你有兴趣写,那么我建议你先看看第五种方案的思路和说明文档。    
   
    WEB打印至今还没有完美的解决方案,我个人期待IE在这一方面再加改进,以方便我们这一群“劳苦大众”。    
   
  八、打印頁面:  
   
  <a   href="javascript:window.print()">   打印   </a>    
   
   
  打印时选择内容进行打印:    
   
  往往在打印网页时,执行window.print会把网页的所有内容全部打印,而有一大部分比如网页头部的图片、尾部的版权声明、按钮等,并没有必要打印出来,打印出来浪费时间又浪费油墨。如何把这些内容进行有选择的打印让你的打印文本更简洁明了,更省时美观呢?以下就对这个问题写一个JS文本,供有缘人参考。

<script   language="javascript">  
  function   DtPrint()   {  
  if   (window.print)   {  
  var   p_1               =   document.all.p_1.innerHTML;  
  var   p_2           =   document.all.p_2.innerHTML;  
   
  这里根据你要打印的哪些内容,从原显示页面中用  
  <div   id=P_1>p_1....</div><div   id=P_2>p_2...</div>等标示,要打印多少项目就用多少下  
  提示一下,自己体会:),此处我只写出两个出来:D  
   
  var   css   =   '<style   type="text/css">'   +  
      'p   {     line-height:   120%}'   +  
      '.ftitle   {     line-height:   120%;   font-size:   18px;   color:   #000000}'   +  
      'td   {     font-size:   10px;   color:   #000000}'   +  
      '</style>'   ;  
   
  这里是定义打印用的CSS,可以根据你自己的设定去写适合你的格式哦  
  本文只定义三个,p,.ftitle,td,其余自己写。越美观越好。  
   
  var   body   ='<table   width="640"   border="0"   cellspacing="0"   cellpadding="5">'   +  
            '     <tr>   '   +  
            '         <td     class="fbody">   '   +  
            '             <div   align="center"   class=ftitle>'   +   p_title   +   '</div>'   +   p_2   +    
            '         </td>'   +  
            '     </tr>'   +  
            '</table>';  
   
  body这才是你重新设置的打印格式,根据你的打印要求,重新把原显示网页的DIV内容重新  
  组合,可以根据你原来的表格内容,去掉不要打印的东东,只调用你要打印的内容  
  另外:根据经验,表格大小为640左右正好是适合A4打印幅面!哈!  
   
  document.body.innerHTML   =   '<center>'   +   css   +   body   +   '</center>';  
   
  然后在这里把document.body重新设一下,这就是打印文档!(有加CSS格式了)  
   
  window.print();  
   
  }  
  }  
  </SCRIPT>  
   
  在页面中,然后通过:dtPrint()调用,就行了  
  比如:  
  <input   type="button"   value="打印"   LANGUAGE="javascript"   onclick="return    
  dtPrint()"   ID="Button2"   NAME="Button1">  
   
  噢!注意这个可以不用<div></div>标示哦,即使标示,也不用在以上打印文本中调用出来,那样这个Button就不会打印出来了哦  

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:92170次
    • 积分:1287
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:28篇
    • 译文:1篇
    • 评论:10条
    最新评论