在制作报表时,想直接使用Java代码提供数据。

网上找了一些文章,很多都是用Servlet做的。我不是想通过浏览器来观察它的输出。我想使用iReport的动态连接直接预览。

结合一些资料,加上自己的摸索终于成功了。

现整理如下:

  • 需要的环境

JDK + iReport + Eclipse + PDF Reader

如果Eclipse没有的话也没关系,iReport需要的只是Java文件编译后的class文件。

  • Java部分(Eclipse)

1、JavaBean

一个简单 JavaBean —— Student。

 package ds.javabean;
/**
*
*
* @author by Young.ZHU
* on 2012-8-3
*
* Package&FileName: ds.javabean.Student
*/
public class Student {
//~ Instance fields ********************************************************
// 序号
private int id;
// 姓名
private String name;
// 性别
private String gender;
// 出生年月
private String birthday; //~ Constructors ***********************************************************
public Student() {
}
public Student(int id, String name, String gender, String birthday) {
this.id = id;
this.name = name;
this.gender = gender;
this.birthday = birthday;
} //~ Methods ****************************************************************
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
} public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}

2、Factory

iReport在使用JavaBean作为数据源时需要一个Factory。主要用来生成报表数据。

 package ds.javabean;

 import java.util.ArrayList;
import java.util.Collection; /**
* 生成JavaBean的工厂类。
* 在iReport的DataSource的配置中会用到。
*
* @author by Young.ZHU
* on 2012-8-3
*
* Package&FileName: ds.javabean.StudentFactory
*/
public class StudentFactory {
//~ Static fields/initializers ********************************************* // 生成实体对象的个数
private static final int RECORD_COUNT = 100; //~ Methods **************************************************************** /**
* 这个方法在iReport的DataResource配置时也会用到
* 必须是静态方法 static
*
* @return
*/
public static Collection<Student> createBeanCollection() {
Collection<Student> beanCollection = new ArrayList<Student>(); for (int i = 0; i < RECORD_COUNT; i++) {
beanCollection.add(StudentUtil.createStudent(i + 1));
} return beanCollection;
}
}

3、Student的工具类

该类用来产生Student实例。主要是为了报表的数据不那么单调。

 package ds.javabean;

 import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.util.Date;
import java.util.Random; /**
* 随机生成Student实体对象的工具类
*
* @author by Young.ZHU
* on 2012-8-3
*
* Package&FileName: ds.javabean.StudentUtil
*/
public class StudentUtil {
//~ Static fields/initializers ********************************************* /*
* “姓”的字符数组
*/
private static String[] FIRST_NAME_ARR = {
"赵",
"钱",
"孙",
"李",
"王",
"张",
"慕容",
"上官",
"东方",
"朱"
}; /*
* 其他中文数组
*/
private static String[] LAST_NAME_ARR = {
"燕",
"岩",
"艳",
"明",
"建国",
"小刚",
"小娟",
"华",
"天明",
"洋",
"盈盈",
"仁"
}; /*
* 性别
*/
private static String[] GENDER_ARR = {
"男",
"女"
};
private static DateFormat DATE_FORMATER = new SimpleDateFormat(
"yyyy年MM月dd日"); //~ Methods **************************************************************** public static Student createStudent(int id) {
String firstName = getRandomCharFromArray(FIRST_NAME_ARR);
String lastName = getRandomCharFromArray(LAST_NAME_ARR);
String name = firstName + lastName; String gender = GENDER_ARR[new Random().nextInt(1000) % 2]; String birthday = getRandomDate(); return new Student(id, name, gender, birthday);
} private static String getRandomCharFromArray(String[] arr) {
Random random = new Random();
int index = random.nextInt(arr.length); return arr[index];
} /**
* 随机生成一个比当前日期小的日期
*
* @return (yyyy年MM月dd日)
*/
private static String getRandomDate() {
Date date = new Date();
long dateMill = date.getTime(); Random random = new Random();
dateMill = (long) (random.nextDouble() * dateMill); return DATE_FORMATER.format(new Date(dateMill));
}
}
  • 报表设计(iReport)

报表的设计部分就不多说了。

主要说一下,如何使用Java类向报表中传数据。

1、设置classpath

iReport使用JavaBean时使用的是Java的class文件。所以需要制定classpath,让iReport知道到哪去找那些class文件。

工具栏 > Options > Classpath (如果iReport是英文版本,请自己对照),出现下图的界面。

a、点击 添加文件夹 ,找到上面提到的几个Java类的class文件的路径。笔者使用的是Eclipse,而且建的是Java Project,所以笔者的路径是 $workspace\$projectName\bin 。

b、点击 Save Classpath 

(注:设置完成后,请重启iReport。有时在视图上的修改不能及时显示,可以多试几次。还是显示不出来,重启吧!不知道是不是iReport的bug。笔者使用的版本是2.0.1)

2、设置数据源

工具栏 > Data > 连接/资料来源 

在弹出的界面中,点击 New 按钮。

在接下来弹出的界面中,选中 JavaBeans set data source ,点击 Next 

出现如下图的界面。

a、Name ,给你的datasource取个名字,例如:MyJavaBeanTest

b、Factory class ,就是上面的工厂类,包括包名和Java文件名

c、method ,工厂类里的那个静态方法。注意方法名要对应。名字可以任取。

3、向报表填充值

工具栏 > Data > 报表查询 ,出现如下界面。

a、选中 JavaBean Data Source 选项卡。

b、在 Class name 栏里,填入JavaBean类,包括包名和Java文件名。

c、点击 Read attributes 。可以看到下面的栏里显示出了JavaBean的属性。

d、选中相关属性,点击 Add Selected Field(s) 

e、点击 OK 

经历过上面的步骤,可以看到在你的报表文件的视图中,Fields栏里多了刚刚加上的属性。

将各属性拖放到相应的位置。如图。

好了。看看效果吧!

在菜单栏里,点击 执行报表(使用动态连结),如图。

如果配置了多个数据源的话,请注意动态连结的数据源是否正确。

预览效果如下:


P.S. 其中的Java源代码和iReport的报表文件(jrxml)已打包上传到网上。有兴趣的可以看看。

下载地址:http://download.csdn.net/detail/zhuyang7654321/4475107

iReport —— 使用 JavaBean 作为数据源的更多相关文章

  1. ssm中iReport报表使用json数据源过程体会

    前言:做这个一定要有耐心,因为报表本就是数据杂糅到规整的过程,这篇心得会细讲每一步操作,如果只想着一眼到位,建议close tab 在公司中遇到项目,大概是一个这样的需求,有一个列表和一个标题,需要把 ...

  2. jasperreport 通过javabean datasoource实现chart的报表

    继上次report的demo后,还在继续做着report方面的research,今天主要是实现了通过javabean datasource填充chart图表,通过webservice下载pdf格式的报 ...

  3. 2019-04-10 集成JasperReport

    1. 报表的制作过程为 ① 制作.jrxml报表模板文件,并编译成.jasper ② 代码处理.jasper文件并填充数据进行输出 2. 一开始是打算使用iReport作为模板制作工具的,但是有以下局 ...

  4. Android开发之自定义万能BaseAdapter

    话不多说哦,直接上模板: package com.zyzpp.adapter; import android.content.Context; import android.util.SparseAr ...

  5. Java程序生成linechart report的方法

    iReport一般是一个设计阶段的工具.用来设计出报表的排版和内容.报表的动态生成须要程序来实现(毕竟报表的数据是动态的,数量是非常多的,不可能用iReport Preview的方式一个个手工去生成) ...

  6. JasperReport框架使用教程(附带常见空白页问题说明)

    概述与安装使用 1. PDF报表概述 概述 ​ 在企业级应用开发中,报表生成.报表打印下载是其重要的一个环节.在之前的课程中我们已经学习了报表中比较重要的一种:Excel报表.其实除了Excel报表之 ...

  7. jasper使用table组件设计复杂的表头

    1.1 设计报表模板 1.1.1 新建模板DemoReport5.jrxml,去掉不需要的Band,保留Title,Page Header,Detail 1 , PageFooter.将组件Table ...

  8. ireport5.6+jasperreport6.3开发(四)--以javabean为基准的报表开发(ireport)

    javabean完成以后就是添加ireport的报表了 打开ireport的option然后在classpath中添加路径. 然后在ireport中追加数据源如图,点击图标后会出现数据源列表然后按ne ...

  9. ireport5.6+jasperreport6.3开发(三)--以javabean为基准的报表开发(javabean)

    这里只有ireport的开发没有web侧的程序. ireport的数据源可以说是多种多样,大致可以通过文件 数据库 bean类这三种方式,这里只介绍bean类 (数据库比较简单可参考其他的网站,文件没 ...

随机推荐

  1. 委托、事件和Lambda

    一.委托 delegate1.在.Net平台下,委托类型用来定义和响应应用程序中的回调.事实上,.Net委托类型是一个类型安全的对象,指向可以以后调用的其他方法,.Net委托是内置支持多路广播和异步方 ...

  2. 在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static

    在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static ! 在C语言中,我们使用pthread_create ...

  3. PE文件结构学习

    PE:Portable Executable File Format(可移植的执行体).Windows平台主流可执行文件格式..exe与.dll文件都是PE格式.32位的叫做PE32,64位的叫做PE ...

  4. URAL题解—不断跟新中

    1014:简单题,忘了0的情况可以是10,== 1219:找呀找规律,满足N*(N-1)/2+1=X;就是1 的情况了

  5. 自己写简单CoreDataManager封装对CoreData操作

    关于CoreData的介绍太多,网上一搜大把全是,这里不介绍CoreData,直接上代码,注释写的很详细,应该很容易理解,暂时现做简单的增删该查,后面有时间再做修改完善. CoreDataManage ...

  6. IE6下div遮盖select的最优解决方案

    a.本节精选html5/css频道里一款IE6下div遮盖select的最优解决方案 原理:利用iframe来遮挡select,再用div来遮挡iframe,就这么简单. 1)首先,建一个div层和i ...

  7. 使用PHP_UML生成代码的UML图

    在读别人代码的时候, 在没有详细文档的时候, 如何快速的看清整个代码的结构(类结构), 就成为了一个现实的问题. 今天我就介绍一种, 自动生成UML图的方法. 假设, 我有一个项目文件夹:laruen ...

  8. 由浅入深了解Thrift之客户端连接池化续

    前文<由浅入深了解Thrift之客户端连接池化>中我们已经实现了服务调用端 连接的池化,实现的过于简陋,离实际的项目运用还很遥远.本文将在进一步改造,主要是两方面:1.服务端如何注册多个服 ...

  9. hdu 2094 产生冠军(STL,set)

    题目 //把所有的出现的名字开始默认都为冠军(1),然后输了的置为0,表示不为冠军,最后统计不为0的, //当有且只有一个不为0的,这个就为冠军,否则,不能产生冠军. //以上思路来自别人的博客.. ...

  10. HDU 1316 How Many Fibs?(java,简单题,大数)

    题目 /** * compareTo:根据该数值是小于.等于.或大于 val 返回 -1.0 或 1: public int compareTo(BigInteger val) 将此 BigInteg ...