九、jasperreport 制作json数据源报表(父子报表一)

该文章已生成可运行项目,

九、jasperreport 制作json数据源报表(父子报表一)

本文来源视频 https://edu.youkuaiyun.com/course/detail/30953

上一讲的json数据源比较单一,有些报表分为表头和明细,比较复杂,我们来看看这种怎么做

我们先来看看做好的报表样式

  1. 准备个json 文件PurchaseInfo.json放到jaspersoft studio的报表项目里,我们要做一个表头是购买人的基本信息,明细时购买记录的这样一个报表。

{

"loginId": "lisi",

"address": "长安大街1号",

"phone": "13344444444",

"loginName": "李四",

"location": "北京",

"orderList": [{

    "orderId": "20200101",

    "price": 22.2,

    "count": 2,

    "purchaseTime": 1595336379791,

    "productName": "笔记本"

}, {

    "orderId": "20200102",

    "price": 222.02,

    "count": 1,

    "purchaseTime": 1595336379791,

    "productName": "硬盘"

}]

}

 

2.在studio 里切换到 Repository 视图里,创建一个JSON数据源。引用PurchaseInfo.json文件

 

 

3.创建报表模板 SampleMain.jrxml,

主报表数据源选择json中的用户信息的字段。

 

4.将抬头字段拖到到报表模板里的TITLE位置,并拖动子报表元素到detail里。

 

5.创建子报表SampleSub.jrxml,创建过程和普通报表一样。子报表保留detail区域,其余删掉。

 

 

6.选择子报表数据源 ,选择orderList双击到了右边的框里,点Read Fields,下方列出购买记录的所有字段。

 

7.设置子报表,选择子报表模板,拖动字段到子报表模板里。也可以给子报表设置写表格,背景色等。

 

8.回到主报表模板,进行设置。在Outline窗口创建一个自定义的Parameter-subPath,代表子报表的路径。并进行Expression,Data source Express 的配置。

$P{subPath}+"Sample2sub1.jasper"((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("orderList")

 

9.先编译子报表,在编译主报表,点击预览,输入subPath的路径。

 

10.java代码的编写

@GetMapping(value = "/reportjson3")

    public void reportjson3(HttpServletRequest request, HttpServletResponse response) throws IOException {

          try

               String reportName ="sample2.jasper";

                response.setContentType("application/pdf; charset=utf-8"); 

               response.setDateHeader("Expires", 0); 

                OutputStream os = response.getOutputStream();

           JasperReport jasperReport = (JasperReport)JRLoader.loadObject(resourceLoader.getResource("classpath:/jasper1/"+reportName).getInputStream());

           String subPath = resourceLoader.getResource("classpath:/jasper1/").getURL().toString();

           

           HashMap<String, Object> hashMap = new HashMap<>();

           hashMap.put("subPath", subPath);

           String json = buildJson();

           System.out.println(json);

           InputStream inputStream = new ByteArrayInputStream(json.getBytes("UTF-8"));

               hashMap.put("JSON_INPUT_STREAM", inputStream); //填充报表数据源数据流

           JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, hashMap);

              

               JasperExportManager.exportReportToPdfStream(jasperPrint,os); 

    } catch (Exception e) {

         e.printStackTrace();

    }

    }

 

本文章已经生成可运行项目
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iamyzs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值