论文部分内容阅读
摘 要:针对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
ZU 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打印。
1 利用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” v align=“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=buttonvalue=直接打印 onclick=document.all.WebBrowser.ExecWB(6,6)>
<input type=buttonvalue=页面设置 onclick=document.all.WebBrowser.ExecWB(8,1)>
<input type=buttonvalue=打印预览 onclick=document.all.WebBrowser.ExecWB(7,1)>
此种方法优点是可以轻松实现打印、页面设置和打印预览等功能,客户端能独立打印目标文档,减轻服务器端负荷;缺点是源文档的分析操作复杂,并且源文档中的打印内容要有约束。
2 调用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的安全设置上有一定的要求。
3 利用第三方控件实现打印
目前有不少开发商提供的相关控件,可以实现Web打印功能,如MAX Reports、如意报表、ScriptX等。优秀的第三方控件,打印方式灵活,基本上程序能做到的web也能做得到,并且开发周期短,系统维护性好。但打印功能受控件本身限制,一般无法做到跨平台,并需支付相关费用,提高了系统的开发成本。
也可以自行开发实现Web打印,一般可以通过自行开发ActiveX控件、Java Applet或动态生成PDF文件等方式来完成。这种方式可定制性强,可以完全按照用户的要求进行设计Web页面,但开发周期长,开发和维护成本较高。
目前有一些软件公司使用JAVA开发基于WEB的报表组建,使用这些组建时先要在客户端安装,然后,由服务器端来生成VBscript脚本,在客户端运行、创建相应的组件对象;利用组件对象来进行打印操作。这种方法只要客户端的com组件开发完成。使用者只要熟悉vbscript或lavascript脚本语言就可能方便的调用。这种方法打印效率高、功能丰富、能做到精确定位打印以及批量打印另外安装成本低廉。ACtiveX只有1M多,在客户端首次使用时需要安装一次,无需再次安装。但客户端毕竟需要安装组件,部署不是很方便。另外对浏览器版本也有一定的要求。
4 利用水晶报表实现打印
水晶报表(Crystal Reports)是一个优秀的报表开发工具,水晶报表以其简单、易用和强大的功能令开发人员倍受青睐。Crystal Reports for Visual Studio.NET 2005具有以下特点:①针对所有以.NET为目标的程序语言提供高度的集成,可以在Windows应用程序或ASP.NET Web应用程序的项目中使用本身所专长的程序语言来设计报表。②提供强大的报表设计工具CrystalReportDesigner,可以通过其定义报表的数据源,定位各个控件,轻易制作出各种复杂格式的报表。③通过报表查看器控件(CrystalReportViewer)设置报表的格式和自定义导出选项等,将报表展现在Web Form网页上。④用户仅需要Web浏览器就可以查看报表。
水晶报表打印非常灵活、方便,打印的内容丰富多彩,用户仅需要Web 浏览器就可以查看报表,用户不仅与报表可以轻松交互,而且具有内容创建、计算、分组、查询等强大功能。
Crystal Reports for Visual Studio.NET 2005的执行模式有两种:Pull Model(拉模型)和Push Model (推模型),执行任一种模式均可获取Crystal Reports数据。在拉模型中,驱动程序将连接到数据库并根据需要将数据"拉"进来。使用这种模型时,与数据库的连接和为了获取数据而执行的SQL命令都同时由Crystal Report本身处理,不需要开发人员编写代码。因此,在运行时如无须编写任何特殊代码,则使用拉模型。相反,推模型需要开发人员编写代码以连接到数据库,执行SQL命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法可以将连接共享置入应用程序中,并在Crystal Reports收到数据之前先将数据筛选出来。
在Visual Studio 2005中通过CrystalReportViewer控件来查看报表源中的数据,并对报表进行设计,使报表更加美观。
5 结束语
综上所述,本文对ASP.NET的Web打印技术作了初步的探讨,对每种实现方法优点及不足进行了简要介绍,在开发过程中用户应根据项目的实际需求进行选择,灵活处理WEB打印所遇到的各种问题,以达到较理想的应用效果。
参考文献:
[1]张跃廷.ASP.NET程序开发范例宝典[M].北京:人民邮电出版社,2007:572-599.
[2]李明刚,肖健.ASP.NET(c#)基础教程[M].北京:清华大学出版社,2006:294-392.
关键词:ASP.NET 2.0 ;B/S模式 ;WEB 打印
中图分类号:TP393.092 文献标识码:A
Study on Implementation of WEB Print Method Based on ASP.NET 2.0
ZU 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打印。
1 利用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” v align=“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=buttonvalue=直接打印 onclick=document.all.WebBrowser.ExecWB(6,6)>
<input type=buttonvalue=页面设置 onclick=document.all.WebBrowser.ExecWB(8,1)>
<input type=buttonvalue=打印预览 onclick=document.all.WebBrowser.ExecWB(7,1)>
此种方法优点是可以轻松实现打印、页面设置和打印预览等功能,客户端能独立打印目标文档,减轻服务器端负荷;缺点是源文档的分析操作复杂,并且源文档中的打印内容要有约束。
2 调用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的安全设置上有一定的要求。
3 利用第三方控件实现打印
目前有不少开发商提供的相关控件,可以实现Web打印功能,如MAX Reports、如意报表、ScriptX等。优秀的第三方控件,打印方式灵活,基本上程序能做到的web也能做得到,并且开发周期短,系统维护性好。但打印功能受控件本身限制,一般无法做到跨平台,并需支付相关费用,提高了系统的开发成本。
也可以自行开发实现Web打印,一般可以通过自行开发ActiveX控件、Java Applet或动态生成PDF文件等方式来完成。这种方式可定制性强,可以完全按照用户的要求进行设计Web页面,但开发周期长,开发和维护成本较高。
目前有一些软件公司使用JAVA开发基于WEB的报表组建,使用这些组建时先要在客户端安装,然后,由服务器端来生成VBscript脚本,在客户端运行、创建相应的组件对象;利用组件对象来进行打印操作。这种方法只要客户端的com组件开发完成。使用者只要熟悉vbscript或lavascript脚本语言就可能方便的调用。这种方法打印效率高、功能丰富、能做到精确定位打印以及批量打印另外安装成本低廉。ACtiveX只有1M多,在客户端首次使用时需要安装一次,无需再次安装。但客户端毕竟需要安装组件,部署不是很方便。另外对浏览器版本也有一定的要求。
4 利用水晶报表实现打印
水晶报表(Crystal Reports)是一个优秀的报表开发工具,水晶报表以其简单、易用和强大的功能令开发人员倍受青睐。Crystal Reports for Visual Studio.NET 2005具有以下特点:①针对所有以.NET为目标的程序语言提供高度的集成,可以在Windows应用程序或ASP.NET Web应用程序的项目中使用本身所专长的程序语言来设计报表。②提供强大的报表设计工具CrystalReportDesigner,可以通过其定义报表的数据源,定位各个控件,轻易制作出各种复杂格式的报表。③通过报表查看器控件(CrystalReportViewer)设置报表的格式和自定义导出选项等,将报表展现在Web Form网页上。④用户仅需要Web浏览器就可以查看报表。
水晶报表打印非常灵活、方便,打印的内容丰富多彩,用户仅需要Web 浏览器就可以查看报表,用户不仅与报表可以轻松交互,而且具有内容创建、计算、分组、查询等强大功能。
Crystal Reports for Visual Studio.NET 2005的执行模式有两种:Pull Model(拉模型)和Push Model (推模型),执行任一种模式均可获取Crystal Reports数据。在拉模型中,驱动程序将连接到数据库并根据需要将数据"拉"进来。使用这种模型时,与数据库的连接和为了获取数据而执行的SQL命令都同时由Crystal Report本身处理,不需要开发人员编写代码。因此,在运行时如无须编写任何特殊代码,则使用拉模型。相反,推模型需要开发人员编写代码以连接到数据库,执行SQL命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法可以将连接共享置入应用程序中,并在Crystal Reports收到数据之前先将数据筛选出来。
在Visual Studio 2005中通过CrystalReportViewer控件来查看报表源中的数据,并对报表进行设计,使报表更加美观。
5 结束语
综上所述,本文对ASP.NET的Web打印技术作了初步的探讨,对每种实现方法优点及不足进行了简要介绍,在开发过程中用户应根据项目的实际需求进行选择,灵活处理WEB打印所遇到的各种问题,以达到较理想的应用效果。
参考文献:
[1]张跃廷.ASP.NET程序开发范例宝典[M].北京:人民邮电出版社,2007:572-599.
[2]李明刚,肖健.ASP.NET(c#)基础教程[M].北京:清华大学出版社,2006:294-392.