之前本人是用前端的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(有缘再补充)