BSTEK Development Framework2(BDF2) : 6.1.报表定义与配置

bdf2-jasperreports模块不再维护的通告

2014年07月01日起,BDF2中集成的jasperreports模块将不再做任何更新,也不会在问答中提供jasperreports的相关技术问题的解答,今后将主推锐道自己的报表引擎UReport,项目地址为http://bsdn.org/projects/ureport ,UReport文档教程地址为http://wiki.bsdn.org/display/ureport ,BDF2与UReport集成的项目名称为bdf2-ureport;通过bdf2-ureport项目,可快速上手使用UReport。

      开发一个Jasperreport报表,我们需要下载IReport之类Jasperreport报表开发工具,其下载地址如下:http://community.jaspersoft.com/project/ireport-designer,关于如何利用IReport来开发一个报表,这个已超出BDF2范畴,关于IReport的使用,网上教程很好,大家可以去搜索一下。

      报表设计完成之后,接下来需要将其编译成一个jasper文件,这个利用IReport就可以完成,有了jasper文件后,我们就可以将其在线上传到BDF2中提供的报表维护当中,如下图所示:

      在上传报表文件时,如果我们选择非jasper报表文件,系统会抛出一个异常,同时上传好报表之后,我们还可以选择当前报表采用的数据源,目前在BDF2当中,允许用户为报表提供三种类型的数据源:第一种就是JDBC,这种方式也是最为常用的一种,选择这种之后,我们就可以在下面的数据源选择当中选择当前报表要采用的数据源名称(来自BDF2所支持的多数据源机制);第二种和第三种分别是Map与JavaBean,一旦我们选择这两种类型的数据源,那么在下面的数据来源选择的列表当中,我们只能选择所有实现了IReportDataProvider接口且配置到Spring当中的bean来作为当前报表的数据源,IReportDataProvider接口代码如下:

IReportDataProvider接口源码
package com.bstek.bdf2.jasperreports.service;
import java.util.Collection;
/**
 * @author Jacky.gao
 * @since 2013-5-12
 */
public interface IReportDataProvider {
	Collection<?> getData();
}

      可以看到接口非常简单,只有一个方法,这个方法只要求我们返回一个对象的集合即可,目前这个对象可以同Map或JavaBean。如果我们在配置时采用的数据源类型为Map,那要求对应的getData方法返回的必须是一个Map的集合,如果选择的是JavaBean则必须返回一个包含报表中使用的field的JavaBean的集合,比较容易理解。

      报表定义完成之后,我们可以点击工具栏上的“预览报表”按钮,在弹出的窗口当中,可以选择要预览的报表类型,可以看到目前支持下面几种类型的报表:

      对于报表的预览,你可以选择jrpxml或html两种类型格式。HTML格式比较简单,就是将报表内容转换成一个HTML网页,可以在线显示;而对于jrpxml,它会将报表内容生成一个XML格式,这里需要特别指出的是,我们提供了一个可以解析这个XML的swf,解析好的内容可以保证与报表完成一致,并可以实现在网页当中直接显示。同时在这个SWF当中,我们还提供了一个打印功能,可以将当前显示的报表直接输出到打印机打印,如下图所示:

      利用这个SWF打印的时候,它不会打印图片,所以如果您的报表当中含有图片,利用这个SWF打印功能是不会被打印出来的,但就因为其不会打印图片,所以我们可以利用这个功能实现套打,具体大家可以想象一下。

      实际上,对于上面的报表的右上角,是有一张图片的,但因为我们没有定义图片,所以显示的报表右上角是空的,下面这张图向我们展示了定义这个报表时图片的定义方式:

      可以看到,在设计报表时,对于用到的图片,我们采用一个parameter来代替,这个parameter的名字为IMGJERRY,所以在将报表配置到BDF2当中时,我们需要将要采用的目标图片作上传到系统当中,并且将其名字命名为IMGJERRY,这样我们的报表生成时就可以看到图片啦,如下图所示:

      再次采用jrpxml格式来预览我们的报表,可以看到如下所示效果:

      实际上,不仅仅是图片可以这样做,对于报表设计当中常用的子报表也可以采用类似的方式实现,具体这里就不再赘述了。

Attachments:

report-manager.png (image/png)
report_type.png (image/png)
swf-report.png (image/png)
img_def.png (image/png)
res_img.png (image/png)
report_img.png (image/png)