Report Structure 报告的结构
本章描述报告的结构,可用的report对象和它们的属性。这基本上是JasperReports的快速参考。
1、Expressions 表达式
表达式是JasperReports的核心特征。它是一个重要的机制,允许操纵和显示报告数据,执行各种计算,自定义报告的外观和报告对象的可视性。
1)一个典型的表达式
$F{LastName} + " " + $F{LastName}
一个JasperReports的表达式是以Java表达式为基础的,再加上一些附加的语法,它允许引用参数、变量和字段等。
比如说要引用一个名叫DATA的参数时,语法应为$P{PARAM_NAME}。
对变量和字段来说,其引用语法分别为$V{VAR_NAME}和$F{FIELD_NAME}。
注意:在JasperReports的groovy脚本语言中,也同样可以用$F,$P,$V引用参数、变量和字段。
2)表达式的语法
(1)$F{FIELD} 引用名为FIELD的字段;
(2)$V{VAR} 引用名为VAR的变量;
(3)$P{PARAM} 引用名为PARAM的参数;
(4)$P!{PARAM} 引用名为PARAM的参数;这个特殊的语法仅能用于report的查询中。它允许插入参数的内容到查询字符串中。例如,它能被用于创建一个带通过参数来指定WHERE条件的动态查询。
$R{keyName} 在resource bundle中检索带keyName关键字的字符串。
注意:表达式是用Java或Groovy写成的,这意外着可以用Java强大的功能,如调用方法,允许构建无限复杂的表达式。还要注意,表达式的结果总是一个对象。
3)更多的表达式
(1)new Integer(Math.max($V{Price1},$V{Price2}))
(2)(new SimpleDateFormat("dd/MM/yyyy")).format($F{OrderDate})
(3)$F{SpecialOffer}.booleanValue()? $F{SpecialPrice} : $F{Price}
2、内建的函数
JasperReports提供了一套内建的函数用于report表达式中。这些函数尽管是内建的工具,还是可以在普通操作中执行它。
注意:目前这套函数很有限,在未来会得到扩展。
1)例:使用内建函数
msg("Total cost is {0}", $F{TOTAL})
msg("Matched {0} products out of {1}", $F{MATCHED}, $P{TOTAL})
2)内建的函数
(1)String str(String key);
从和report相联系的resource bundle中得到给出的key的一个字符串。这个函数的功能和使用$R{key}语法等价。
(2)String msg(String pattern, Object arg0);
建立一个带给定的pattern和给定参数来指定其格式的java.util.MessageFormat对象。
(3)String msg(String pattern, Object arg0, Object arg1);
同上;
(4)String msg(String pattern, Object arg0, Object arg1, Object arg2);
同上。
3、Report 报告
Report是表现为报告模板的根对象。在报告执行期间,report模板和数据组合成最终的文档。
报告的属性有:
(1)Report Name 报告名;
(2)Units 报告的单位;有:像素Pixels,毫米Millimeters,厘米Centimeters和英寸Inches。
(3)Language 报告表达式使用的语言;目前有Java和Groovy两种。
(4)Orientation 页的方向;其可能值为水平Protrait和纵向Landscape。
(5)Page Width 以报告单位指定的页宽;
(6)Page Height 以报告单位指定的页高;
(7)Page Size 报告的尺寸,即为page width和page height。
(8)Left Margin 以报告单位指定的左边页边距;
(9)Right Margin 以报告单位指定的右边页边距;
(10)Top Margin 以报告单位指定的顶部页边距;
(11)Bottom Margin 以报告单位指定的底部页边距;
(12)Column Count 报告中的列数;
(13)Column Spacing 以报告单位指定的列边距;
(14)Column Width 以报告单位指定的列宽;
(15)Print Order 填充列的顺序;有垂直Vertical和水平Horizontal两种。
(16)Float Column Footer 浮动列脚,指出是否在列底部或明细表最后或组脚进行打印;
(17)Default Font 缺省字体;
(18)Default Style 缺省风格;
(19)Scriptlet Class 脚本类,它必须是JRAbstractScriptlet类的子类。如果省略,将创建一个JRDefaultScriptlet的实例。
(20)Summary New Page 新页的概要;
(21)Title New Page 新页的标题;
(22)When No Data Print 无数据时的打印,有三个选择:No Pages 表示0页;Blank Page 空白页;All Sections No Detail 除了detail section,其它的都打印。
(23)Query 查询,用来检索数据到报告中。
(24)Query Language 查询语言,有五个值:SQL 用于JDBC数据源的查询语言;HBM Hibernate用于Hibernate数据源的查询语言;XPath 用于XML数据源的查询语言;EJBQL用于支持Java持久层(Persistence)API的数据源的查询语言;MDX 用于Mondrian数据源的查询语言。
(25)Imports java输入的列表,例如:java.util.*和java.text.SimpleDateFormat格式。用于简化report的表达式。
(26)Resource Bundle 为report提供了本地的系列字符串。在报告中,本地字符串能用$R{key}引用。
(27)When Resource Missing Print 允许自定义引擎在resource bundle中处理丢失的resource。有4种选择:Null 丢失的resource不打印;Empty 丢失的resource为空;Key 用$R{key}指定的key来打印; Error 用错误来中断报告的执行。
4、Styles 风格
一个report可以定义大量的风格。一旦定义了,它们能和report对象联系起来,为了给各种可视视图提供基本的配置。report允许用模块化的方式来定义模块的风格。
风格有相关联的条件风格。条件风格允许当其表达式为真时改变风格。
1)风格的属性有:
(1)Name 风格名;
(2)Parent Style 父风格;
(3)Foreground 前景色;
(4)Background 背景色;
(5)Mode 方式,决定是否带透明度;
(6)Pen 画笔 有6种选择:None 无线;1 Point 正常宽度的线;2 Point 中等宽度的线;4 Point 粗线;Dotted 虚线;Thin 细线。
(7)Fill 填充;决定对对象进行填充的模式;
(8)Box 指定盒子的属性,如边框类型,边框颜色,是否填充。
(9)Horizontal Alignment 水平排列;有3种选择:Left 左;Center 中;Right 右。
(10)Vertical Alignment 垂直排列;有3种选择:Top 顶;Middle 中;Bottom 底。
(11)Scale 比例;指定图像的比例,有3种选择:Clip 尺寸不适合时,多余部分省略;Fill Frame 图像按比例填充进Image对象中;Retain Shape 保留原形状进行填充。
(12)Radius 指定矩形边框倒角的弧度;
(13)Pattern 用Text Field表达式的值来指定样式;其日期类型的值用java.text.SimpleDataFormat类来定义;其数值型的值用java.text.DecimalFormat来定义。
(14)Blank When Null 当Text Field表达式的值为null时显示空白;
(15)Line Spacing 线距;有3种选择:Single:单倍线距;1 and 1/2:1.5倍线距;Double:双倍线距。
(16)Rotation 旋转;有3种选择:None 不旋转;Left 左旋180度;Right 右旋180度。
(17)Styled Text 是一个标志位,用来指定是否text对象包含了已定义风格或规则的text。
(18)Font Name 字体名;
(19)Font Size 字体的尺寸;
(20)Bold 粗体;
(21)Italic 斜体;
(22)Underline 下划线;
(23)Strike Through 通过标准位来取消;
(24)PDF Font Name:PDF字体名;
(25)PDF Encoding:PDF编码;
(26)PDF Embedded是一个标志位,指定是否PDF字体应该嵌入到文档中。
2)条件风格的属性:
和上面仅有一点点的不同。其不同的属性为:
Condition Expression 条件表达式;是一个布尔型的表达式,用于判断是否应用条件表达式。
5、Section Properties 节属性
Section的种类前面已经讲了,这里只是补充讲述它的属性:
(1)Height 以报告的单位指定的section的高度;
(2)Print When Expression 是一个布尔表达式,决定是否打印本Section;
(3)Split Allowed 一个标志位,指示当Section超过当前页面的尺寸时,是否允许分割它。如果为真,当前Section将迁移到下一页。注意:如果Section在下一页也不适合时,则不管标志位值如何,都会分割它。
6、Groups 组
一个report可以定义大量的组。组表示决定带相关数据的可视组的表达式名。一旦声明后,组能在报告任意地方使用。
一个数据组用一个表达式组来识别。
注意:组机制不能完成来自于数据源数据的任何排序。如果想要有序的数据,必须把数据源的数据进行先排序处理。
组属性:
(1)Name 组名;用于引用组。
(2)Expression 表达式;决定report数据的组;
(3)Min Height To Start New Page 开始新页的最小高度;
(4)Reprint Header On Each Page 一个标志位,指示在每一页的开始处是否重新打印组头;
(5)Reset Page Number 重设页数,一个标志位;在组头在新页开始处打印时,是否重新设置页数;
(6)Start New Column 一个标志位,是否在新列中总是打印组头;
(7)Start New Page 一个标志位,是否在新页中总是打印组头;