IReport常见问题及处理方法

一、前言

相信很多java程序员们,在开发报表的时候都使用过ireport, ireport功能确实很强大,可以开发出各式各样的报表来。ireport是java应用中做报表的一款很好的利器。这也是之所以很多的java程序员们热衷于它的原因,而且因为ireport本身也是用java语言开发的,这更令我们java程序员们感觉亲切。事实上在网上找ireport的资料并不是很多,在我们使用的时候出现的很多问题大多数甚至在网上都很难找到其原型,因此而困恼着许许多多的ireport的使用者。本人使用ireport开发开源字节低代码平台也有一段时间了(从2017年10月份至今),多多少少积累了一些使用的经验,在此做一下总结,并想和大家一起分享,就当是抛砖引玉吧。

二、常见问题及处理方法

1、IReport制作报表pageheader只在第一页出现的解决办法

解决方法:只要打开ireport,pageheader的属性,在print when expression设置$V{PAGE_NUMBER}.equals(1);

2、IReport如何实现变量字段$F{propertyName}赋值为一个NULL对象时不显示”null”, 而显示为空白?

解决方法:选中动态单元格,右键选择属性,在弹出对话框TextField选项卡中选中Blank when null。

思考:以往我们为IReport中变量字段赋值时会在程序或报表Textfield expression中用三目符号去判空,用IReport此功能既可以提高准确度,又可以减少工作量。

3、 IReport中如果动态单元格中$F{propertyName}显示的字过长,如何换行?

解决方法:选中动态单元格,右键选择属性,在弹出对话框TextField选项卡中将选中StretchWith Overflow。

思考:有很多bug都是因为动态文字($F{propertyName})显示不全而造成的,而且这些bug的修改方式也不是根本解决办法,因为就算拉长单元格对于动态字过多时也会出现同样的问题,而且现场也会出现同样的问题。有了“动态长度超过文本框长度会自动换行”这个功能就会解决此问题。

4、iReport中一个单元格由于内容太多而换行了,而其它没换行那么其显示高度肯定不一致了,如何解决换行导致的单元格对不齐问题?

解决方法:把同行所有单元格的属性Stretch Type="RelativeToBbandHheight "。选择同一行所有单元格,点击右键选择属性,在弹出对话框Common选项卡中选中将Stretch Type属性设为"RelativeToBbandHheight"。

思考:有了此功能,我们使打印格式显示得更加整齐,就像一个表格框着每个单元格一样。

5、iReport中当单元格中的文字出现换行跨页的情况,如何保证换行的字段能够正常显示,并且保证换行后同行的高度保持一致?

解决方法:选择同行所有单元格,点击右键选择属性,在弹出对话框Common选项卡中选中Print when detail over。

思考:以前出现翻页打印时常出现打印内容缺失、打印格式不对齐的bug。此功能可以解决上诉问题。

6、iReport中的子报表如何实现根据其上部是否有打印数据而变打印位置?

解决方法:选中子报表,右键选择属性,在Common选项卡中将Position type属性置为Float,将Stretch Type属性置为RelativeToTallestObject。

思考:当第一页打印基本信息在上部,子报表在下部,子报表数据很多需要翻页,并且翻页后需要顶页打印子报表的内容,这时利用此功能最恰当不过了。如果动态文本框因为换行而出现文字重叠也同样可以选择“FLOAT”解决此问题。

7、打印时经常遇到翻页打印,而且每一页打印的内容不一致,iReport如何实现此功能?

解决方案:创建多个Frame,每个Frame上可以有不同的打印布局,通过控制Frame的显示页数来控制翻页后不同的显示内容。具体操作:选择Frame,右键选择属性,在Common选项卡中的Print When excepression文本框中输入控制代码,如“new Boolean($V{PAGE_NUMBER}.intValue()>1)”表示超过一页时才显示此Frame上的内容。

思考:此功能可以更灵活地满足翻页打印不同内容的需求

8、以往一些需要打印变量的格式化工作往往在程序实现,实际上最好在模板中去进行格式化(代码复用、去除耦合),那么iReport为能够提供哪些格式化规则呢,我们又怎样能利用它们呢?

解决方法:IReport的每个变量单元格都有许多为格式化规则可以选择(如下图),而且我们也可以增加自己的格式化规则,具体步骤:选中单元格,右键选择属性,在Text Field选项卡中点击Create按钮为变量添加格式化规则(变量类型要与格式化规则对应)。每一项格式化规则这里就不再赘述了。

思考:打印需求变化最大就是格式了,我们往往因为格式的变化而增加重复代码或者打印项,而模板是客户化的,在模板上格式化可以最大程度上避免这个问题,例如,日期可以格式化各种形式来显示,货币符号用那种、千分位是否分割都可以通过此功能实现。

9、IReport中大小写问题:

1、parameter中如果小写,引用也小写

2、$F{},一般都大写

3、子报表中引用父报表中查询出来的值时,只需要小写即可,即在子报表的parameter中只需要小写

10、设置共几页,第几页

$V{PAGE_NUMBER} 表示当前是第几页 ,在text field 的 选项evaluation time选report是共几页,now表是当前页。页码可在IReport里直接设置。 

11、多份报告灵活组合在一起输出,伪代码如下:

Map<String, Object> map = new HashMap<String, Object>();
ResultSet rs = stmt.executeQuery(sql);// 执行query语句得到结果
JRDataSource jrDataSource = new JRResultSetDataSource(rs);
JasperPrint jasperPrintone = JasperFillManager.fillReport(fileName1, map, jrDataSource);
ResultSet rstwo = stmt.executeQuery(sqltwo);// 执行query语句得到结果
JRDataSource jrDataSourcetwo = new JRResultSetDataSource(rstwo);
JasperPrint jasperPrinttwo = JasperFillManager.fillReport(fileName2, map, jrDataSourcetwo);
jasperPrintList.add(jasperPrinttwo);
// 输出报告
ServletOutputStream outputStream = response.getOutputStream();
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
exporter.exportReport();
outputStream.flush();
outputStream.close();

13.填充空白行怎么办?

如果是resultSet数据源,可以通过union添加;如果是javabean数据源,可以给集合添加空对象

12、案例如下图:

以上这些内容都是我在开源字节低代码平台中实际应用ireport所总结出来的一些经验,有更好的解决方案大家可以积极交流,在下定当谦虚心接受。

当然ireport远远不知这么些功能,希望大家可以一起分享我们的使用经验,以至于我们可以在实际开发的时候更高效的完成任务。

如若转载,请注明出处:开源字节   https://sourcebyte.cn/article/208.html

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
第8课 JRXML报表模板元素讲解3 继续上节课的内容,讲解jrxml文件的元素 • filterExpression是用来过滤数据源的记录的,用法很简单。如果在filterExpression中的表达式是 Boolean.TRUE,则当前记录会显示在报表上,否则,filterExpression中的表达式是 Boolean.FALSE 或者 null,则当前记录不会显示。 注意:一般情况下我们是不会使用此元素的,因为没有必要啊,直接在sql中写上条件就可以了。 只有当我们无法通过简单的方式来过滤数据的时候,才会用到这个元素,比如 CSV 文件数据源。 一个模板文件最多只能包括一个此元素。 例子: <![CDATA[$F{status}.equals("active") ? Boolean.TRUE :Boolean.FALSE]]> • • group 元素被用来将数据源中的一些连续的记录根据一些共同的属性来进行分组。 例子: <![CDATA[$F{FieldName}]]> • background 元素被用来定义报表中所有页面的背景。可以展现图像和文本。 注意:此元素在一个jrxml模块中最多只能使用一次。 例子: "image.gif" 第9课 JRXML报表模板元素讲解4 继续上节课的内容,讲解jrxml文件的元素 • <title> 顾名思义:title就是报表的标题了。它只在报表的开始出现一次。 例子: <title> <![CDATA[myTitle]]> </title> • • pageHeader定义报表页的面头信息,它显示在每个页的开始位置。 每个jrxml模板文件可以包括0个或者1个pageHeader元素。 例子: <![CDATA[Page Header]]> • columnHeader定义每列数据的列标题。 注意:如果是报表中只有一列数据,则会忽略列标题。如果你指定了列标题(pageHeader),那么,列标题的个数必须与列数相同。 第10课……

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开源字节

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值