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

系统运维 waitig 523℃ 百度已收录 0评论

本人菜鸟,这篇文章纯属个人记录,主要功能是通过java和Ireport生成报表,并生成pdf,word,excel格式

IReport 使用记录教程–原创

一、创建主报表

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();
}

本文由【waitig】发表在等英博客
本文固定链接:IReport 使用记录 主报表和子报表数据传递
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)