之前本人是用前端的chart.js进行图表的制作,现在用一下Jasper看看如何制作图表报表。
制作报表
新创建一个报表文件:demo2.jrxml
不懂的关于Jaspersoft Studio的操作,请看上一篇:
Jasper(2)——简单使用导出PDF报表
我把多余的band删掉了,只剩下title和summary
以下是创建的属性
Parameters:name(String)
Field:chineseScore,mathScore,englishScore 三个都是Integer类型
time(String)
title部分我就省略了,summary部分就弄一个图表
比如我想弄copa一个学期以来语数英的第一次月考、期中、第二次月考和期末的成绩,用折线图来表示
首先我把Chart组件拖动到Summary
这里有很多类型的折线图,我们选择这种折线图
这里我就说以下怎么添加语文成绩这条线,数学英语成绩一样的操作,就忽略了
这里弄完后,如下图
然后点ok,进行对语文成绩这条线的设置
数学英语也一样
点击finish,调整图表,为了好看,可以在纵坐标加文字说明
为了能显示中文,我把Chart Plot设置字体的全设成“是微软雅黑吖”
然后进行Preview,若试过没问题了编译并导入到java项目中
Java代码导出
此次操作
创建实体Score
package com.copa.domain;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author copa
* @createDate 2021-07-26 11:13
* @function
*/
@Data
@NoArgsConstructor
public class Score {
private Integer chineseScore;
private Integer mathScore;
private Integer englishScore;
private String time;
}
controller
@RequestMapping(value = "/pdf2")
public void pdf2(Map<String, Object> parameters,
HttpServletResponse response) throws IOException {
ServletOutputStream os = response.getOutputStream();
try {
// 模拟数据
ArrayList<Score> list = new ArrayList<>();
for (int i = 1; i <= 4; i++) {
Score score = new Score();
switch (i) {
case 1:
score.setTime("第一次月考");
break;
case 2:
score.setTime("期中");
break;
case 3:
score.setTime("第二次月考");
break;
case 4:
score.setTime("期末");
break;
}
score.setChineseScore(new Random().nextInt(100));
score.setMathScore(new Random().nextInt(100));
score.setEnglishScore(new Random().nextInt(100));
list.add(score);
}
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
parameters = parameters == null ? new HashMap<>() : parameters;
// 入参
parameters.put("name", "copa");
ClassPathResource resource = new ClassPathResource("jasper/demo2.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/pdf2
能看到下图效果,证明已经成功~
项目地址:https://gitee.com/copaa/jasperdemo
导航栏:
Jasper(1)——入门
Jasper(2)——简单使用导出PDF报表
Jasper(4)——制作分组报表
Jasper(5)——制作父子报表
Jasper(6)——小技巧& 各种bug(有缘再补充)