代码改变世界

[翱捷报表]报表系统的文件设计

2011-02-20 20:42  水随风  阅读(390)  评论(0编辑  收藏  举报

背景

在报表打印的过程中,总结出了基本的报表格式。

前言

为了能使绘制出来的报表能够很好的和其它应用程序兼容,报表设计器会最终会将绘制好的表报保存为通用的文件格式。而该使用哪一种文件格式呢?根据研究和分析,在现在常见的报表文件中,除了那些二进制加密处理过的文件外,可以看到的类型有通过XML格式定义的报表文件,通过程序语法解释的编程式报表文件,还有由一些编程语言集成在一起的报表文件—也算是一种编程式报表,但大部分的报表使用的是XML格式的。
XML文档是国际标准的文档格式,非常开放,其他应用程序很容易利用设计器生成的文件,简化了设计器和其他应用系统的数据接口。因此,在系统报表文件的格式选择上,采用了XML文件格式。
报表文件格式的确立,主要以文件格式可读性,可操作性作为确立标准。而且要考虑这种文件格式的友好程度,是否能在代码中很好的被访问,并且有很好的容错。在设计报表文件格式的时候,会注意到这种格式需要很好的在程序与设计器之间访问,而且要很好的被各种程度的开发人员所认同,比如说WEB开发人员,如果以一个二进制的文件就不会很直观让WEB开发人员读取到,所以采用了XML作为报表内容的载体。其标签也与中间件中的类库一一对应,属性也借鉴了WEB开发中的部分标签。这会让人更加容易直接从文件中查看,尽管大部分情况下会直接使用程序进行读取而不会去看。并且在一定的规则或文档下,可以很快转化为office,pdf等压缩可视存储格式。
在报表格式设计的时候还有一个比较关键的因素,就是XML是很容易也很方便与其他报表程序及跨地域的网络中所共享的。这是选择它的另一个原因。

设计

在设计报表格式的过程中,遵循了从大到小,从基础到特殊的元素设计原则。即从最外层的基本元素开始设计,从最简单的打印功能元素开始设计。

在报表成型的过程中,首先要指定这个报表所要显示的长宽及纸张的一些属性,这些都是在报表传到打印机进行打印时所必须设定的属性,而且一张一张的报表也是有自己特有的一些属性的。通常情况下,不会太关心纸张的大小和长宽,那是因为大多的报表设计程序在设计初期就会指定好工作区域(报表模板)的长宽及纸张类型,那么它对某张报表进行打印和输出,无法完成多报表同时打印的操作,因为许多报表软件打印设计时是争对某一固定的长宽格式进行打印的。
因此在XML文件中用AojPaper做根元素来标示。这样在打印的过程中就会对每张报表做指定的长宽和纸张设置,就可以完成多报表同时打印的复杂要求了。下表是报表文件中的AojPaper标签的定义。

表1 AojPaper的属性说明

属性名 说明
Id 唯一标识
Width 打印区域宽度
Height 打印区域高度
PaperSizeName 打印纸类型
Orientation 指定如何在打印介质上确定内容页的方向
Margin 页面边缘宽度
GridStyleFlag 指定报表设计区域是否需要网格布局
DrawByGridStyle 指定在绘制对象时是否需要参照网格布局
DistanceAboutGridStyle 网格布局时候个点的距离

在本软件中包含了三个最基本打印元素:文本、图片、表。然而这些元素都是包含在AojPaper这个标签之下的。在文本打印中,文本被定义成Label。

表2 是报表文件中的Label标签定义

属性名 说明 默认值
Id 对象Id  
PositionX 横坐标 0
PositionY 纵坐标 0
Width 0
Height 0
BorderStyle 边框样式 Solid
BorderWidth 边框宽度 0.5F
BorderColor 边框颜色 #000000
BackStyle 背景样式 None
BackColor 背景颜色 #000000
Shape 边框形状 Rectangle
Alignment 字体打印的显示方向 0
Format 显示的样式 NoFormat
FamliyName 系统字体名称 Consolas
FontSize 字体大小 10
FontStyle 指定应用到文本的字形信息 0
Color 字体颜色 #000000
ViewFormat 显示的格式 0

从Label的标签内部中还有一个子标签,即Text标签,Text标签用于对所要打印的文字的显示属性进行设定。在文字打印的过程中,通常是先指定一块区域然后在这段区域内进行打印,在这块区域中用一些属性来描述一些打印细节,那么在图片的标签中没有这种内部镶嵌的标签,因为作为图片元素的目的只是显示图片,在显示图片中,标签定义如表所示:

表3 是报表文件中的Image标签定义

属性名 说明 默认值
Id 唯一标识  
PositionX 横坐标 0
PositionY 纵坐标 0
Width 0
Height 0
BorderStyle 边框样式 Soild
BorderWidth 边框宽度 0.5F
BorderColor 边框颜色 #000000
ImageMode 图片读取模式,分为base64格式读取和文件路径读取 1
Src 图片文件路径  

在实例中,有一个ImageMode属性,这个属性主要是区分Image的读取模式,如果是“1”则是通过路径来获取图片,如果是“2”则是通过base64string转化后读取图片。前者适合特殊图片生成时图片量较大的情况,后者适合单图片,并且图片量较小的情况。

表的打印是比较复杂的,它的打印是有结构的,有纵向的和横向的区别。在表的最小元素即单元格的打印中,基本与文本(Label)打印方式相同。在表的格式中包含Column、Row、Cell三个标签,那么表的标签定义如表4:

表4 是报表文件中的Table标签定义

说明 属性\标签 Table Cell Column Row
唯一标示 Id -
起始原点横坐标 PositionX - - -
起始原点纵坐标 PositionY - - -
宽度 Width - -
高度 Height - -
边框样式 BorderStyle - -
边框宽度 BorderWidth - -
边框颜色 BorderColor - -
背景样式 BackStyle - -
背景颜色 BackColor - -
字体显示方向 Alignment - - -
边框形状 Shape - - -
文字显示模式 Format - - -
字体名称 FamliyName - - -
字体Style FontStyle - - -
字体大小 FontSize - - -
字体颜色 Color - - -
打印内容Format ViewFormat - - -
合并单元格 ColSpan - - -

结论

这个报表的设计结果可以满足基本的报表打印需求。