JasperReports入門教程(一):快速入門


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格式的報表了

代碼開發

本節代碼和報表模板


免責聲明!

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



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