ireport java web_iReport中使用JavaBeanDataSource,父子报表,html标签,自定义格...

本文详细介绍了如何在iReport中使用JavaBeanDataSource,展示如何从数据源获取对象属性并创建子报表。内容涵盖字段添加、日期格式自定义、HTML标签、子报表设计以及高度自适应等技巧,适用于Java Web开发中的复杂报表设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iReport中使用JavaBeanDataSource

上次发布了怎么配置JavaBeanDataSource,那么这次要从这个数据源中获取java对象的属性。

新建一个报表后在report inspector中右键点击Fields--->添加Field

如果我们的XXXDataSourceFactory的静态方法返回的是一个Blog对象集合,比如

public class Blog {

private String title;

private String url;

private Date createDate;

private List keywordsList;

private List reviewList;

private List commentList;

//getter setter

}

那么我们依次添加上述类中的所有在报表中用到的属性,

Review和Comment类在子报表中用到了,此处不做解释。

public class Comment {

private String userName;

private Date commentDate;

private String comment;

// getter setter

}

// 如果在子报表中用到了一个类的属性,那么这个类必须是public

public class Review{

private Date viewDate;

private String userName;

// getter setter

}

demo中用到了所有的,添加的时候不要忘记选择相应的类型,是String还是List,Data等等,属性名称和field名称要一样

7e6d4e6a83650c8a13a7dd24407ef051.png

如果使用的属性是集合那么要注意啦.

我们现在要做得报表是如下:

1.标题点击可以打开相应的html页面。

2.博文发表时间是date类型,在报表中自定义格式输出。

3.第三行用的是子报表,从左往右输出。

4.评论记录用的也是子报表从上往下输出,保持第一个格的高度根据右边的内容高度自适应。

5.剩下的也就那样。

这个报表中除了detail band以外的其它band都去掉了,margin也去掉了,因为有些band,比如title band只会在第一页中出现,但我们不需要那样做。

1.新建一个Text Field ,宽度大小自己随便设置。

选中该Text Field ,然后再属性列表中找到Markup,选择html4f55263776586fcb5edcb3b43e53111f.png

Text Field的内容是""+$F{title}+""

这里用到了一个Blog对象的url和title属性。

2.第二行那里新建一个Text Field-->选中然后右键点击-->Edit Expression--->双击我们用到的blog对象的属性,然后确认,如下图

55e0a478c62ede0501a15c504aea40ec.png

-再次选中Text Field然后右键点击--->Field pattern--->Custom Format-->输入“发表时间:yyyy年MM月dd HH:mm”点“确认”。这个是我自定义的格式,左侧还有其它格式供大家选择,如下图所示:4e7aedcbe9b743d239a2c204bf08819c.png

3.第三行是一个关键字的列表,从左往右输出,如果限定最多只有5个关键字。

用子报表(Subreport)来输出Blog对象中的集合属性。

第一步从组件面板中选择Subreport拖拽到报表中放在适合的位置。然后配置子报表的数据源。

选中子报表然后在选项面板---> User a datasource expression--->new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{keywordsList})

然后再选项面板中--> Data Source Expression--->输入“new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{keywordsList})” ,这样就可以把一个集合传给子报表了。

如图所示:

edb66b1952f72ed15fc62d58e36d472e.png

接下来在子报表中获取在父报表中传递的datasource,

因为在Blog对象中关键字集合是一个字符串集合List而不是一个对象,所以这个时候在子报表中创建一个field,名称为“_THIS”

ea6739eee7b199fd999b176b33cecd31.png来获取这个集合中的对象,输出格式是从左往右,所以在属性面板中把Print order设置为Horizontal,columns为5行,如果不是从左往右输出请不要随便更改这个属性。

6d6b5df214bb02edca16ee6f59a5d1b0.png

当前的报表:

d67ef645bf5e48d615c36bd12ac2c328.png

和预览效果如下图所示:

fb87152f2f6ff1e8dca7da43ec48c95a.png

4.评论记录用的也是子报表从上往下输出,数据怎样从父报表给传给子报表上面已经说了,这次主要是讲如何保持第一个格的高度根据右边的子报表内容高度自适应并且在子报表中的内容很多时候怎么样输出所有内容而不被截取掉(如果不做设置内容会根据输出区域的高度被截取xx长度的字符)。

首先增加了一个frame,在frame里增加了一个内容为"评论记录"的label,右边是一个子报表。

524d7c16ccb2f1fd77794fcf3df683d5.png

对"评论记录"这个label要设置2个属性,如图所示

1db1ea5f2ace89325d18f07630760bb6.png

评论记录的子报表中对“评论内容”field要勾选Stretch With Overflow属性,否则内容很长的时候会被截取,选择这个之后评论内容子报表的高度会自适应。

cfe31a7f320934c3db41f1918d290be7.png

内容很多时候跟上下两个边界的距离很小,显得很难看,这个时候可以对这个field的2个属性做一下修改,Spacing Before和Left Indent都设成5。

c8acb106683d0a2121d0409509fa4fec.png

看一下效果

76957256f8cdec804c04ca7143d1f0ea.png

报表中还有浏览记录 部分, 这部分代码各位自己看看吧, 报表导出跟实际需求不符请各位不要喷口水

我会上传java代码 和 报表 共各位看看, 关于jasper report有什么问题欢迎大家问我, 我会尽量按时回答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值