Java报表之JasperReports | 绘制柱状图

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情

开发工具:TIBCO Jaspersoft® Studio 6.19.1

创建一个新的报表文件

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

image-20220811083043316

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

image-20220811083147039

  1. 点击Next

image-20220811083321911

  1. 点击Finish

image-20220811083403319

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

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

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

image-20220811083918096

报表文件元素说明

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

调整Detail的高度

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

image-20220811092352710

新建一个Parameter

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

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

image-20220811084553614

将新创建的ParameterName设置成dataListClass设置成java.util.ArrayList

image-20220811084836357

创建Dataset

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

image-20220811085108442

将新创建的DatasetName设置成barChartDataset

展开barChartDataset,添加两个Field

Name Class
name java.lang.String
value java.lang.Integer

报表添加Bar Chart

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

image-20220811085906059

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

image-20220811090455554

设置Bar Chart的属性

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

image-20220811090555397

配置Chart属性

image-20220811092543613

如果有使用过百度的Echarts的话会对SeriesLabelValueCategory有深的理解。

说明:

  • 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。

image-20220811092751152

显示Label:

image-20220811093440716

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

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

image-20220811093853797

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

使用Java填充报表文件

关键代码:

@ResponseBody
@GetMapping("/chart")
public void chart(HttpServletResponse response) {
	try {
		// 报表需要的动态参数
		List<Dict> 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<String, Object> 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();
	}
}
复制代码

效果图

image-20220811112311625

猜你喜欢

转载自juejin.im/post/7130458743514333215