JasperReports 基础概念


1.iReport是开源报表软件JasperReport的可视化设计工具,Jasperreports是用LGPL license提交的,因此使用Jasperreports时
局限性较小,这意味着可以在商业软件中不用购买它的license而使用它;
2.报表生命周期;
Jasperreports生成的报表文件的生命周期和一个普通的Java类相似。
一个Jasperreports报表文件也有一个通过DTD定义的xml格式的源文件,当报表生成的时候会把这个xml格式的源文件成一个
jasper类型的文件,jasper文件可以在应用程序中被加载生成最终的报表。
3.报表结构:
栏,Jasperreports垂直分成若干部分每一部分叫作‘band';每一个band有自己的特性,生成报表时被打印的次数是不同的;
从上到下依次为:title、pageHeader、columnHeader、detail、columnFooter、pageFooter、lastPageFooter、summary;
1.Title Band:在整个报表的第一页的最上面部分显示,其他页面不会出现此band内容;
2.pageHeader Band: 其内容会在整个报表中的每一个页面中出现,显示在页面的上部,如果是报表的第一页,其内容将
显示在Title Band下面,除首页之外的所有页面中pageHeader内容将显示在页面的最上端;
3.pageFooter Band:显示在所有页面的最下端;
4.Detail Band: 报表内容段,是报表设计中需要重复出现的内容,在每页都会出现;
5.columnHeader Band:针对Detail Band的表头段,一般情况下在这个段中画报表的表头;
6.columnFooter Band:针对Detail Band的表尾段;
7.Summary Band:表格的合计段,出现在整个报表的最后一页中的Detail band的后面,一般用来统计报表中的某一个或某几个
字段的合计值;

4.报表元素:
元素主要指图形对象:text,rectangle等,ireport没有段落,表格或分页的概念,最基本的对象有七个:
1.Line,
2.Rectangel,
3.Ellipse,
4.Static text,
5.Image,
6.Subreport,
7.Crosstab,
8.Chart,
其中,ireport提供两种特殊的图形对象chart和barcode;
所有对象都有通用的属性:高度,宽度,位置,所在的band等。
所有对象都有各自特有的属性;
每个元素都必须在一个band内部,如果跨越一个以上的band,那么时将抛出元素位置错误的
添加元素到报表,可以从主工具栏选择相应的工具,然后添加到报表区域中;
对于这些添加到报表区域的对象,可以通过双击对象或右键菜单打开元素的属性设置窗口;
属性窗口是若干个标签页,Common标签里包含每一个组件具有的通用属性,其他标签针对各自元素的属性;

5. 字体和样式:
样式在common标签中,Fonts字体是描述text的;
Jasperreports中可以为每一个元素指定字体属性,可以定义一个名为‘Report font'的全局字体。

设计样式:主菜单‘格式'—-样式—新建样式,定义属性值;

使用样式:每个元素的属性窗口的‘通用'标签中都有一个style样式属性下拉框,从中选择定义好的style即可;

设置样式的动态使用条件:新建样式时,在样式条件中增加一个使用条件:如,($F{SALARY}.intValue()>3500?new Boolean(true):new Boolean(false));

接下来把使用的字段field拖到报表中,并应用该样式到使用的field;

6. 字段,参数和变量:Fields,Parameters,Variable;
这三种类型都可以保存数据,可以用在某些地方的Expression中,通过一定的逻辑在报表生成的时候动态的更改某些值;
他们有类型的概念,其类型是一个标准的java Object类;

创建,修改,删除以上三个对象:View查看—Fields,Parameters,Variable子菜单。。。
1.字段,Fields,JasperReports中专门用来组织记录。可以根据jasperreports中各种类型的数据源创建需要的Field;
Fields的创建需要属性:name,type和description, ;

引用字段:在对象的Expression里用如下语法引用Fields:$F{field name} // EL表达式
引用com.bstek.domain.Person Bean里的username字段,可以如下:
(com.bstek.test.domain.Person)${username}

query创建Field:
在jasperreports的设计中使用 query的方式来创建或记录字段直接简单:
点击主工具栏按钮—ReportQueryDialog窗口——-输入检索并创建Fields,

前提:已经创建和配置好数据源连接并处于激活状态,输入:select × from EMP等将自动启动查询引擎,在下面窗口选择
要的Fields,然后点击ok,fields就创建出来,查看文档结构栏的字段选项可以看到添加的fields;

用JavaBean生成Fields:
JasperReports除了以 query为数据源,还可以使用含有getter和setter方法的JavaBean(POJO)对象来创建。
Fields就是POJO类的属性(或者属性的属性,子对象的属性);

在前面的‘报表查询'窗口选择javaBean datasource标签,
指定完整的包.类名称,点击读取属性,可以浏览这个对象,可以看到直接属性嵌套的对象,双击嵌套的对象可以查看
子对象的属性;

要把一个属性添加到field列表,只需。。。

以文本打印field,直接把field拖到report的band里或者在report的band里添加一个textfield然后设置它的expression,
和textfield的类型,还可以定义一个pattern进行格式化;

Parameters:用来在打印的时候从程序里传值到报表里,通常是起参数传递的作用。
用在特定场合(如sql查询的条件)和report中任何一个需要从外部传入的变量等(如一个Image对象所包括的char或报表title的
字符串)。

JasperReports中Parameters的机制是允许用户通过应用程序传递参数到报表当中。在jasperreport中的某个对象中的expression
可以通过下面的语法来访问一个当前的report中存在的parameter:
$P{parameter name}

若应用程序没有为报表定义parameter赋值,parameter将取定义它的时候设置的默认值,
其默认值default value是一个类类型:必须:New Double(0.123)的格式来定义其值;

如果这样组织sql:select * from employee where dept_id=$P{deptId}
sql查询引擎将会采用PreparedStatement来处理传入的deptId值以此作为查询条件;

可以用如下特殊语法代替sql语句的一部分:
$P!{parameter name}, 如:定义参数:MyWhere值为: where dept_id=D11,查询语法如下:
select * from employee $P!{MyWhere}
等价于:select * from employee where dept_id=D11;

在程序里使用Parameters:
在应用程序里如果想把某个值传递到报表中的parameters中,可以把相关的值放入一个扩展java.util.Map接口类,
然后传入到report里:
代码:
。。。
Map hm = new HashMap();

JasperPrint print = JasperFillManager.fillReport(fileName, hm, new JREmptyDataSoruce());

fillReport 是一个关键的方法,它允许你通过一个文件名,一个参数集来传递到我调用的报表当中。

以下处理可以将外部传入的值作为我们报表的title:

1. 声明一个parameter,这个parameter是java.lang.String类型,名字为:name_report:
2. 将这个parameter拖到page中的title band。修改上面的程序代码:
HashMap hm = new HashMap();

hm.put(“name_report”, “report title”);

JasperPrint print = JasperFillManager.fillReport(fileName, hm, new JREmptyDataSource());

一般地只有在某一个parameter一定要从外部程序传入时我们才需要为一个parameter设置一个值,如果一个parameter
没有从外部程序赋值,jasperreports使用Default Value Expression来对一个parameter进行初始化,如果连Default
Value Expression都没有设置,就是null;

传递给parameter的对象可以是String,Integer,Boolean等java小对象,还可以传递足够大的复杂的对象,如图像:java
.awt.Image,或者传递一个为子报表提供的datasource连接等。
在用Map类型传递参数时,传递的参数要与report里德parameters类型保持一致,否则会抛出ClassCastException;

JasperReports内嵌的Parameters:
对于用户是只读的,内嵌的parameters列表:
pagination

Variables: 用来存储对某些字段计算后的结果,比如sum等:

引用Variable:$V{variable name}

变量类型:Java类型;
计算类型:计算结果,值为nothing时表示不作任何计算;
做一个变量的计算意味着执行一个表达式,如果计算类型为nothing,那么jasperreports将会根据variable expression
为variable赋值,计算类型:
1。Nothing,不作任何计算;
2。Count, 对记录集数量进行循环累加(计算有多少条记录),这和sum不一样,sum的计算是针对数字的,会对数字进行累加
操作;
3。Distinct Count,也是对计算有多少条记录的累加操作,只是在累加过程中会忽略已经的出现的记录(比如某个字段的值
已经出现后就不会再记录)
4。Sum,添加每一次表达式(只能是数字类型)迭代的结果到变量中;
5。Average,用算术的方法来计算表达式累加结果的平均值;
6。Lowest,返回表达式最小值;
7。Highest,返回表达式最大值;
8。StandardDeviation,根据表达式所有值返回标准方差;
9。Variance,返回表达式接收到的值的变化;
10。System,不做任何计算并且表达式也是没有价值的,在这样的用例中,报表引擎仅仅保存内存中variable的最后的值;

Reset Type:重置类型。表示一个变量在什么时候做重置操作,reset类型如下:

1。None,任何时候都不做重置操作,
2。Report,在报表创建的时候Variable才会对表达式进行初始化;
3。Page,Variable的初始化在每一页都做一次reset操作;
4。Column,Variable的初始化在每一列都做一次reset操作(这里的Column指的是report里德page的Column,每个报表的
Column可以通过报表的Edit–report properties窗口进行修改);
5。Group,变量的初始化在每一个组都做一次reset操作;

Reset Gruop,重置组,如果选择group重置类型,这里要选择相应的组名称;

Increment,增量类型:指定当一个Variable值被评估或当你想要这个组采用类似于subtotals或averages来计算:
Increment Group:如果这个group的Increment type被勾选,将指定这个组决定Variable的Increment;
Custom Incrementer Factory Class:指定一个实现了JRIncrementerFactory接口的Java类名称,通常用来定义一些诸如sum
之类的非数字类型的操作;
Variable Expression:Java的expression,用来标识Variable每一次迭代的值;
Initial Value Expression:是一个为Variable初始化时采用的expression;

内置variables:
Jasperreports提供了内置的variables(由报表引擎直接管理),这些变量是只读的:
1。PAGE_NUMBER 当前页的页数;
2。COLUMN_NUMBER, 当前的列数;
3。REPORT_COUNT, 当前的记录数目;
4。PAGE_COUNT, 当前的页号;
5。COLUMN_COUNT, 当前的列号;
6。_COUNT, 在里的记录总数;

设置报表栏band属性:
7个主要的bands和一个名为background德band;
向报表中添加一个group就会有两个新的band添加到报表当中:group footer bands和group header bands;
点击栏‘按钮弹出bands属性设置;
可以设置一个表达式,定义此表达式值为真时输出band,此时表达式的返回值必须是Boolean类型,New Boolean(true);
表示此bands总会被打印,不输入内容,默认就是始终打印,
表达式可以使用fields,variables,parameters。
用类似如下代码控制当前band是否输出:
($F{SALARY}.intValue()>4000?new Boolean(true):new Boolean(false));
band的大小可以用鼠标拖拉完成;
Groups组,允许对报表的数据进行全新的切割分组组合,分组是通过一个表达式来定义的,Jasperreports会通过此表达式
进行计算分组情况,每一个新的组都是从我们在expression Value里输入的表达式发生变化的时候开始的,

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《JasperReports 基础概念
本文地址:https://www.zhiletu.com/archives-332.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微