总结
本文主要是基于我在项目开发中,使用jasperreports+ireport制作报表的一个归纳,里面对一些问题的解决方法,都经本人使用验证过,可以作为参考。
1.制作报表
制作报表所必须的jar包,如图:
儿童画秋天
只阐述要点部分,细节请参考其他文档,网络上有很详细的说明,由于我在项目中使用的数据源大部分是JavaBean,所以以该数据源为例:
1.1使用JavaBean数据源制作简单报表
(1)写两个Java 类作为数据源
a. DailySales.java 源代码,实体类
package st;
import java.io.Serializable;
public class DailySales implements Serializable {
private static final long rialVersionUID = 1L;
private String productNo;
private String productName;
private int number;
private int money;
private int id;
沉重的反义词是什么.
.....
//省略了构造函数与getter 与 tter 方法
b. DailySalesFactory.java 源代码,提供实体数组的工厂
package st;
import java.util.Arrays;
import java.util.Collection;
/**
* 简单工厂类,取得测试数据
*/
public class DailySalesFactory {
private static DailySales[] data = {
new DailySales( " 货号 1" , " 物品1 " , 1,1000),
new DailySales( " 货号 2" , " 物品 2" , 2,2000),
new DailySales( " 货号 3" , " 物品 3" , 3,3000),
new DailySales( " 货号 4" , " 物品 4" , 4,4000),
new DailySales( " 货号 5" , " 物品 5" , 5,5000),
new DailySales( " 货号 6" , " 物品 6" , 6,6000),
new DailySales( " 货号 7" , " 物品 7" , 7,7000),
new DailySales( " 货号 8" , " 物品 8" , 8,8000),
new DailySales( " 货号 9" , " 物品 9" , 9,9000),
new DailySales( " 货号 10" , " 物品 10" , 10,10000)
};
public static Object[] getBeanArray() {
return data;
}
//必须是静态的,返回必须是数组
public static Collection<DailySales> getBeanCollection() {
return Arrays.asList(data);
}
}
(2)把以上两个class 打成 jar 包,放入 iReport 安装目录下 lib文件夹(最好是手动将该jar包载入ireport,该jar包只在制作模板时供测试用)
(3)启动iReport,制作模板
a.填写数据源属性
为数据源填写一个名称:TestJavaBean,工厂类:st.DailySalesFactory,静态工厂方法: getBeanCollection
填写完整后,可测试一下是否可以连接。若无问题,保存即可。
接着会出现以下窗口:
漂四声组词 JavaBean class 填写 具有getter 和 tter 方法的类:
st.DailySales
b.需要填充的字段
选择JavaBean里面所有可用的字段,添加到右面窗口。
…………………..
(4)将模板文件拷入web项目中(.jasper结尾),书写导出报表的代码
1.2使用JavaBean数据源制作子报表
(1)创建相关的Bean类(两个bean类要有父子关系)
package com.hs.bean;
import java.util.ArrayList;
public class ProvinceBean {
private String provinceName;
private ArrayList<CityBean> cities;
………………………………………
}
package com.hs.bean;
public class CityBean {
private String cityName我的父亲母亲作文;
………………………………………………..
}
(2)创建工厂类,添加测试数据
直拍和横拍的区别package com.hs.bean;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class ProvinceBeanFactory {
//该测试类只要有一个返回Collection的静态方法就可以
public static Collection<ProvinceBean> getBeanCollection() {
ArrayList<ProvinceBean> provinces = new ArrayList<ProvinceBean>();
ProvinceBean province = new ProvinceBean();
province.tProvinceName("山东"集成是什么意思);
ArrayList<CityBean> cities = new ArrayList<CityBean>();碟仙诡谭2
CityBean city = new CityBean();
city.tCityName("济南");
cities.add(city);
city = new CityBean();
city.tCityName("青岛");
cities.add(city);
city = new CityBean();
city.tCityName("潍坊");
cities.add(city);
province.tCities(cities);
provinces.add(province);
province = new ProvinceBean();
province.tProvinceName("江苏");
cities = new ArrayList<CityBean>();
city = new CityBean();
city.tCityName("南京");
cities.add(city);
city = new CityBean();
city.tCityName("无锡");
cities.add(city);
city = new CityBean();
city.tCityName("苏州");
cities.add(city);
province.tCities(cities);
provinces.add(province);
return provinces;
}
}
(3)制作模板