天天看點

報表引擎API開發入門—簡單程式資料集

小編最近接的項目是有關報表開發的,很想把這部分知識分享出來。希望大家能夠支援我!不多說,馬上進入我們今天的話題。

API基本知識

小編最近項目所做的是關于一個報表軟體—FineReport報表開發的一些事,也許有人接觸過,知識相通,我今天就把我做的分享出來。

FineReport設計器與伺服器不可能滿足所有的需求,某些個性化需求可能無法實作。我們可以深入的開發與控制API接口。想要了解我們核心結構及api的使用,首先我們必須掌握一些基本的概念,下圖就是我們核心的最基本圖示。

報表引擎API開發入門—簡單程式資料集

圖是網上找的,有點不清楚,大家放大看哈。

報表引擎API開發入門—簡單程式資料集

由于每個部分各自包含了很多屬性,比如可以設定單元格的前景、背景、邊框、字型、字号等;又比如每個WorkSheet中可以添加,删除單元格、可以設定每個sheet的頁面屬性、可以給每個sheet中添加圖表懸浮元素等;再比如可以對WorkBook進行執行獲得結果并導出成各種格式、可以進行列印、添加工具欄等等。下圖為FineReport所有開放的API,我們今後都會用到。

報表引擎API開發入門—簡單程式資料集

簡單程式資料集

FineReport設計器本身已經提供了資料庫資料源、文本資料源、xml資料源等多種資料來源方式,同時程式員還可以通過java程式自行生成資料來源,隻需要實作TableData接口便可以了。

1. 問題描述

FineReport報表的資料來源可以是資料庫資料或是文本資料,并且還可以是其它任何類型的資料,因為FineReport是通過AbstractTableData抽象類來讀取資料源的,而上述所有的資料來源都繼承實作其抽象方法,是以隻要實作了AbstractTableData抽象類,也就可以用自定義類型的資料源了(程式資料集),FineReport報表引擎就能夠讀取定義的資料源作為報表資料源使用。

2.實作原理

AbstractTableData抽象類主要有5個方法,如下:

1.擷取AbstractTableData的總列數

2.擷取AbstractTableData中第columnIndex列的列名

3.判斷是否存在第rowIndex行,這主要是用于處理超大資料時,完全周遊所有資料擷取總行數相當困難,用這個方法來判斷第rowIndex行是否存在,存在則可讀取

4.擷取AbstractTableData的總行數

5.擷取AbstractTableData中第columnIndex列,第rowIndex行的資料

在某些應用場景中,需要在程式中對資料進行處理後再作為報表的資料源使用。

3.示例

下面我們定義資料集為如下樣式:列為Name,Score,值分别為Alex,15;Helly,22;Bobby,99作為程式資料集。

3.1定義程式資料源

定義一個類,繼承AbstractTableData,并實作裡面的方法,具體的代碼如下:

// 定義程式資料集的列名與資料儲存位置      
// 實作建構函數,在建構函數中準備資料      
// 實作ArrayTableData的其他四個方法,因為AbstractTableData已經實作了hasRow方法      

将ArrayTableDataDemo.java編譯生成ArrayTableDataDemo.class類。

将生成的類檔案拷貝到報表工程/WEB-INF/classes目錄下。由于該類是在com. fr.data包中的,是以最終應該将該ArrayTableData.class放在/WEB-INF/classes/com/fr/data下面。此時該程式資料源便定義好了。

3.2配置程式資料源

點選模闆資料集下面的加号,選擇程式資料集,然後在彈出的程式資料集對話框中,選擇對應的class檔案,如下圖:

報表引擎API開發入門—簡單程式資料集

3.3使用程式資料集

配置好程式資料源後便可以使用定義的程式資料集了,與其他類型的資料集使用方法是相同的,可以通過拖拽方法實作單元格資料列綁定。如下圖:

報表引擎API開發入門—簡單程式資料集

今天就講到這啦,是不是很不好懂,小編在做着項目之前沒接觸過報表開發也是費了一番功夫。大家繼續關注哦!

繼續閱讀