开发步骤:
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).