用开源技术jasperreport做打印,第一步使用ireport设计报表

时间:2022-11-22 21:30:33
1.去 http://jasperforge.org/jaspersof ... telligence/ireport/下载最新版本的iReport,我用的是iReport-2.0.1。下载完毕后安装;

2 在自己的项目中建立两个类(我用的是jdk1.6)com.lan.myApp.test.factory.JavaBeanDataSourceFactory类和com.lan.myApp.domain.Person。第一个类是datasource第二个类是要打印的实体;

其中 Person中有如下几个属性,及其相应的get和set方法
        private long id;
        private String name;
        private int age;
        private String sex;

在JavaBeanDataSourceFactory类中建立一个方法        public static Collection<Person> createPersonCollection(),在方法里面写数据库的检索语句,这里可以做一些模拟数据,比如:
        public static Collection<Person> createPersonCollection(){
                Person p1 = new Person();
                p1.setId(1);
                p1.setName("张三");
                p1.setSex("男");
                p1.setAge(20);
                Person p2 = new Person();
                p2.setId(2);
                p2.setName("张四");
                p2.setSex("女");
                p2.setAge(21);
                List<Person> list = new ArrayList<Person>();
                list.add(p1);
                list.add(p2);
                return list;
        }

3.打开ireport设计器,设定classpath,Options--Classpath--添加文件夹,这里我的classpath是:D:/example/myApp/WebRoot/WEB-INF/classes,点击“Save Classpath”,重启ireport;

4.新建datasource,data--链接/资料来源--new,这里新建JavaBeans set data source,起名为:testDatasource,Factory class为:com.lan.myApp.test.factory.JavaBeanDataSourceFactory,下面默认Collection of javaBeans,再下面填上JavaBeanDataSourceFactory类中返回数据集的方法createPersonCollection,点击下面的“Test”,提示:Connection test successful!,如果没有成功,请检查classpath是否设置正确;

5.创建报表,档案--开启新档,起名字person,然后点击ok;注意如果打不开新档,用ireport.bat打开设计器,创建报表时如果提示java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester错误,可能是在jre的lib/ext目录下放置了jasperreport.jar和ireport自带的冲突导致的,删掉后重启ireport;

6.导入Person,点击图标栏的显示比例下拉框左边的database图标,选择JavaBean Data Source,在下面Class Name中录入Person的类:com.lan.myApp.domain.Person,点击Read attribute,然后选择相应属性add上去,ok;

6.在报表展示区把除了columnHeader和detail的所有区域的Band Height都设置成0,右键--栏的属性,改一个点击一下apply;

7.在column header中增加列标题staticText(不会变动的文字)分别为:姓名、年龄、性别;把detail的高度改成30,增加对应的textField(文字字段元),修改textField的属性中的Text Field标签页,其中Class为相应的类型(String、Integer、String),Expression为$F{name}、$F{age}、$F{sex},利用设计器对齐各个元素,注意不能超出自己所在的栏,然后在  属性--border中增加边框;

8.点击图标栏最右边的“执行报表(使用动态链接)”来执行报表,结束。

以上实现的只是一个简单的例子,更复杂的功能和界面的操作布局只有咱们来实践了,在网站上也有很多例子,用jasperreport做一些简单的报表还是很不错的选择,但是有些报表不太适合一些业务需要,比如分组报表,其分组的展现方式和我们平时看到的报表不太一样,看着有些别扭