博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iReport中使用JavaBeanDataSource,父子报表,html标签,自定义格...
阅读量:6070 次
发布时间:2019-06-20

本文共 2598 字,大约阅读时间需要 8 分钟。

hot3.png

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}// 如果在子报表中用到了一个类的属性,那么这个类必须是publicpublic class Review{	private Date viewDate;	private String userName;		// getter setter}

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

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

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

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

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

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

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

5.剩下的也就那样。

 

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

 

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

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

Text Field的内容是 "<a style='color:blue;' href=\""+$F{url}+"\">"+$F{title}+"</a>"

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

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

 

 

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

 

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}) 这样就可以把一个集合传给子报表了。

如图所示:

 

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

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

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

 

当前的报表:

和预览效果如下图所示:

 

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

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

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

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

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

 

看一下效果

 

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

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

转载于:https://my.oschina.net/abduxkur/blog/115370

你可能感兴趣的文章
Ubuntu12.04 编译android源代码及生成模拟器经历分享
查看>>
KVM网络桥接设置方法
查看>>
Puppet学习手册:Puppet Yum安装
查看>>
我的友情链接
查看>>
ansible学习记录
查看>>
网思科技校园网计费解决方案
查看>>
我的友情链接
查看>>
携程 Apollo分布式部署
查看>>
2017 Hackatari Codeathon B. 2Trees(深搜)(想法)
查看>>
单词统计
查看>>
输入一个数字计算圆的面积
查看>>
在Delphi中隐藏程序进程
查看>>
AngularJS PhoneCat代码分析
查看>>
maven错误解决:编码GBK的不可映射字符
查看>>
2016/4/19 反射
查看>>
SharePoint Wiki发布页面的“保存冲突”
查看>>
oracle 10g 数据库与客户端冲突导致实例创建无监听问题
查看>>
Delphi中读取文本文件的方法(实例一)
查看>>
Linux常用命令
查看>>
Android开源代码解读の使用TelephonyManager获取移动网络信息
查看>>