報表引擎API開發入門—簡單程序數據集

小編最近接的項目是有關報表開發的,很想把這部分知識分享出來。但願你們可以支持我!很少說,立刻進入咱們今天的話題。java

API基本知識

小編最近項目所作的是關於一個報表軟件—FineReport報表開發的一些事,也許有人接觸過,知識相通,我今天就把我作的分享出來。
FineReport設計器與服務器不可能知足全部的需求,某些個性化需求可能沒法實現。咱們能夠深刻的開發與控制API接口。想要了解咱們內核結構及api的使用,首先咱們必須掌握一些基本的概念,下圖就是咱們內核的最基本圖示。

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

因爲每一個部分各自包含了不少屬性,好比能夠設置單元格的前景、背景、邊框、字體、字號等;又好比每一個WorkSheet中能夠添加,刪除單元格、能夠設置每一個sheet的頁面屬性、能夠給每一個sheet中添加圖表懸浮元素等;再好比能夠對WorkBook進行執行得到結果並導出成各類格式、能夠進行打印、添加工具欄等等。下圖爲FineReport全部開放的API,咱們從此都會用到。
程序員


簡單程序數據集

FineReport設計器自己已經提供了數據庫數據源、文本數據源、xml數據源等多種數據來源方式,同時程序員還能夠經過java程序自行生成數據來源,只須要實現TableData接口即可以了。數據庫

1. 問題描述api

FineReport報表的數據來源能夠是數據庫數據或是文本數據,而且還能夠是其它任何類型的數據,由於FineReport是經過AbstractTableData抽象類來讀取數據源的,而上述全部的數據來源都繼承實現其抽象方法,所以只要實現了AbstractTableData抽象類,也就能夠用自定義類型的數據源了(程序數據集),FineReport報表引擎就可以讀取定義的數據源做爲報表數據源使用。服務器

2.實現原理

AbstractTableData抽象類主要有5個方法,以下:函數

1.獲取AbstractTableData的總列數工具

publicintgetColumnCount();

2.獲取AbstractTableData中第columnIndex列的列名字體

public String getColumnName(int columnIndex);

3.判斷是否存在第rowIndex行,這主要是用於處理超大數據時,徹底遍歷全部數據獲取總行數至關困難,用這個方法來判斷第rowIndex行是否存在,存在則可讀取大數據

publicbooleanhasRow(int rowIndex);

4.獲取AbstractTableData的總行數this

publicintgetRowCount();

5.獲取AbstractTableData中第columnIndex列,第rowIndex行的數據

public Object getValueAt(int rowIndex, int columnIndex);

在某些應用場景中,須要在程序中對數據進行處理後再做爲報表的數據源使用。

3.示例

下面咱們定義數據集爲以下樣式:列爲Name,Score,值分別爲Alex,15;Helly,22;Bobby,99做爲程序數據集。
3.1定義程序數據源
定義一個類,繼承AbstractTableData,並實現裏面的方法,具體的代碼以下:

publicclassArrayTableDataDemoextendsAbstractTableData{
    // 定義程序數據集的列名與數據保存位置
    private String[] columnNames;
    private Object[][] rowData;
    // 實現構建函數,在構建函數中準備數據
    publicArrayTableDataDemo(){
        String[] columnNames = { "Name", "Score" };
        Object[][] datas = { { "Alex", new Integer(15) },
                { "Helly", new Integer(22) }, { "Bobby", new Integer(99) } };
        this.columnNames = columnNames;
        this.rowData = datas;
    }
    // 實現ArrayTableData的其餘四個方法,由於AbstractTableData已經實現了hasRow方法
    publicintgetColumnCount(){
        return columnNames.length;
    }
    public String getColumnName(int columnIndex){
        return columnNames[columnIndex];
    }
    publicintgetRowCount(){
        return rowData.length;
    }
    public Object getValueAt(int rowIndex, int columnIndex){
        return rowData[rowIndex][columnIndex];
    }
}

將ArrayTableDataDemo.java編譯生成ArrayTableDataDemo.class類。
將生成的類文件拷貝到報表工程/WEB-INF/classes目錄下。因爲該類是在com. fr.data包中的,所以最終應該將該ArrayTableData.class放在/WEB-INF/classes/com/fr/data下面。此時該程序數據源便定義好了。
3.2配置程序數據源
點擊模板數據集下面的加號,選擇程序數據集,而後在彈出的程序數據集對話框中,選擇對應的class文件,以下圖:

3.3使用程序數據集
配置好程序數據源後即可以使用定義的程序數據集了,與其餘類型的數據集使用方法是相同的,能夠經過拖拽方法實現單元格數據列綁定。以下圖:


今天就講到這啦,是否是很很差懂,小編在作着項目以前沒接觸過報表開發也是費了一番功夫。你們繼續關注哦!

相關文章
相關標籤/搜索