zoukankan      html  css  js  c++  java
  • 基于ASP.NET 2.0 实现WEB打印方法的探讨

    摘  要:Web打印是在开发B/S结构应用程序时一项比较复杂但又应用广泛、非常实用的一种技术。本文主要针对ASP.NET 2.0实现WEB打印的几种方法进行了初步探讨,对每种方法的实现、各自特点进行了阐述。

    关键词: ASP.NET 2.0 ;B/S模式 ;WEB 打印

    中图分类号:TP393.092             文献标识码:A

    Study on Implementation of WEB Print Method Based on ASP.NET 2.0

                    ZHU Xiao-dong

    (Tianjin Railway Technical and Vocational College,Tianjin 300240 )

    Key words: ASP.NET 2.0 ;B / S mode ;WEB print

    目前,由于B/S模式扩展性好、数据安全性高、无须考虑客户端的兼容性等优点,在软件开发实践中得到了广泛的应用,而WEB 打印则是B/S模式应用程序中必需考虑的问题。虽然客户端的规则很简单,容易学习,容易维护,容易发布,但由于只能采用浏览器作为用户界面与服务器进行交互,不能精确地控制客户端的打印机,使WEB报表格式控制、定制等复杂的打印难以处理,其结构的特殊性和一般程序上的打印功能有所不同,而软件开发人员总是力求使B/S系统具有C/S系统相类似的打印功能,这是开发人员所面临的一个共同难题。

    WEB 打印通常分为客户端脚本方式和服务器端程序方式,在客户端脚本方式中,主要使用JS 可以分析源页面的内容,将欲打印的页面元素提取出来,实现打印。通过分析源文档的内容,可以生成打印目标文档。这种方式客户端独立完成打印目标文档的生成,减轻服务器负荷;但源文档的分析操作复杂,并且源文档中的打印内容要有约定。通常采用服务器端程序方式,利用后台代码从数据库中读取打印源,生成打印目标文档。当的页面生成时,还应适当考虑使用CSS 来实现强制分页控制。这种方式可以生成内容非常丰富的打印目标文档,目标文档的内容的可控性强。由于打印内容是从数据库中获取的,所以生成操作相对简单;但服务器端负载比较大。

    ASP.NET 2.0是微软公司推出新型体系结构.NET Framework 2.0的一个主要组成部分,在开发人员的效率、管理、性能和可伸缩性等方面得到了极大的提高。 其新开发的IDE--Visual Studio 2005是目前B/S模式应用程序的主要开发工具。针对ASP.NET 2.0的WEB打印方法主要有以下几种解决方案:

    ①利用IE浏览器直接实现WEB打印;

    ②调用Office实现WEB打印;

    ③利用第三方控件实现WEB打印;

    ④利用.NET 2.0组件水晶报表实现WEB打印。

    利用IE浏览器直接实现WEB打印

    1.1调用windows.print()方法实现打印

    在页面上添加“打印”按钮,然后增加如下代码:

    <input type="button"onclick="window.print()"value="print">

    这种方法代码简单、方便快捷、无需任何设置,但页面上别的元素也会被打印处理,页头和页尾的格式难以控制,无法实现“打印设置”和“打印预览”等功能,可以利用css中的Media 属性来设置打印和显示的格式,代码如下:

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

    .Noprint{display:none;} 

    .PageNext{page-break-after: always;} 

    </style> 

    在不想打印的页面元素添加: class="Noprint" ,那就不会出现在打印和打印预览中了。如:

    <table width="757"  height="174"  border="0"  align="center" cellpadding="0" cellspacing="0">

    <tr  class="noprint">

    <td height="133" align="center" valign="top">

    <img src="Images/test.jpg" width="757" height="133"></td>

    </tr>

    </table>

    此时<tr class="noprint">是不打印的tr。

    1.2调用WebBrowser控件实现打印

    WebBrowser控件是IE内置的浏览器控件,它是ActiveX控件,无需用户下载,可以通过调用WebBrowser控件的ExecWB方法实现打印,首先在HTML源码中建立Object对象,Object对象主要向HTML页面中插入对象,代码如下:

    //加入ID为WebBrowser的WebBrowser控件

    <object ID=''WebBrowser'' WIDTH=''0''  HEIGHT=''0''

      CLASSID=''CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'' VIEWASTEXT></object>

    CLASSID属性主要用来获取或设置对象的类标识符。最后在客户端控件的onclick事件中调用WebBrowser组件的相关方法进行打印、打印预览等操作,代码如下:

    <input type=button  value=直接打印 onclick=document.all.WebBrowser.ExecWB(6,6)>

    <input type=button  value=页面设置 onclick=document.all.WebBrowser.ExecWB(8,1)>

    <input type=button  value=打印预览 onclick=document.all.WebBrowser.ExecWB(7,1)>

    此种方法优点是可以轻松实现打印、页面设置和打印预览等功能,客户端能独立打印目标文档,减轻服务器端负荷;缺点是源文档的分析操作复杂,并且源文档中的打印内容要有约束。

      调用Office实现WEB打印

    在浏览网页时,经常需要将Web页面中的内容通过Word或Excel文档打印出来,借助功能强大的Office办公软件,可以完成非常复杂的文档格式,进行精细的控制,可适应性强、易于控制。下面以将数据导出到Word文档为例进行介绍,Excel与此类似,不再赘述。

    Word作为文档处理软件,它在处理文档和资料的过程中显示出了强大的功能。将数据导出到Word,主要通过设置Response对象的ContentType属性为输出文件的类型来实现的。代码如下:

    Response.AppendHeader("Content-Disposition","attachment;filename=test.doc")

    Response.ContentType="application/ms-word";

    //如果输出为excel,修改为以下代码

    //Response.AppendHeader("Content-Disposition","attachment;filename=test.xls");

    // Response.ContentType="application/ms-excel";

    this.EnableViewState=false;

    String Write tw=new String Writer();

    HtmlTextWriter hw=new HtmlTextWriter(tw);

    GridView1.RenderControl(hw);

    Response.Writer(tw.ToString());

    Response.End();

    导出成Word或Excel后用户可以自定义打印的内容和格式,开发周期短、维护成本低,用户使用方便,并且可以跨平台运行。但数据导出前难以生成打印预览,在服务器端或客户端使用时,要保证安装有office软件,在客户端使用时要求客户端在IE的安全设置上有一定的要求。

    利用第三方控件实现打印

    目前有不少开发商提供的相关控件,可以实现Web打印功能,如MAX Reports、如意报表、ScriptX等。优秀的第三方控件,打印方式灵活,基本上程序能做到的web也能做得到,并且开发周期短,系统维护性好。但打印功能受控件本身限制,一般无法做到跨平台,并需支付相关费用,提高了系统的开发成本。

    也可以自行开发实现Web打印,一般可以通过自行开发ActiveX控件、Java Applet或动态生成PDF文件等方式来完成。这种方式可定制性强,可以完全按照用户的要求进行设计Web页面,但开发周期长,开发和维护成本较高。

    目前有一些软件公司使用JAVA开发基于WEB的报表组建,使用这些组建时先要在客户端安装,然后,由服务器端来生成VBscript脚本,在客户端运行、创建相应的组件对象;利用组件对象来进行打印操作。这种方法只要客户端的com组件开发完成。使用者只要熟悉vbscript或lavascript脚本语言就可能方便的调用。这种方法打印效率高、功能丰富、能做到精确定位打印以及批量打印另外安装成本低廉。ACtiveX只有1M多,在客户端首次使用时需要安装一次,无需再次安装。但客户端毕竟需要安装组件,部署不是很方便。另外对浏览器版本也有一定的要求。

    利用水晶报表实现打印

    水晶报表(Crystal Reports)是一个优秀的报表开发工具,水晶报表以其简单、易用和强大的功能令开发人员倍受青睐。Crystal  Reports  for Visual Studio.NET 2005具有以下特点:

    ①针对所有以.NET为目标的程序语言提供高度的集成,可以在Windows应用程序或ASP.NET Web应用程序的项目中使用本身所专长的程序语言来设计报表。

    ②提供强大的报表设计工具CrystalReportDesigner,可以通过其定义报表的数据源,定位各个控件,轻易制作出各种复杂格式的报表。

    ③通过报表查看器控件(CrystalReportViewer)设置报表的格式和自定义导出选项等,将报表展现在Web Form网页上。

    ④用户仅需要Web浏览器就可以查看报表。

    水晶报表打印非常灵活、方便,打印的内容丰富多彩,用户仅需要Web 浏览器就可以查看报表,用户可将报表导出各种格式的文件,如.pdf,.doc,.xls,.html,.rpt等,用户不仅与报表可以轻松交互,而且具有内容创建、计算、分组、查询等强大功能。

    Crystal Reports for Visual Studio.NET 2005的执行模式有两种:Pull Model(拉模型)和Push Model (推模型),执行任一种模式均可获取Crystal Reports数据。在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时,与数据库的连接和为了获取数据而执行的SQL命令都同时由Crystal  Report本身处理,不需要开发人员编写代码。因此,在运行时如无须编写任何特殊代码,则使用拉模型。相反,推模型需要开发人员编写代码以连接到数据库,执行SQL命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法可以将连接共享置入应用程序中,并在Crystal Reports收到数据之前先将数据筛选出来。

    在Visual Studio 2005中通过CrystalReportViewer控件来查看报表源中的数据,并对报表进行设计,使报表更加美观。

    结束语

    综上所述,本文对ASP.NET的Web打印技术作了初步的探讨,对每种实现方法优点及不足进行了简要介绍,在开发过程中用户应根据项目的实际需求进行选择,灵活处理WEB打印所遇到的各种问题,以达到较理想的应用效果。

     

    参考文献:

    [1]张跃廷.ASP.NET 程序开发范例宝典[M].北京:人民邮电出版社,2007:572-599.

    [2]李明刚,肖健.ASP.NET(c#)基础教程[M].北京:清华大学出版社,2006:294-392.

  • 相关阅读:
    JVM知识体系
    RabbitMQ学习11死信队列(拒绝消息)
    JUC知识体系
    RabbitMQ学习10死信队列(队列达到最大长度)
    Dropdownlist+objectdatasource设定“请选择”默认选项
    sql DATEPART函数使用
    win7 'IIS APPPOOL\Classic .NET AppPool' 登录失败
    sqlserver2000还原数据库时报设备激活错误的解决方法
    vss和vs2008组合搭建源代码管理器
    在配置win7 IIS浏览网站时 检测到在集成的托管管道模式下不适用的ASP.NET设置 的解决方法
  • 原文地址:https://www.cnblogs.com/chenqingwei/p/1579467.html
Copyright © 2011-2022 走看看