JasperReports入門教程(一):快速入門
背景
現在公司的項目需要實現一個可以配置的報表,以便快速的適應客戶的需求變化。后來在網上查資料發現可以使用JasperReports + Jaspersoft Studio工具來實現可配置的報表。在使用過程中也積累了一些經驗,就想分享出來給大家,作為一個入門的指引,讓大家可以更快速的上手。下面大家跟着我一起來實現第一個JasperReports的報表應用。
JasperReports基本介紹
JasperReports是一個非常強大,易用的開源報表引擎,它是用Java編寫的。它可以通過各種各樣的數據源來生成像素級的文檔,這些文檔都可以查看,打印以及導出(文檔格式包括HTML、PDF、Excel、Word等等)。下面我們先嘗試通過一個簡單的demo進行上手。
Jaspersoft Studio
Jaspersoft Studio是一個設計報表模板的工具,我們通過它來設計需要使用報表的模板。
1.下載Jaspersoft Studio工具,選擇下載Jaspersoft Studio CE 下載地址

2.安裝Jaspersoft Studio,安裝過程略過,默認安裝即可
3.開始我們的第一個報表模板
3.1.打開Jaspersoft Studio工具,點擊File->New->Project先創建一個項目

然后填寫項目名字為demo,創建一個名叫demo的項目

3.2.點擊File->New->Jasper Report(也可以直接在demo項目上右鍵New->Jasper Report),選擇一個豎向A4紙大小的模板

Data Adapter可以選擇 One Empty Record 選項,即空數據源,完成后就創建好了第一個模板

4.模板設計界面的區域說明如下。中間的模板設計區域分別多個band,這些band都可以右鍵刪除
- Title:標題區,如果數據有多頁只會在第一頁打印
- Page Header:頁頭區,多頁的情況下每頁都會打印
- Column Header:列頭區,配合下面的Detail區打印列表數據,多頁的情況下每頁都會打印
- Detail:可以新增多個Detail區,可以組合打印出多個列表數據,多頁的情況下每頁都會打印
- Column Footer:列表底部區,多頁的情況下每頁都會打印
- Page Footer:頁底部區,多頁的情況下每頁都會打印
- Summary:合計區,只會在最后一頁打印

5.添加報表元素
5.1.先從右側Basic Elements區域拖拽一個Static Text元素到Title區,可以任意調整元素的大小和位置,雙擊可以修改元素要顯示的內容,
選中元素后,可以在右側設置元素的邊框,字體和大小,文本的對齊方式等等。

5.2.在左側Outline區域Paramters上右鍵Create Paramter創建一個新的屬性,命名為name,類型java.lang.String

5.3.拖拽name屬性到Page Header區域,同樣可以在右側設置它的屬性

5.4.在左側Outline區域Fields上右鍵 Create Field創建兩個字段Field1,Field2,類型java.lang.String

5.5.然后拖拽Field1,Field2字段到Detail1區域,會自動帶出兩個值為Field1,Field2的Static Text元素在Column Header區域,調整位置對齊

5.6.預覽可以看看樣式,因為此時我們未給Field1,Field2的數據集賦值,所以預覽的為null

6.編譯報表模板
6.1.在左側的Project Explorer框文件Blank_A4.jrxml上右鍵Compile Report可以生成編譯好的文件Blank_A4.jasper

7.在java中調用模板並輸出到pdf/html
上面我們在設計器中設計好了報表的模板,下面我們需要在java中通過代碼把數據填充到模板中,並展示出來。
7.1.首先需要在maven中引用jasperreports的jar包依賴
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.9.0</version>
</dependency>
7.2.然后把6.1步驟中編譯好的文件Blank_A4.jasper放入資源文件中
7.3.然后調用代碼把數據填充到模板中,為了方便后續使用,我把JasperReport常用的方法封裝到了JasperReportUtil類中
@GetMapping("/jasper")
public void getReport(@RequestParam("type") String reportType, HttpServletResponse response)
throws Exception {
HashMap<String, Object> parameters = new HashMap<String, Object>();
parameters.put("name", "xiao ming");
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);
list.add(item);
}
String jasperPath = JasperReportUtil.getJasperFileDir("chapter1");
if (reportType.equals("pdf")) {
JasperReportUtil.exportToPdf(jasperPath, parameters, list, response);
} else if (reportType.equals("html")) {
JasperReportUtil.exportToHtml(jasperPath, parameters, list, response);
}
}
7.4.把項目運行起來,在瀏覽器中訪問 http://localhost:8080/test/jasper?type=html 或者 http://localhost:8080/test/jasper?type=pdf 就可以在瀏覽器中看到html或者pdf格式的報表了


