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

iReport中使用JavaBeanDataSource

 

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

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

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


public class Blog {

 

    private String title;

   

    private String url;

 

    private Date createDate;

 

    private List<String> keywordsList;

 

    private List<Review> reviewList;

 

    private List<Comment> 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还是ListData等等,属性名称和field名称要一样

iReport中使用JavaBeanDataSource,父子报表,html标签,自定义格..._第1张图片

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

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

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

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

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

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

5.剩下的也就那样。


 

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

 

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

选中该Text Field ,然后再属性列表中找到Markup,选择htmliReport中使用JavaBeanDataSource,父子报表,html标签,自定义格..._第2张图片

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

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

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

 

iReport中使用JavaBeanDataSource,父子报表,html标签,自定义格..._第3张图片

 

-再次选中Text Field然后右键点击--->Field pattern--->Custom Format-->输入 “发表时间:yyyyMMdd HH:mm”点“确认”。这个是我自定义的格式,左侧还有其它格式供大家选择,如下图所示:iReport中使用JavaBeanDataSource,父子报表,html标签,自定义格..._第4张图片

 

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

如图所示:

iReport中使用JavaBeanDataSource,父子报表,html标签,自定义格..._第5张图片

 

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

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

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

iReport中使用JavaBeanDataSource,父子报表,html标签,自定义格..._第6张图片

 

当前的报表:

iReport中使用JavaBeanDataSource,父子报表,html标签,自定义格..._第7张图片

和预览效果如下图所示:

iReport中使用JavaBeanDataSource,父子报表,html标签,自定义格..._第8张图片


 

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

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

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

iReport中使用JavaBeanDataSource,父子报表,html标签,自定义格..._第9张图片

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

iReport中使用JavaBeanDataSource,父子报表,html标签,自定义格..._第10张图片

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

 

看一下效果

 iReport中使用JavaBeanDataSource,父子报表,html标签,自定义格..._第11张图片


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

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




你可能感兴趣的:(报表,报表设计,子报表,iRport完整例子)