Jasper(5)——制作父子报表

基于前面所讲的基础,若没有一定的入门知识,请看
Jasper(1)——入门
Jasper(2)——简单使用导出PDF报表

报表设计

案例:查询学生信息的所有科目的考试成绩

主表设计(父表)

创建名为“demo4.jrxml”的报表文件,如下图所示
在这里插入图片描述
需要的属性
Parameters:subPath(String)
Field:name(String),scoreList(java.util.List)
在这里插入图片描述
首先设计主表,如下图所示
在这里插入图片描述

子表设计

接下来创建“demo4_sub.jrxml”的报表文件
在这里插入图片描述
属性名:subject(String),score(Integer)
在这里插入图片描述
之后把报表页面调整主表所需的大小
在这里插入图片描述
然后把detail band高度调成30
在这里插入图片描述
然后依次设计报表
在这里插入图片描述
这样子表就设计好啦~

回到主表

用Subreport组件拖过去
在这里插入图片描述
在这里插入图片描述
next,勾选这个
在这里插入图片描述
然后Finish,之后经过调整,如下图
在这里插入图片描述
我们把Detail每一个Text Field框设置一下,如下图
在这里插入图片描述
子报表也一样设置
在这里插入图片描述
接下来对子报表进一步设置
在这里插入图片描述
文件路径我这里改成入参参数
在这里插入图片描述
最后一栏的处理
new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{scoreList})
net.sf.jasperreports.engine.JRDataSource
在这里插入图片描述
最后效果
在这里插入图片描述
那么,Preview一下,若没问题就可以编译了;这样,报表设计部分完成~

Java代码导出

本次操作文件如下
在这里插入图片描述
StuInfo(父表实体类)

package com.copa.domain;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.util.List;

/**
 * @author copa
 * @createDate 2021-07-27 0:19
 * @function
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class StuInfo {

    private String name;

    private List<StuScore> scoreList;
}

StuScore(子表实体类)

package com.copa.domain;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @author copa
 * @createDate 2021-07-27 0:19
 * @function
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class StuScore {

    private String subject;

    private Integer score;
}

controller

    @RequestMapping(value = "/pdf4")
    public void pdf4(Map<String, Object> parameters,
                     HttpServletResponse response) throws IOException {
        ServletOutputStream os = response.getOutputStream();
        try {
            ArrayList<StuInfo> list = new ArrayList<>();
            for (int i = 1; i <= 4; i++) {
                StuInfo stuInfo = new StuInfo();
                ArrayList<StuScore> stuScoreList = new ArrayList<>();
                for (int j = 1; j <= 3; j++) {
                    StuScore stuScore = new StuScore();
                    stuScore.setSubject(j == 1 ? "语文" :
                                        j == 2 ? "数学" : "英语")
                            .setScore(new Random().nextInt(100 + 1));
                    stuScoreList.add(stuScore);
                }
                stuInfo.setName("小" + i)
                        .setScoreList(stuScoreList);
                list.add(stuInfo);
            }
            JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
            parameters = parameters == null ? new HashMap<>() : parameters;
            parameters.put("subPath", new ClassPathResource("jasper/demo4_sub.jasper").getPath());
            ClassPathResource resource = new ClassPathResource("jasper/demo4.jasper");
            response.setContentType("application/pdf");
            InputStream jasperStream = resource.getInputStream();
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperStream, parameters, dataSource);
            JasperExportManager.exportReportToPdfStream(jasperPrint, os);
        } catch (JRException e) {
            e.printStackTrace();
        } finally {
            os.flush();
        }
    }

确认无误后,启动项目进行测试~
http://localhost:8080/pdf4
若看到下图效果,就证明是成功了~
在这里插入图片描述
好啦,我个人大致常用的Jasper就这几个,以后若有啥补充的…emm…以后再说哈~先当笔记存着哈O(∩_∩)O
项目地址:https://gitee.com/copaa/jasperdemo
Jasper(1)——入门
Jasper(2)——简单使用导出PDF报表
Jasper(3)——制作图表报表
Jasper(4)——制作分组报表
Jasper(6)——小技巧& 各种bug(有缘再补充)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值