iReport 使用总结

iReport 使用总结

大小写问题

  1. parameter中如果小写,引用也小写
  2. $F{},一般都大写
  3. 子报表中引用父报表中查询出来的值时,只需要小写即可,即在子报表的parameter中只需要小写

获取系统当前时间

  1. 选择 TextField 类型为 java.util.Date,选择TextField的Expression Class(类型)为 java.util.Date
  2. 在 pattern 中选择时间格式
  3. 在 TextField Expression 中写 java.util.Calendar.getInstance().getTime()

避免为空

方法一、在属性选项中找到 blank when null 即可
方法二、$F{ABB614}?$F{ABB614}:""

设置时间格式

方法一、可以使用内嵌函数截取字符串来显示

  1. 利用substring来截取 (针对String类型)

    $F{AAE036}?(($F{AAE036}.toString()).substring(0,4)+”年”+($F{AAE036}.toString()).substring(4,6)+”月”+($F{AAE036}.toString()).substring(6,8)+”日”):””
    2、利用内置的函数来取 (针对date类型)

    “日期”+($F{ABB017}?String.valueOf($F{ABB017}.getYear()+1900)+”年”+String.valueOf($F{ABB017}.getMonth()+1)+”月”+$F{ABB017}.getDate():””)+”日
    方法二、设置 Exception class 为date类型,然后 在 pattern 中设置时间格式,可以自己写,例如××××年××月××日,但是要注意,如果为空无法用 $F{ABB614}?$F{ABB614}:"",只能使用 blank when null 这种方法

在ireport中使用html中的标签

例如:<br>

  1. 找到属性面板中的 markup 选择为html
  2. 在需要的地方加入<br>

使某个字段中的数据在特定条件下才打印出来

通过设置字段的 PrintWhenExpression ,我们可以限定只有在某些特定的条件下字段值才会被打印出来,在PrintWhenExpression 中需要设置Boolean 型的表达式,如:

new java.lang.Boolean($F{type}.trim().equals("mod_cook"))

嵌套子报表

  1. 在面板属性中找到 Subreport ,然后拖进你要放入的地方,放开鼠标后,会有一个新建报表。新建完报表之后会有个名为SUBREPORT_DIR 的Parameter,string类型,他会有个默认路径,指的是子报表的路径。由于子报表往往有多条数据,故最好单独放在一个detail中(例如:查询出来有多条数据,那么会循环显示在detail中)。
  2. 如果子报表中需要传入数据,那么就先点中子报表,然后在属性栏(不是参数里)中找到“ parameters ”,新建一个,例如:
    name为abz050 , Expression 为$F{ABZ050},因为这里的值是父报表查询的出来之后的值,所以不是用Parameter,而是Field。
  3. 在子报表中引用值,首先在子报表中定义一个变量 Parameter ,然后引用即可。
    那为什么能找到呢?
    因为:你在创建子报表的时候,也会自动创建一个 Parameter ,名称默认为 SUBREPORT_DIR ,它里面有个默认路径(新传入的路径会覆盖该默认路径)。
    同时,可以点中子报表查看他的属性,里面有个 Subreport Exception 的值为 $P{SUBREPORT_DIR} + "子报表名称.jasper" ,这样系统就能找到了。当然系统还会自动配置一些其他子报表属性,具体的自己新建一个看看吧。

自动换行

如果不处理一下,有些字段的内容太长了就会显示不全。选中该字段,右击 -> 属性,在 Text Field 把 Stretch with overflow 勾上。
同时把该行所有的字段选上,右击 -> 属性,在 Common 的 Stretch Type 选择 Relative to tallest object。

内嵌函数的使用

举例:($F{ABB617}).toString()).substring(0,4)+"年"把ABB617(Date类型)先转化成String然后截取年
ireport中使用内嵌函数只要在字段上看看他有哪些方法,然后直接使用即可。

高度根据内容自动变高

  1. 选中主键,在属性中找到 Stretch With Overflow 并选中。并把他单独放在一个 Detial或者其他 里面即可。
  2. 还有一个属性叫 Stretch type ,默认的值是No Stretch,可以改成Relative To Band Height。
    第二个步骤我个人认为可做可不做。
    当然第二个步骤的功能在做表格的时候很有用,例如:表格是2列,那么两边的数据肯定不一样,或者是左边就是静态的,那么如果不选择这个属性,你就会发现,右边的数据很多的时候会扩充,但是左边不会,这个时候,我们就可以设置该属性,并把它们放到一个单独Detial或者其他容器中,那样 左右两边 就会等高了

设置共几页,第几页

$V{PAGE_NUMBER} 表示当前是第几页 ,在text field 的 选项evaluation time选report是共几页,now表是当前页。页码可在ireport里直接设置。 “共几页 第几页” 我是写在page footer 中。

没有数据时,显示空白报表

设置报表为: 没有数据时,显示报表。 报表边缘空白处右键属性

基本设置、字体、位置、空值等。

设置标签的 空值为null时不显示、字体格式、大小、粗体、位置 等。
选择要修改的标签,在右边标签属性栏 Blank When Null 选中为 空值为null 时不显示。 Text properties 可设置字体属性

汉字乱码

报表各区块作用


Title Band:title 段只在整个报表的第一页的最上面部分显示,除了第一
页以外,不管报表中共有多少个页面也不会再出现Title band 中的内容。
pageHeader Band:顾名思义,pageHeader 段中的内容将会在整个报表中的
每一个页面中都会出现,显示在位置在页面的上部,如果是报表的第一页,
pageHeader 中的内容将显示在
Title Band 下面,除了第一页以外的其他所有页面中pageHeader 中的内容
将在显示在页面的最上端。
pageFooter Band:显示在所在页面的最下端。
Detail Band: 报表内容段,在这个Band 中设计报表中需要重复出现的内
容,Detail 段中的内容每页都会出现。
columnHeader Band:针对Detail Band 的表头段,一般情况下在这个段中
画报表的表头。
columnFooter Band:针对Detail Band 的表尾段。
Summary Band:表格的合计段,出现在整个报表的最后一页中的Detail band
的后面,一般用来统计报表中某一个或某几个字段的合计值。

简单属性设置

隔行变色

在查询中使用Parameters

$P!{parameter name}
查询写法如下:

Select * from employee $P!{MyWhere}
-- 查询时实际提交的字符串是:
Select * from employee where dept_id=D11

JasperReports 内嵌的Parameters

变量(Variables)

Calculation Type : 一个计算类型可以用来计算结果


Band

Print When expression 里必须返回一个java.lang.Boolean 类型的对象,如:40New Boolean(true),
这个bands 总会被打印(如果我们什么都不输入这个就是默认值),
($F{SALARY}.intValue()>4000?new Boolean(true):new Boolean(false))
上面的代码说明当salary 的值如果大于4000 就输出当前的band 否则就不输出当前的band。

组(Groups)

一个group 有下面几个属性需要我们去定义:
Group name:为这个group 指定一个名称,group 创建完成后会产生两个新
的band : header 和footer band,这两个band 的名称采用group 的名称来定义。
Start on a new column:如果此选项勾选,那么分组只会在报表中的新的column 产生,也就是说在一页中报表分组在一个column 里只会做一次。
Start on a new page:与上面的选项类似,如果该选项勾选,那么分组只会在每一页做一次,也就是说每一页最多只会有一个分组数据。
Reset page number:该选项允许在一个新组开始的时候重设页号。
Print header on each page:如果该选项勾选,那么如果当前页没能显示完组里的所有数据时,到一页显示该数据时会把该组的header 打印出来,否则将不会打印。
Min height to start new page:该选项用来设置当前报表中页面所余下的高度的最小值分组的最小值,默认值是0,如果我们设置为100,表示如果当前页面余下的高度小于100 就不再继续显示分组的数据,而是在下一页显示分组
的数据。
Group expression : 分组时采用的表达式规则,如上图中我们在定义dept这个group 时我们在Group Expression 里输$F{DEPT_ID},表示将该组按员工的DEPT_ID 字段进行分组显示。

Group header band height:新产生的header band 的高度。

Group footer band height:新产生的footer band 的高度。

传递参数(Passage of the parameters)

当我们在应用程序里通过fillReport 方法来生成一个报表的时候,我们会
提供一个包含参数值的Map 一起传递到报表中,包含参数的Map 对象是由报表
引擎直接管理的。在子报表属性窗口的里的“SubReport”标签里的“Parameters
Map E xpression ”属性就是提供给我们的最简单的方法来为子报表设置
parameters 的值,它允许我们定义一个最终可以返回java.util.Map 对象的表
达式,使用这种方法我们可以把从外部应用程序传到父报表里的parameter 对
象,当然这个parameter 的实际值是一个java.util.Map 对象传递给子报表使
用( 比如$P{TestMap} ), 这里我们也可以使用内建的报表
parameters:$P{REPORT_PARAMETES_MAP}把子报表中的java.util.Map 对象传
递到父报表中供使用。如果该属性我们空着不填那么一个不包含任何值的空的
java.util.Map 将会被传到子报表中。这种机制的局限性是parameters 里所对
应的java.util.Map 值是死的、不会变的。为了克服这种局限性jasperreport
允许我们定义parameter 键值对的时候每个对象的值通过一个表达式来创建,
如图中的“SubReport Parameter”表中通过添加个参数java.util.Map
来填充子报表。

子报表属性

Parameters:父报表傳參數給子报表。
Subreport returnvalues:从子报表里返回一些值到父报表里。


 上一篇
Tomcat中server Tomcat中server
Tomcat中server.xml配置详解Tomcat Server的结构图如下: <Server> <Listener /> <GlobaNamingResources> </GlobaN
2020-08-09
下一篇 
iReport简单使用 iReport简单使用
iReport简单使用建立一个空白的文档,在“Report Inspector”面板的根节点处点击右键选择“Add Dataset”,启动Dataset配置向导,创建向导分为四步: 给数据源命名 取数据 取字段信息 选择分组 如下图所示
2020-08-09
  目录