携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情
开发工具:TIBCO Jaspersoft® Studio 6.19.1
创建一个新的报表文件
File-->New-->Jasper Report,弹出New Report Wizard,选择 Report 模板Blank A4,点击Next;
- 在
File Name中输入报表文件名称(这里演示我填入的文件名称为BarChartDemo),然后点击Next;
- 点击
Next;
- 点击
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:barChartDatasetIncrement on:NoneReset on:ReportUse a JRDatasource expressionnew 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<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();
}
}