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

本人菜鸟,这篇文章纯属个人记录,主要功能是通过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();
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值