JasperReports入門教程(三):Paramter,Field和Detail基本組件介紹
前言
前兩篇博客帶領大家進行了入門,做出了第一個例子。也解決了中文打印的問題。大家跟着例子也做出了demo,但是大家可能還是比較懵的。肯定有很多疑問,想這些組件都是怎么使用,下面我們就從最基本的Paramters,Fields和Detail來給大家講解下用法。
Paramters
- Paramters是一張報表中全局的屬性,初始自帶了一些屬性,也可以自定義屬性。大家可以理解為存放一個報表的表頭數據
- Paramter的屬性可以是任何類型,String,Long,Double,List等等
- Paramter可以用在報表的任何區域,一般用在報表的
Title
,Page Header
,Page Footer
區域
1.Paramters的創建:在左側的Outline框,在Paramters上右鍵 Create Paramter 就可以創建一個新的Paramter,在右側可以設置名稱和類型。使用時直接拖拽到相應的區域即可。如下圖所示
2.在Java程序中可以通過給對應的Paramter賦值,在打印時就可以輸出你想要的結果。代碼如下所示
//給Paramter賦值
HashMap<String, Object> parameters = new HashMap<String, Object>();
parameters.put("name", "小明");//這里的key要和報表中的Paramter的name對應
parameters.put("age", "18");
//中間代碼省略
//核心代碼,把Paramters傳入JasperReport提供的方法,並返回JasperPrint 對象
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperStream, parameters, dataSource);
Fields
- Fields是報表中數據集合中的字段屬性,只能自定義Field字段。大家可以理解為一個報表的明細列表數據
- Field的屬性可以是任何類型,String,Long,Double,List等等
- Field只能用在報表的
Detail
區域
1.Fields的創建:在左側的Outline框,在Fields上右鍵 Create Field 就可以創建一個新的Field,在右側可以設置名稱和類型。使用時直接拖拽到相應的區域即可。如下圖所示
2.在Java程序中可以通過集合給集合中的每一條數據的Field字段賦值,在打印時就可以輸出你想要的結果。代碼如下所示
//給Field賦值
List<HashMap> list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
HashMap<String, String> item = new HashMap<String, String>();
item.put("Field1", "Field1-" + i);
item.put("Field2", "Field2-" + i);
item.put("Field3", "Field3-" + i);
item.put("Field4", "Field4-" + i);
item.put("Field5", "Field5-" + i);
list.add(item);
}
//中間代碼省略
//核心代碼,用包含Field字段的集合創建一個JRDataSource,傳入JasperReport提供的方法,並返回JasperPrint 對象
JRDataSource dataSource = new JRBeanCollectionDataSource(list);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperStream, parameters, dataSource);
Detail
- Detail是打印Field字段的區域,一個報表可以有多個Detail,在Detail上右鍵可以通過Add Detail Band來增加新的Detail區
- Detail會把傳遞進來的list的數據,循環打印出來,有多條就會打印多行,一頁打印不下就會從下一頁繼續打印
- 如果通過Detail來打印表格,Detail的高度最好和要打印的Field高度一樣,這樣每行就不會有縫隙,打印出來和表格一樣的效果
- 如果存在多個detail,他們是交替打印
動態組件常用的屬性的用法
1.所有動態的組件都是通過Expression表達式來綁定要打印的數據,比如Paramter,Field,Image,Table組件等等。
2.所有組件都有一塊Print When屬性,其中有一個Print When Expression表達式,可以在返回true的情況下打印,在false的情況下不打印。這個表達式可以依賴其他Paramter,Field,可以通過它實現一些特殊的打印需求
表達式例子:new Boolean($F{showtitle1})
,new Boolean(true)