Jasperreports+jaspersoft studio学习教程(十)- 多数据源的Chart图表
本篇介绍Chart图表。注入多数据源(学会使用DataSet)
10.1 设计报表模板
10.1.1 新建模板demo14.jrxml,只保留Title、Detail。新建两个Parameters:userList(java.util.List)、employeeList(java.util.List)。
10.1.2 新建两个空Dataset:Dataset1、Dataset2。模板右键 -> Create Dataset。
10.1.3 在Dataset中新建Fields如图:
10.1.4 在组件面板中拖动 Chart组件到Detail Band中,跳出Chart Wizard窗口,选中饼状图。
10.1.5 Next后,Dataset选中 Dataset1,Use a JRDatasource expression 。
在Exception Editor写值为
newnet.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{userList})
10.1.6 添加一个 Series,选中$F{userName},即设定key为 $F{userName}。
设定 value的值为 $F{age},Label需要String类型的值。Finish完成
10.1.7 显示 饼图的Properties.选中 Chart,设置图表Title
10.1.8 选中 Chart Plot ,设置 show Label
饼图表完成。
10.1.9 拖动一个柱状图到 Detail Band中。添加两个Series对象
10.1.10 设置Dataset 为 Dataset2,且Exception Editor写值为newnet.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{employeeList})
10.1.11 选中Series 为 “工龄(年)”,设置key和Value如图:
10.1.12 选中 Series 为 “月薪(K)”,设置key和Value如图:
10.1.13 设置柱状图的标题
10.1.14 设置show Label
设置 Category Axis
设置 Value Axis
设置 Item Label
柱状图完成。设计模板如下:
保存后拷贝到项目中。
10.2 编写代码注入数据源
使用图表需要加jfreechart的jar包
10.2.1 新建 Employee类
-
public class Employee {
-
private Integer id;
-
private String empName;
-
private Integer workingYears;
-
private Double monthlySalary;
-
//get、set方法省略
-
}
10.2.2 新建Servlet ,doGet如下:
-
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
Map<String,Object> parameters = new HashMap<String,Object>(16);
-
String jrxmlPath = request.getServletContext().getRealPath("/")+"/jrxml/demo14.jrxml";
-
//由jrxml文件编译后生产jasper文件的路径
-
String jasperPath = request.getServletContext().getRealPath("/")+"/jasper/demo14.jasper";
-
FileInputStream isRef = null;
-
ServletOutputStream sosRef = null;
-
try {
-
//编译jrxml生产jasper文件
-
JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);
-
isRef = new FileInputStream(new File(jasperPath));
-
sosRef = response.getOutputStream();
-
//组装list数据源
-
List<User> userlist = new ArrayList<User>();
-
User user1 = new User(1,"小明",15,1);
-
User user2 = new User(2,"小虎",28,1);
-
User user3 = new User(3,"小风",24,2);
-
User user4 = new User(4,"小东",18,2);
-
User user5 = new User(5,"小南",32,3);
-
User user6 = new User(6,"小翔",38,3);
-
userlist.add(user1);
-
userlist.add(user2);
-
userlist.add(user3);
-
userlist.add(user4);
-
userlist.add(user5);
-
userlist.add(user6);
-
List<Employee> emplist = new ArrayList<Employee>();
-
Employee emp1 = new Employee(1,"小宇",3,8.0);
-
Employee emp2 = new Employee(2,"小方",2,6.5);
-
Employee emp3 = new Employee(3,"小志",5,15.0);
-
Employee emp4 = new Employee(4,"小刚",6,15.0);
-
Employee emp5 = new Employee(5,"小希",8,20.0);
-
Employee emp6 = new Employee(6,"小文",10,18.0);
-
emplist.add(emp1);
-
emplist.add(emp2);
-
emplist.add(emp3);
-
emplist.add(emp4);
-
emplist.add(emp5);
-
emplist.add(emp6);
-
parameters.put("userList", userlist);
-
parameters.put("employeeList", emplist);
-
JasperRunManager.runReportToPdfStream(isRef, sosRef, parameters, new JREmptyDataSource());
-
response.setContentType("application/pdf");
-
} catch (JRException e) {
-
e.printStackTrace();
-
}finally {
-
sosRef.flush();
-
sosRef.close();
-
}
-
}
10.2.3 启动tomcat,并访问servlet如下: