Java軟件報表軟件技術(shù)博客

          java報表軟件技術(shù)匯總 java報表軟件制作 報表軟件新聞
          posts - 355, comments - 100, trackbacks - 0, articles - 3
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

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

          API基本知識

          小編最近項目所做的是關(guān)于一個報表軟件—FineReport報表開發(fā)的一些事,也許有人接觸過,知識相通,我今天就把我做的分享出來。
          FineReport
          設(shè)計器與服務(wù)器不可能滿足所有的需求,某些個性化需求可能無法實現(xiàn)。我們可以深入的開發(fā)與控制API接口。想要了解我們內(nèi)核結(jié)構(gòu)及api的使用,首先我們必須掌握一些基本的概念,下圖就是我們內(nèi)核的最基本圖示。

          圖是網(wǎng)上找的,有點不清楚,大家放大看哈。

          由于每個部分各自包含了很多屬性,比如可以設(shè)置單元格的前景、背景、邊框、字體、字號等;又比如每個WorkSheet中可以添加,刪除單元格、可以設(shè)置每個sheet的頁面屬性、可以給每個sheet中添加圖表懸浮元素等;再比如可以對WorkBook進(jìn)行執(zhí)行獲得結(jié)果并導(dǎo)出成各種格式、可以進(jìn)行打印、添加工具欄等等。下圖為FineReport所有開放的API,我們今后都會用到。


          簡單程序數(shù)據(jù)集

          FineReport設(shè)計器本身已經(jīng)提供了數(shù)據(jù)庫數(shù)據(jù)源、文本數(shù)據(jù)源、xml數(shù)據(jù)源等多種數(shù)據(jù)來源方式,同時程序員還可以通過java程序自行生成數(shù)據(jù)來源,只需要實現(xiàn)TableData接口便可以了。

          1. 問題描述

          FineReport報表的數(shù)據(jù)來源可以是數(shù)據(jù)庫數(shù)據(jù)或是文本數(shù)據(jù),并且還可以是其它任何類型的數(shù)據(jù),因為FineReport是通過AbstractTableData抽象類來讀取數(shù)據(jù)源的,而上述所有的數(shù)據(jù)來源都繼承實現(xiàn)其抽象方法,因此只要實現(xiàn)了AbstractTableData抽象類,也就可以用自定義類型的數(shù)據(jù)源了(程序數(shù)據(jù)集),FineReport報表引擎就能夠讀取定義的數(shù)據(jù)源作為報表數(shù)據(jù)源使用。

          2.實現(xiàn)原理

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

          1.獲取AbstractTableData的總列數(shù)

          publicintgetColumnCount();

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

          public String getColumnName(int columnIndex);

          3.判斷是否存在第rowIndex行,這主要是用于處理超大數(shù)據(jù)時,完全遍歷所有數(shù)據(jù)獲取總行數(shù)相當(dāng)困難,用這個方法來判斷第rowIndex行是否存在,存在則可讀取

          publicbooleanhasRow(int rowIndex);

          4.獲取AbstractTableData的總行數(shù)

          publicintgetRowCount();

          5.獲取AbstractTableData中第columnIndex列,第rowIndex行的數(shù)據(jù)

          public Object getValueAt(int rowIndex, int columnIndex);

          在某些應(yīng)用場景中,需要在程序中對數(shù)據(jù)進(jìn)行處理后再作為報表的數(shù)據(jù)源使用。

          3.示例

          下面我們定義數(shù)據(jù)集為如下樣式:列為NameScore,值分別為Alex15Helly22Bobby99作為程序數(shù)據(jù)集。
          3.1
          定義程序數(shù)據(jù)源
          定義一個類,繼承AbstractTableData,并實現(xiàn)里面的方法,具體的代碼如下:

          publicclassArrayTableDataDemoextendsAbstractTableData{
              // 定義程序數(shù)據(jù)集的列名與數(shù)據(jù)保存位置
              private String[] columnNames;
              private Object[][] rowData;
              // 實現(xiàn)構(gòu)建函數(shù),在構(gòu)建函數(shù)中準(zhǔn)備數(shù)據(jù)
              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;
              }
              // 實現(xiàn)ArrayTableData的其他四個方法,因為AbstractTableData已經(jīng)實現(xiàn)了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包中的,因此最終應(yīng)該將該ArrayTableData.class放在/WEB-INF/classes/com/fr/data下面。此時該程序數(shù)據(jù)源便定義好了。
          3.2
          配置程序數(shù)據(jù)源
          點擊模板數(shù)據(jù)集下面的加號,選擇程序數(shù)據(jù)集,然后在彈出的程序數(shù)據(jù)集對話框中,選擇對應(yīng)的class文件,如下圖:

          3.3
          使用程序數(shù)據(jù)集
          配置好程序數(shù)據(jù)源后便可以使用定義的程序數(shù)據(jù)集了,與其他類型的數(shù)據(jù)集使用方法是相同的,可以通過拖拽方法實現(xiàn)單元格數(shù)據(jù)列綁定。如下圖:


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




          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 金山区| 九龙坡区| 丽水市| 广灵县| 临洮县| 和林格尔县| 广灵县| 衡东县| 蒙自县| 石家庄市| 星子县| 江永县| 麻栗坡县| 甘肃省| 黄大仙区| 尼木县| 新营市| 甘洛县| 昭觉县| 宜城市| 应城市| 潮安县| 齐齐哈尔市| 平阴县| 凉城县| 革吉县| 常宁市| 津南区| 安义县| 昭苏县| 江永县| 天台县| 台江县| 湾仔区| 铜陵市| 古丈县| 乐业县| 聂拉木县| 玛纳斯县| 阿坝县| 商南县|