携手创作,共同成长!这是我参与「掘金日新计划 · 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 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<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();
}
}
复制代码