本人菜鸟,这篇文章纯属个人记录,主要功能是通过java和Ireport生成报表,并生成pdf,word,excel格式
一、创建主报表
1.主报表属性设置
- 主报表下面有多个子报表组成(A4:: 842*595)
- 设置Page width 和Page height为 595*842,则当前报表会填满一页
- 通过设置 属性-Margins-Left margin/Right margin 来设置左右变局
- 拖一个Variables到PageFooter 中,就会在每一页显示页码
2.主报表的数据源设置
i.代码中设置
java代码中赋值到IReport里面动态生成报表
//创建报表字段源,必须是List集合
//mainReportData 是一个bean,设定:里面的每一个字段对应子报表的数据源
JRDataSource dataSource= new JRBeanCollectionDataSource(Arrays.asList(mainReportData));
//parameters 添加的参数,(这里的参数和fields可以互换,在Ireport中设置就可以了)
Map parameters = new HashMap();
parameters.put("SUBREPORT_DIR", this.getClass().getResource("/").getPath() + "com/gx/jasperReport/monthReport/");
parameters.put("LOGO_PATH", this.getClass().getResource("/").getPath() + "com/gx/jasperReport/monthReport/logo.png");
parameters.put("month", reportMonth.split("-")[1]);
JasperPrint jasperPrint = JasperFillManager.fillReport(sourceFileName, parameters, dataSource);
其实也就是可以传两个东西, 一个是参数(hashMap),一个是字段集合(List(DataBean))
ii.IReport设置
(1) Parameters 参数
直接在左侧面板-Paramerters-添加Paramerte,名字是上面的hashMap的key,类型对应。
(2) JRDataSource 参数
直接在左侧面板-Fields-添加Field,名字是上面的dataSource中的的dataBean的成员,类型对应。
到此,主报表设置完成。
二、 创建子报表
创建子报表很简单,直接在组件面板中拖到主视图中,选择Create a new report.下一步,到数据源时选择Empty dataSource, 然后下一步下一步...Don't use any conection ...完成。
- 注:
- subReport 放在主报表的group header
- Detail 放循环数据
- titile summary 放一次数据
三、父报表传参数和数据源个子报表
如下图,参数对应子报表参数, 数据源对应数据源
new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(Arrays.asList($F{currentMonthIssue}))
四、服务器生成报表下载
如下:提供三种下载格式:pdf, word,xcel(最好的是用pdf ,word会格式问题)
switch (exportType){
case "pdf":
JRPdfExporter exporter = new JRPdfExporter();
//jasperreport6.3
//exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
//jasperreport5.0
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
response.setHeader("Content-disposition", "attachment;filename=" + reportMonth + "_" + System.currentTimeMillis() + ".pdf");
response.setContentType("application/pdf");
response.setCharacterEncoding("UTF-8");
//jasperreport6.3
//exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(response.getOutputStream()));
//jasperreport5.0
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
exporter.exportReport();
break;
case "xls":
JRXlsExporter xlsExporter = new JRXlsExporter();
xlsExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
response.setHeader("Content-disposition", "attachment;filename=" + reportMonth + "_" + System.currentTimeMillis() + ".xls");
response.setContentType("application/xls");
response.setCharacterEncoding("UTF-8");
xlsExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
xlsExporter.exportReport();
break;
case "word":
JRExporter wordExporter = new JRRtfExporter();
wordExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
response.setHeader("Content-disposition", "attachment;filename=" + reportMonth + "_" + System.currentTimeMillis() + ".doc");
response.setContentType("application/doc");
response.setCharacterEncoding("UTF-8");
wordExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
wordExporter.exportReport();
}