Java报表之JasperReports - 绘制柱状图


开发工具:TIBCO Jaspersoft® Studio 6.19.1

创建一个新的报表文件

1、File --> New --> Jasper Report,弹出New Report Wizard,选择 Report 模板Blank A4,点击Next;

2、在File Name中输入报表文件名称(这里演示我填入的文件名称为BarChartDemo),然后点击Next;

3、点击Next;

4、点击Finish。

创建报表文件的每一步我都截了图,说简单点,创建文件就是选一个模板、起个名称就完了。

我工作经历中涉及到报表开发的工作也不多,接触过的模板也就Blank A4,其它的报表模板我都是没有用过的。粗略地看了下JasperReports中的其它模板,感觉有用的不多,顶多可以在开发报表的时候参考下,可以直接拿来用的几乎没有。

报表文件创建成功后,我们看到的是如下界面。

报表文件元素说明

  • Title:标题区,如果数据有多页只会在第一页打印;
  • Page Header:页头区,多页的情况下每页都会打印;
  • Column Header:列头区,配合下面的Detail区打印列表数据,多页的情况下每页都会打印;
  • Detail:可以新增多个Detail区,可以组合打印出多个列表数据,多页的情况下每页都会打印;
  • Column Footer:列表底部区,多页的情况下每页都会打印;
  • Page Footer:页底部区,多页的情况下每页都会打印;
  • Summary:合计区,只会在最后一页打印。

调整Detail的高度

删除除Detail外的其它所有部分,即仅保留Details,然后在Detail上单击鼠标右键,然后点击Maximize Brand Height。

新建一个Parameter

对象Parameters的作用是从外部向报表内部传递数据。

在Parameters上单击鼠标右键,然后点击Create Parameter。

将新创建的Parameter的Name设置成dataList,Class设置成java.util.ArrayList。

创建Dataset

在BarChartDemo上单击鼠标右键,然后点击Create Dataset。

将新创建的Dataset的Name设置成barChartDataset。

展开barChartDataset,添加两个Field。

Name

Class

name

java.lang.String

value

java.lang.Integer

报表添加Bar Chart

将Chart拖动到Detail中。弹出Chart Wizard,选择Bar Chart,然后点击Finish。

选中Bar Chart,设置Chart的宽度充满整个容器。

设置Bar Chart的属性

选中Chart,单击右键,选择Edit Chart Wizard。

配置Chart属性

如果有使用过百度的Echarts的话会对Series、Label、Value、Category有深的理解。

说明:

  • Series:系列,本示例中只有一个系列,所以未设置系列;上图中红、蓝、绿三种不同颜色的条柱分别对应一个系列;
  • Label:每个条柱上显示的说明文字,字符串类型;
  • Value:每个条柱的值,会根据value显示条柱的高度,不能是字符串类型;
  • Category:类别,上图中的One、Two、Three……就是Category。

Dataset配置信息详情:

  • Dataset:barChartDataset
  • Increment on:None
  • Reset on:Report
  • Use a JRDatasource expression
  • new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{dataList})

因为本示例程序只有一个Serie,所以我隐藏了Legend。

显示Label:

X轴说明文字调整显示角度

直接在属性里不能设置角度为负数,我是在Source里直接改的XML源码。

这样一个Bar Chart图表就创建成功了。

使用Java填充报表文件

关键代码:

@ResponseBody@GetMapping("/chart")public void chart(HttpServletResponse response) {    try {        // 报表需要的动态参数        List dataList = Lists.newArrayList();        dataList.add(Dict.create().set("name", "总人数").set("value", 100));        dataList.add(Dict.create().set("name", "孕产妇").set("value", 20));        dataList.add(Dict.create().set("name", "0-6岁儿童").set("value", 5));        dataList.add(Dict.create().set("name", "老年人").set("value", 15));        dataList.add(Dict.create().set("name", "高血压").set("value", 10));        dataList.add(Dict.create().set("name", "糖尿病").set("value", 2));        dataList.add(Dict.create().set("name", "脑卒中").set("value", 18));        dataList.add(Dict.create().set("name", "冠心病").set("value", 30));        dataList.add(Dict.create().set("name", "恶性肿瘤").set("value", 12));        dataList.add(Dict.create().set("name", "慢阻肺").set("value", 8));        // 编译        JasperReport jasperReport = JasperCompileManager.compileReport(                ResourceUtils.getFile("classpath:BarChartDemo.jrxml").getAbsolutePath()        );        Map paramMap = new HashMap<>();        paramMap.put("dataList", dataList);        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, paramMap, new JREmptyDataSource());        JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());    } catch (Exception e) {        e.printStackTrace();    }}

效果图

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章