基于ASP.NET的Web打印技术研究

时间:2022-09-11 09:30:45

基于ASP.NET的Web打印技术研究

摘要:打印是很多Web应用系统不可或缺的功能,而且是一项比较复杂的技术,针对中的Web打印问题提出了五种

>> 基于Web的技术的网站设计 基于.net的Web开发技术研究 基于的技术研究 基于的网站群动态建站技术研究 基于的数字水印图片制作技术研究 基于的Web注销功能的实现 基于 MVC6框架的Web应用开发研究 基于的仓储系统 基于技术的网站群系统设计 基于的数据库访问技术 基于技术的项目任务管理系统 基于的学生请假系统的研究 基于的博客网站设计研究 基于 MVC框架的研究 基于的课表查询系统研究 浅谈基于ASP的WEB数据库访问技术 基于物流系统 基于ASP环境下的Web站点设计研究 基于版本控制的《WEB应用开发―2.0》案例教学实践 浅析基于 Web应用程序的安全机制 常见问题解答 当前所在位置:l"), System.Text.Encoding.UTF8);

//进行实际的XSLT转换操作

xslt.Transform(XDoc, null, writer);

//操作完成后关闭XmlTextWriter对象

writer.Close();

采用服务器脚本动态生成XML文档时,发送内容类型应该设置为text/xml(普通html页面为text/html),字符编码应该为UTF-8,否则会出现编码错误问题。这种打印方式适合于格式变化大,数据量小的应用,但是客户端需要安装.NET Framework组件,对于数据量大的XML文件,解析速度不是很理想,页面首次加载时会有明显的延时。

3 利用第三方控件实现Web打印

采用第三方控件是开发Web应用系统比较好的选择,由于第三方控件的易操作性,可以让程序员完全从繁杂的打印编程中解放出来,在较短的时间内做出做秀的报表打印系统,进一步提高开发效率。但第三方控件一般不是免费的,下面以ScriptX.cab控件为例。

下载ScriptX.cab控件,修改codebase的值,默认下面的设置也可以,加载控件代码如下:

使用控件代码如下:

function PrintSet()

{

factory.printing.SetMarginMeasure(2)

factory.SetPageRange(false,l,3)//设置指定打印的页面

factory.printing.printer="HP DeskJet 870C"

factory.printing.copies=2

factory.printing.collate=true

factory.printing.papersize="A4"

factory.printing.paperSource="Manual feed"

factory.printing.header="This is MeadCo"

factory.printing.footer="Advanced Printing by ScriptX"

factory.printing.portrait=false

factory.printing.leftMargin=1.0

factory.printing.topMargin=1.0

factory.printing.rightMargin=1.0

factory.printing.bottomMargin=l.0

factory.printing.Print(false)//直接打印

factory.Printing.PageSetup()//打印设置

factory.printing.Preview()//打印预览

}

4 导出到Excel中实现Web打印

这种方式将Web打印问题转化成数据导出问题,开发过程简单易行。导出到Excel有两种方法可以实现:一种通过浏览器直接导出;另外一种通过COM接口来实现。本文采用第一种方式,这种方式不仅灵活,而且代码也很容易实现,具体代码如下:

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

Response.AddHeader("Content-Disposition","inline,filename="+HttpUtility.UrlEncode(labTitle.Text+".xls",Encoding.UTF8));

//AddHeader方法用指定的值添加HTML标题

StringBuilder MyBuilder=new StringBuilder();

StringWriter MyWriter=new StringWriter(MyBuilder);

HtmlTextWriter MyHtml = new HtmlTextWriter(MyWriter);

MyBuilder.Append("");

dtgSanitation.RenderControl(MyHtml);

MyBuilder.Append("var _userid = '';var _siteid =2230;var _istoken = 1;var _model = 'Model03'; WebPageSpeed =203; UrchinTrack();");

Response.Write(MyBuilder.ToString());

Response.End();

该方式需要注意两个问题:第一,导出DataGrid时,其各列应该为数据绑定列,按钮列导出时会出现不需要的结果,如果有类似于按钮列等非数据绑定列,应该在DataGrid对象的RenderControl之前,将它隐藏再导出。第二,DataGrid存在分页问题,因为RenderControl方法只处理当前页的数据,所以在此方法之前,应去掉DataGrid分页,将数据放到一页内再导出。

导出到Excel后用户可以自定义打印的内容和格式,具有良好的灵活性,适应性和控制性。但是此方法有一个限制

就是要保证安装有Excel软件,在客户端使用时要求客户端在IE的安全设置上有一定的要求。

5 利用水晶报表实现Web打印

利用水晶报表来处理打印问题,其优点是打印非常灵活、方便;打印的内容丰富多彩;有强大的内容创建、集成功能和高效的报表技术。其取得数据有两种方法来实现。

(1)Pull模式,即被请求时,水晶报表直接工具指定的驱动连接数据库,然后组装这些数据。

(2)Push模式,此时开发人员必须自己编写代码连接数据并组装到DataSet,同时将它传送到报表。在Push模式下,通过使用连接共享,以及限制记录集合的大小,可以使报表性能最大化,所以我们使用Push模式来解决问题,其主要步骤为:

①添加数据集文件,创建相应的数据集表(即创建一个类型化数据集)。

②使用水晶报表专家生成报表。

③添加报表查看器控件,设置好控件的属性。

④编写相关代码。

实现代码如下:// 声明一个报表对象

Reports ReportDoc=new Reports();

SqlConnection MyConn;

private void Page_Load(object sender,System.EventArgs e)

{ string strProvider="Server=(local);DataBase=test;UID=sa;PWD=";

MyConn=new SqlConnection(strProvider);

}

//点击查看按钮,得到动态统计图

private void IgbFind_Click(object sender,System.Web.UI.ImageClickEventArgs e)

{//调用SQL存储过程

string strSel = "sp_StatDeptWeekSani'"+DdlContext.SelectedValue+"','"+DdlYear.SelmtedValue+"'";

SqlDataAdapter MyAdapter=new SqlDataAdapter(strSel,MyConn);

DataSet dsl=new DataSet();

MyAdapter.Fill(dsl,"tblTongji");

ReportDoc.SetDataSource(dsl);

Crv.ReportSource= ReportDoc; //报表查看器对象Crv显示该报表

}

//点击打印按钮,打印出该统计图

private void IgbPrint_Click(object sender,System.Web.UI.ImageClickEventArgs e)

{//设置打印页边距

PageMargins MyMargins=ReportDoc.Printoptions.PageMargins;

MyMargins.bottomMargin = 250;

MyMargins.leftMargin = 350;

MyMargins.rightMargin = 350;

MyMargins.topMargin = 450;

ReportDoc.Printoptions.ApplyPageMargins(MyMargins);

ReportDoc.Printoptions.PrinterName = @"HPLaserJet 4000 Series PS";

ReportDoc.PrintToPrinter(1,false,0,0); //参数设置为0表示打印所有页。

}

水晶报表有很多优点,适合于开发大型的报表系统,使用这种方式进行打印非常灵活,但是也存在客户端需要安

装和部署不方便的缺点。在.NET 2003框架中,由于水晶报表属于第三方控件,需要注册才能够使用。

6 结束语

基于的Web打印问题是我们在开发Web应用系统所面临的实际问题,具体采用何种方式进行Web打印,这涉及到方案的适用性问题。一方面是由打印内容、打印方式和其它用户打印需求决定;另一方面还要考虑系统的实际运行效率和系统的安全性。为了进一步提高系统的安全性,可以直接采用SSL安全套接字等已经成熟的WEB加密技术。

参考文献:

[1]唐伟环境下查询式Web动态报表的实现[J].计算机与现代化,2006(9):123-126.

[2]徐海贤之Web打印初探[J].信息技术,2006(1):95-117.

[3]Visual Studio Magazine2002-2003中文精华合集[M].北京:电子工业出版杜,2OO4.

[4]Mickey Williams.Visual c#.NET技术内幕[M].北京:清华大学出版社,2004.

收稿日期:2008-01-26

作者简介:吴观福(1975-),男,华中科技大学硕士研究生,东莞理工学校讲师,软件设计师,研究方向:数据库技术、软件开发技术。

上一篇:浅谈校园网网络安全及解决方案 下一篇:E-learning系统中教育资源元数据模型设计方法...