百度一下就知道,iReport 是为JasperReports Library和JasperReports Server设计的报表可视化设计器,而JasperReports是用来开发动态报表,基于java的一个开源库。也就是说ireport只是辅助jasperReport开发的一个可视化工具而已。ireport制作出以.xml或者.jrxml为后缀的模板文件,jasperReport就把这类模板编译成.jasper为后缀的文档,然后JasperReports就可以查看、打印或导出在多种文档格式,包括HTML、PDF、Excel、OpenOffice和doc。
我是在2015年用的ireport做报表开发,当时用的版本是5.6.0,这个算是我当时找到的最新的版本了,我觉得当时之所以用这个来做报表开发可能有很大部分原因是领导的情怀问题。我之前用过国内的润乾报表和快逸报表工具来做报表开发,我觉得作为可视化工具,它们要比ireport好用,况且现在国内还有FineReport、水晶报表这么多报表工具,怎么就选中了ireport。说实在的,我感觉这个报表很多东西几近失传了,网上一些资料都是很早以前的,最后只能靠着自己的摸索和领导的带领才勉强完成了任务。闲话不提了,我当时针对ireport使用中出现的问题,总结了一些解决方法,如果能给开发同仁们提供一些帮助,那就算是积福报了。
1、ireport各个部分表示的含义
<1>title:title段只在整个报表的第一页的最上面部分显示,除了第一页以外,不管报表中共有多少个页面也不会再出现title段中的内容。
<2>pageHeader:pageHeader段中的内容将会在整个报表中的每一个页面中都会出现,显示位置在页面上部,如果是报表的第一页,pageHeader 中 的内容将显示在title段下面,除了第一页以外的其他所有页面中,pageHeader中内容将显示在页面的最上端
<3>columnHeader:针对detail段的表头段,一般情况下在这个段中画报表中列的列标题,每页均会出现一次。
<4>detail:报表内容段,在这个段中设计报表中需要重复出现的内容,detail段中的内容每页均会出现。
<5>columnFooter:针对detail段的表尾段,每页均会出现一次。
<6>pageFooter:显示在所在页面的最下端,每页都会显示,最后一页由lastPageFooter替代。
<7>lastPageFooter:最后一页页尾段内容,只在最后一页出现一次。
<8>summary:表格的合计段,出现在整个报表的最后一页中的detail端的后面,一般用来统计报表中某一个或几个字段的合计值。
2、ireport安装时不支持java8
ireport5.6暂不支持java8,不管是下载的什么版本的ireport,就是打不开,闪退。网上查了说不支持java8,卸载jdk1.8,换上1.7就好了。
3、ireport在pdf预览时无法显示中文,以下是从网上找到的解决方法
<1> 首先设置报表对象有关字体属性:
Font name:宋体(中文字体)
PDF font name:STSong-light
PDF Embeded:true(打钩)
PDF Encoding:UniGB-UCS2-H(Chinese Siplified)
<2> 再加入iTextAsian.jar 包:
工具->选项->iReport->Classpath->Add JAR->“安装目录”\ireport\modules\ext\iTextAsian.jar->重启ireport(必须重启)
[参考:http://bolg.sina.com.cn/s/blog_8e6f1b330100ymmk.html]
4、ireport常用控件及其释义
text field:放变量和表达式
static text:静态文本
line:线条
Rectangle:矩形
Crosstab:交叉表
基本上这几个控件就可以做普通的报表了,在刚开始使用的时候还闹了很多笑话,比如把静态的中文放进了text field中,但是一直预览不出来,后来才知道这种静态文字就直接放在static text中就好了。
5、ireport通过html显示图片
显示图片的时候在Image Expression中加图片Url路径,Expression Class选择java.net.Url,Is Lazy复选框选中。
6、ireport通过pdf显示图片
在pdf中显示也需要加上IsLazy属性,但是在jsp中显示不能直接使用iframe获取报表内容,这样会报image read field异常,可以嵌入一个jsp,然后在这个jsp中指向一个url,生成报表。
7、ireport以适应A4纸打印的极限大小(针对html解析在网页上的字体过小的问题)
由于html解析在网页上的字体偏小,为了尽可能让报表字体能在html页面上正常显示,就需要尽可能能改变报表模板的页面大小,设置方式:报表文件->属性->大小:报表模板大小740*1400 ,jsp中对应iframe大小为:760px*1080px。
8、ireport有效的表达式(举几个示例):
<1> "This is an expression"
<2> new Boolean(true)
<3> new Integer(3)
<4>(($P{myParam}.equals("S"))?"Yes":"No")
9、ireport交叉报表
数据如果稍微复杂一点,很有可能就要用到交叉报表了,这里列举几个交叉报表经常使用到的功能点
<1>求和,在measures中添加measure并编辑,如下图
<2>表达式:$V{cnt1Measure}.equals( new BigDecimal(0))&&$V{symptomName}!=null&&$V{groupName}!=null
<3>运算:$V{cntMeasure}.subtract($V{cnt1Measure})
<4>百分比:new Double($V{cntMeasure}.doubleValue()/$V{cnt1Measure}.doubleValue()*100),也可以不乘一百,但要在pattern中选择百分比格式
<5>重要属性:measure中的这个属性,勾选上表示没有值的显示为0,否则显示空
10、如果在集成spring和ireport之后,出现java.lang.NullPointerException异常,则很可能是传入到ireport的参数为空,需要检查参数。