本人菜鸟,这篇文章纯属个人记录,主要功能是通过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();
}