天天看点

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

之前本人是用前端的chart.js进行图表的制作,现在用一下Jasper看看如何制作图表报表。

制作报表

新创建一个报表文件:demo2.jrxml

不懂的关于Jaspersoft Studio的操作,请看上一篇:

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

我把多余的band删掉了,只剩下title和summary

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

以下是创建的属性

Parameters:name(String)

Field:chineseScore,mathScore,englishScore 三个都是Integer类型

time(String)

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

title部分我就省略了,summary部分就弄一个图表

比如我想弄copa一个学期以来语数英的第一次月考、期中、第二次月考和期末的成绩,用折线图来表示

首先我把Chart组件拖动到Summary

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

这里有很多类型的折线图,我们选择这种折线图

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

这里我就说以下怎么添加语文成绩这条线,数学英语成绩一样的操作,就忽略了

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

这里弄完后,如下图

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

然后点ok,进行对语文成绩这条线的设置

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

数学英语也一样

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

点击finish,调整图表,为了好看,可以在纵坐标加文字说明

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

为了能显示中文,我把Chart Plot设置字体的全设成“是微软雅黑吖”

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

然后进行Preview,若试过没问题了编译并导入到java项目中

Java代码导出

此次操作

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

创建实体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

能看到下图效果,证明已经成功~

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

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

导航栏:

Jasper(1)——入门

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

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

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

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