ireport4.0.2父子报表详解

开发步骤:
java

一、新建一个父报表parent_reportweb

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

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

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

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

下一步。插件

继续下一步。开发

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

二、引入subreportit

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

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

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

三、配置数据源:

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

<一>JDBC数据源配置

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

弹出以下窗口:

new一个datasource,以下图有不少种datasource,这里咱们选择JDBC

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

<二>配置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,以下图

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

四、常见问题

<一>pdf中文不显示

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

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

如图

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


这篇文章是对以前项目中用到的ireport技术的一个小总结,若是你们有什么问题能够留言或者加我QQ(1041211664).