预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共37页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

利用XML实现通用WEB报表打印(实现篇)--------------------------------------------------------------------------------摘要:本文结合代码详细讲解了《利用XML实现通用WEB报表打印》(以下简称"《利》")一文中所介绍的报表打印中的.NetWeb控件方案的实现及扩充过程。本文为《利》文的续作文中所举的代码示例均为C#语言编写。--------------------------------------------------------------------------------目录:引言软件原理结构设计代码实现方案扩充总结--------------------------------------------------------------------------------引言:在《利》刊出后有大量的读者发E-Mail给我表示对该方案非常感兴趣同时还询问具体如何实现报表格式的解析和打印细节并索取该程序的源代码。读者的热情让我始料未及虽然我一一对来信进行解答和发送了源代码但是还是深感抱歉和遗憾因为时间和精力的关系我不可能对每封信都作出很详细的答复而且我写的源代码也很乱事实上是我花了两个小时赶写出来的(原来的程序因为硬盘故障被销毁了)不但没有什么注解而且还不完善包括一些标签还没有被实现。为了弥补以前的缺憾我花了一些时间改进了程序的结构重写了全部的源代码实现了所有标签的功能下面就要开始讲解该程序的设计和编码过程在看此文之前强烈推荐您先阅读《利》一文来了解一下相关的概念如果在该文中已经有清楚讲解的部分本文将不再详细介绍这里只将主要讲解《利》文没有提及或是介绍得不清楚和读者来信提问最多的部分。--------------------------------------------------------------------------------软件原理:该软件的原理其实很简单就是要方便的解析出定义好的XML格式标记解读出文件中标记的参数定义最后将这些信息还原成打印机输出的图形格式。为了能表达出复杂的报表样式我们需要定义一些标记在这些标记中附加上具体的样式信息作用类似HTML的标签而我们的解析程序就相当于IE浏览器所不同的是IE将图形输出到屏幕而我们是将图形输出到打印机由于打印机相对于显示屏的特殊性(例如分页)因此我们不能直接采用网页浏览器的标签解析功能来打印需要自己来做一个满足需要的"打印浏览器"。针对大多数报表的功能需要我只定义了两种格式标签:文本(text)和表格(table)它们的具体属性定义和另外一些设置性的标签定义请参考《利》文这里再补充一幅结构图帮助读者理解。如下所示:--------------------------------------------------------------------------------结构设计:为了描述所有的样式标记我先定义了一个抽象基类PrintElement它拥有一个虚拟方法Draw然后对应表格和文本从PrintElement派生出两个子类分别是Table和Text我还创建了一个Parser类用来解析不同的样式标记和创建对应的对象它拥有一个静态的方法CreateElement用来根据不同的格式标签创建出对应的对象。结构图如下所示:读过《设计模式》的读者一定已经看出来了这种设计应用了设计模式中的一个非常著名的模式:AbstractFactory。这里使用该模式的好处就是让标签对象和解析器都独立出来降低了系统的耦合度有利于今后在需要的时候可以很容易的增加其它的格式标签(下文将会举一个实例)和方便的更换不同的用户界面(图中Client表示Windows应用程序或者是网页插件)。--------------------------------------------------------------------------------代码实现:首先创建一个"Windows控件库"的新项目在项目名称处写入RemotePrint如下图所示:然后把新建项目中的那个默认的UserControl1类它的构造函数名和文件名都改成PrintControl。再将它的背景颜色设置为白色添加三个按纽并将它们的Enable属性都设置为falseAnchor属性设置为BottomRight再添加一个Label控件用来显示程序状态它的Anchor属性设置为Left。如下图所示:再从控件栏中拖入三个打印对象:PrintDocumentPageSetupDialogPrintPreviewDialog如下图所示:将其中的pageSetupDialog