iReport —— 使用 JavaBean 作為數據源


    在制作報表時,想直接使用Java代碼提供數據。

    網上找了一些文章,很多都是用Servlet做的。我不是想通過瀏覽器來觀察它的輸出。我想使用iReport的動態連接直接預覽。

    結合一些資料,加上自己的摸索終於成功了。

 

    現整理如下:

  • 需要的環境

    JDK + iReport + Eclipse + PDF Reader

    如果Eclipse沒有的話也沒關系,iReport需要的只是Java文件編譯后的class文件。

  • Java部分(Eclipse)

    1、JavaBean

        一個簡單 JavaBean —— Student。

 1 package ds.javabean;
 2 /**
 3  *
 4  *
 5  * @author by Young.ZHU
 6  *                on 2012-8-3
 7  *
 8  * Package&FileName: ds.javabean.Student
 9  */
10 public class Student {
11     //~ Instance fields ********************************************************
12     // 序號
13     private int id;
14     // 姓名
15     private String name;
16     // 性別
17     private String gender;
18     // 出生年月
19     private String birthday;
20 
21     //~ Constructors ***********************************************************
22     public Student() {
23     }
24     public Student(int id, String name, String gender, String birthday) {
25         this.id           = id;
26         this.name         = name;
27         this.gender       = gender;
28         this.birthday     = birthday;
29     }
30 
31     //~ Methods ****************************************************************
32     public int getId() {
33         return id;
34     }
35     public void setId(int id) {
36         this.id = id;
37     }
38 
39     public String getName() {
40         return name;
41     }
42     public void setName(String name) {
43         this.name = name;
44     }
45 
46     public String getGender() {
47         return gender;
48     }
49     public void setGender(String gender) {
50         this.gender = gender;
51     }
52 
53     public String getBirthday() {
54         return birthday;
55     }
56     public void setBirthday(String birthday) {
57         this.birthday = birthday;
58     }
59 }

 

    2、Factory

        iReport在使用JavaBean作為數據源時需要一個Factory。主要用來生成報表數據。

 1 package ds.javabean;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 
 6 /**
 7  * 生成JavaBean的工廠類。
 8  * 在iReport的DataSource的配置中會用到。
 9  *
10  * @author by Young.ZHU
11  *                on 2012-8-3
12  *
13  * Package&FileName: ds.javabean.StudentFactory
14  */
15 public class StudentFactory {
16     //~ Static fields/initializers *********************************************
17 
18     // 生成實體對象的個數
19     private static final int RECORD_COUNT = 100;
20 
21     //~ Methods ****************************************************************
22 
23     /**
24      * 這個方法在iReport的DataResource配置時也會用到
25      * 必須是靜態方法 static
26      *
27      * @return
28      */
29     public static Collection<Student> createBeanCollection() {
30         Collection<Student> beanCollection = new ArrayList<Student>();
31 
32         for (int i = 0; i < RECORD_COUNT; i++) {
33             beanCollection.add(StudentUtil.createStudent(i + 1));
34         }
35 
36         return beanCollection;
37     }
38 }

 

    3、Student的工具類

        該類用來產生Student實例。主要是為了報表的數據不那么單調。

  1 package ds.javabean;
  2 
  3 import java.text.DateFormat;
  4 import java.text.SimpleDateFormat;
  5 
  6 import java.util.Date;
  7 import java.util.Random;
  8 
  9 
 10 /**
 11  * 隨機生成Student實體對象的工具類
 12  *
 13  * @author by Young.ZHU
 14  *                on 2012-8-3
 15  *
 16  * Package&FileName: ds.javabean.StudentUtil
 17  */
 18 public class StudentUtil {
 19     //~ Static fields/initializers *********************************************
 20 
 21     /*
 22      * “姓”的字符數組
 23      */
 24     private static String[] FIRST_NAME_ARR = {
 25             "趙",
 26             "錢",
 27             "孫",
 28             "李",
 29             "王",
 30             "張",
 31             "慕容",
 32             "上官",
 33             "東方",
 34             "朱"
 35         };
 36 
 37     /*
 38      * 其他中文數組
 39      */
 40     private static String[] LAST_NAME_ARR  = {
 41             "燕",
 42             "岩",
 43             "艷",
 44             "明",
 45             "建國",
 46             "小剛",
 47             "小娟",
 48             "華",
 49             "天明",
 50             "洋",
 51             "盈盈",
 52             "仁"
 53         };
 54 
 55     /*
 56      * 性別
 57      */
 58     private static String[] GENDER_ARR     = {
 59             "男",
 60             "女"
 61         };
 62     private static DateFormat DATE_FORMATER = new SimpleDateFormat(
 63             "yyyy年MM月dd日");
 64 
 65     //~ Methods ****************************************************************
 66 
 67     public static Student createStudent(int id) {
 68         String firstName = getRandomCharFromArray(FIRST_NAME_ARR);
 69         String lastName  = getRandomCharFromArray(LAST_NAME_ARR);
 70         String name      = firstName + lastName;
 71 
 72         String gender = GENDER_ARR[new Random().nextInt(1000) % 2];
 73 
 74         String birthday = getRandomDate();
 75 
 76         return new Student(id, name, gender, birthday);
 77     }
 78 
 79 
 80     private static String getRandomCharFromArray(String[] arr) {
 81         Random random = new Random();
 82         int    index  = random.nextInt(arr.length);
 83 
 84         return arr[index];
 85     }
 86 
 87     /**
 88      * 隨機生成一個比當前日期小的日期
 89      * 
 90      * @return (yyyy年MM月dd日)
 91      */
 92     private static String getRandomDate() {
 93         Date date     = new Date();
 94         long dateMill = date.getTime();
 95 
 96         Random random = new Random();
 97         dateMill = (long) (random.nextDouble() * dateMill);
 98 
 99         return DATE_FORMATER.format(new Date(dateMill));
100     }
101 }

 

  • 報表設計(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM