IReport 使用记录 主报表和子报表数据传递

来源:互联网 发布:高性能计算 知乎 编辑:程序博客网 时间:2024/05/22 15:37

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