ireport4.0.2父子报表详解

开发步骤:

1、新建一个父报表parent_report

在ireport designer左上角工具栏中点击“文件”,下拉列表中选择“New...",弹出如下对话框:

ireport4.0.2父子报表详解_第1张图片

默认选择"Blank A4",点击“Launch Report Wizard”,进入下图:

ireport4.0.2父子报表详解_第2张图片

为报表文件命名,并选择需要保存的路径。点击“下一步"。

ireport4.0.2父子报表详解_第3张图片

接下来选择Connections/Data Sources,如果没有数据源则选择”Empty datasource“。下一步。

ireport4.0.2父子报表详解_第4张图片

下一步。

ireport4.0.2父子报表详解_第5张图片

继续下一步。

ireport4.0.2父子报表详解_第6张图片

到这一步父报表文件便新建好了。

2、引入subreport

首先新建sub1_report,创建步骤参考上面。效果如下图:

ireport4.0.2父子报表详解_第7张图片

在“组件面板”中将Subreport组件拖入父报表中的detail中,会弹出如下窗口:

ireport4.0.2父子报表详解_第8张图片

选择创建好的子报表sub1_report,一直点击“下一步”,完成。效果如下:

ireport4.0.2父子报表详解_第9张图片

3、配置数据源:

我用过两种数据源,一种是JDBC,一种是JavaBean。下面我分别来讲:

<一>JDBC数据源配置

点击工具栏”电插头“图标,如下图

ireport4.0.2父子报表详解_第10张图片

弹出如下窗口:

ireport4.0.2父子报表详解_第11张图片

new一个datasource,如下图有很多种datasource,这里我们选择JDBC

ireport4.0.2父子报表详解_第12张图片

next,进入数据库信息配置,填好信息之后,test一下,没问题save,JDBC数据源配置完成。

ireport4.0.2父子报表详解_第13张图片

<二>配置JavaBean数据源

我在项目中用的是ZK框架,它集成了Jasperreport 插件,代码如下:

public void onClick$printBtn() {

String subReportPath = getClass().getResource("/").getPath().replace("WEB-INF/classes", "invs/print");

String jasperUrl = "/invs/print/inv_check_report.jasper";

Div div_report = (Div) reportWin.getFellow("div_report");

reportWin.setVisible(true);

Jasperreport jasperreport = (Jasperreport) div_report.getFellow("report");

Map<String,Object> parameters = new HashMap<String,Object>();

parameters.put("SUBREPORT_DIR", subReportPath);

parameters.put("createdTime", DateUtil.getStrLong(checkVO.getCreatedTime()));

parameters.put("creatorName", checkVO.getCreatorName());

parameters.put("deptName", checkVO.getDeptName());

JRBeanCollectionDataSource usedDetailDs = new JRBeanCollectionDataSource(checkVO.getUsedDetailList());  //设置List数据源

JRBeanCollectionDataSource usedSummaryDs = new JRBeanCollectionDataSource(checkVO.getUsedSummaryList());

JRBeanCollectionDataSource stockDetailDs = new JRBeanCollectionDataSource(checkVO.getStockDetailList());

JRBeanCollectionDataSource stockSummaryDs = new JRBeanCollectionDataSource(checkVO.getStockSummaryList());

parameters.put("usedDetailDs", usedDetailDs);//这里"usedDetailDs"和report中的parameter要对应

parameters.put("usedSummaryDs", usedSummaryDs);

parameters.put("stockDetailDs", stockDetailDs);

parameters.put("stockSummaryDs", stockSummaryDs);

jasperreport.setSrc(jasperUrl);

jasperreport.setParameters(parameters);

jasperreport.setType("pdf");

}

这里javabean向Jasperreport中传递参数时,List类型的数据需要用JRBeanCollectionDataSource来进行封装,同时在parameter属性Class设置为net.sf.jasperreports.engine.data.JRBeanCollectionDataSource,如下图

ireport4.0.2父子报表详解_第14张图片

同时,在这是subreport属性时,Connection type选择Use a datasource,Data Source Expression选择对应从后台传过来的parameter。

ireport4.0.2父子报表详解_第15张图片

4、常见问题

<一>pdf中文不显示

需要设置显示中文标签的属性:

pdf Font name is now deprecated:STSong-Light
pdf Encoding : UniGB-UCS2-H(China Simplified)

如图

ireport4.0.2父子报表详解_第16张图片

项目工程中需要引入这两个包:iText和iTextAsian,注意,这两个包要配套起来,报名应该以com.lowagie开头,不要弄错了哦。


这篇文章是对之前项目中用到的ireport技术的一个小总结,如果大家有什么问题可以留言或者加我QQ(1041211664).





你可能感兴趣的:(Subreport,ireport子报表)