开发步骤:
1、新建一个父报表parent_report
在ireport designer左上角工具栏中点击“文件”,下拉列表中选择“New...",弹出如下对话框:
默认选择"Blank A4",点击“Launch Report Wizard”,进入下图:
为报表文件命名,并选择需要保存的路径。点击“下一步"。
接下来选择Connections/Data Sources,如果没有数据源则选择”Empty datasource“。下一步。
下一步。
继续下一步。
到这一步父报表文件便新建好了。
2、引入subreport
首先新建sub1_report,创建步骤参考上面。效果如下图:
在“组件面板”中将Subreport组件拖入父报表中的detail中,会弹出如下窗口:
选择创建好的子报表sub1_report,一直点击“下一步”,完成。效果如下:
3、配置数据源:
我用过两种数据源,一种是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。
4、常见问题
<一>pdf中文不显示
需要设置显示中文标签的属性:
pdf Font name is now deprecated:STSong-Light
pdf Encoding : UniGB-UCS2-H(China Simplified)
如图
项目工程中需要引入这两个包:iText和iTextAsian,注意,这两个包要配套起来,报名应该以com.lowagie开头,不要弄错了哦。
这篇文章是对之前项目中用到的ireport技术的一个小总结,如果大家有什么问题可以留言或者加我QQ(1041211664).