天天看点

Jasper(4)——制作分组报表

基于前面所讲的基础,若没有一定的入门知识,请看

Jasper(1)——入门

Jasper(2)——简单使用导出PDF报表

本次弄的是对某个列名进行分组

报表设计

案例:根据学校分组来显示学生的信息

创建名为“demo3.jrxml”的报表文件,如下所示

Jasper(4)——制作分组报表

主要创建3个field:school,name和sex 都是String类型

Jasper(4)——制作分组报表

分组关键的来了,Outline视图的报表右键 -> Create Group

Jasper(4)——制作分组报表

点击next

Jasper(4)——制作分组报表

点击Finish后,大概是这样子哒~

Jasper(4)——制作分组报表

接下来进行设计,都是一顿拖动操作,这里我默认你会啦~就不再详细说明了哈

Jasper(4)——制作分组报表

这里注意的一个点,在detail的sex部分,我用了一个三目运算符,0表示男,1表示女

Jasper(4)——制作分组报表

经过Preview,若没问题,报表设计完成,编译~

Java代码导出

本次动了以下几个文件

Jasper(4)——制作分组报表

SchoolInfo实体类

package com.copa.domain;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * @author copa
 * @createDate 2021-07-26 23:30
 * @function
 */
@Data
@AllArgsConstructor
public class SchoolInfo {

    private String school;
    private String name;
    private String sex;
}

           

controller

@RequestMapping(value = "/pdf3")
    public void pdf3(Map<String, Object> parameters,
                     HttpServletResponse response) throws IOException {
        ServletOutputStream os = response.getOutputStream();
        try {
            ArrayList<SchoolInfo> list = new ArrayList<>();
            for (int i = 1; i <= 20; i++) {
                SchoolInfo schoolInfo;
                if (i <= 10) {
                    schoolInfo = new SchoolInfo("一中", "小" + i, String.valueOf(new Random().nextInt(2)));
                } else {
                    schoolInfo = new SchoolInfo("二中", "小" + i, String.valueOf(new Random().nextInt(2)));
                }
                list.add(schoolInfo);
            }
            JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
            parameters = parameters == null ? new HashMap<>() : parameters;
            ClassPathResource resource = new ClassPathResource("jasper/demo3.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/pdf3

看到下图的效果就证明是成功了~

Jasper(4)——制作分组报表

项目地址:https://gitee.com/copaa/jasperdemo

项目地址:https://gitee.com/copaa/jasperdemo

导航栏:

Jasper(1)——入门

Jasper(2)——简单使用导出PDF报表

Jasper(3)——制作图表报表

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

Jasper(6)——小技巧& 各种bug(有缘再补充)