基于前面所讲的基础,若没有一定的入门知识,请看
Jasper(1)——入门
Jasper(2)——简单使用导出PDF报表
本次弄的是对某个列名进行分组
报表设计
案例:根据学校分组来显示学生的信息
创建名为“demo3.jrxml”的报表文件,如下所示
主要创建3个field:school,name和sex 都是String类型
分组关键的来了,Outline视图的报表右键 -> Create Group
点击next
点击Finish后,大概是这样子哒~
接下来进行设计,都是一顿拖动操作,这里我默认你会啦~就不再详细说明了哈
这里注意的一个点,在detail的sex部分,我用了一个三目运算符,0表示男,1表示女
经过Preview,若没问题,报表设计完成,编译~
Java代码导出
本次动了以下几个文件
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
看到下图的效果就证明是成功了~
项目地址:https://gitee.com/copaa/jasperdemo
项目地址:https://gitee.com/copaa/jasperdemo
导航栏:
Jasper(1)——入门
Jasper(2)——简单使用导出PDF报表
Jasper(3)——制作图表报表
Jasper(5)——制作父子报表
Jasper(6)——小技巧& 各种bug(有缘再补充)