置頂隨筆
#
簡表(JOR),是一款開源的報表工具,完全java實現(xiàn),核心代碼來自于國內(nèi)一線報表工具品牌杰表.2008 。
提起開源的報表工具,不能不說說jaspereport,jasperreport作為著名的開源報表工具,在java程序員中一直享有盛名。但由于其設(shè)計主要是針對西式的簡單報表,設(shè)計起復(fù)雜的中式報表來,有點力不從心,所以,在國內(nèi)的項目中能成功應(yīng)用的例子并不多。JOR,作為能做復(fù)雜報表的開源報表工具,可以彌補jasperreport的不足。
下載地址:
http://www.jatools.com/jor
java實現(xiàn)的olap服務(wù)器,完全自主產(chǎn)權(quán),純java實現(xiàn). cube架構(gòu),性能優(yōu),占用空間小.
分析模型設(shè)計器
通過圖片介紹java報表開發(fā)過程中,經(jīng)常遇到的一些報表類型,統(tǒng)計圖,及可視化的設(shè)計等.下面以 杰表.2008 為例介紹之.
一、支持報表類型
主從報表

套打報表

標(biāo)簽報表

分欄報表

計算比去年增長數(shù)

計算比去年同期增長數(shù)

補足空行的表格報表

多表合并.不同的數(shù)據(jù)集,做成一個相連的報表.

公式分組報表.按字段值,進行分類,分級

排行榜(Top N)報表

按匯總值大小排序的分組

多級分組

計算占比

顯示排名

交叉表折頁處理



層次不等的交叉表

行列并行分組的交叉表

多數(shù)據(jù)集的交叉表

靜態(tài)表格中的公式計算

二、javabean數(shù)據(jù)源
使用java數(shù)組
假設(shè)項目組其他成員已經(jīng)編寫了一個Student類,如下圖(a),該類定義四個方法,分別獲取其姓名,年齡,性別,分數(shù)。由腳本構(gòu)造一個包含三個Student對象的數(shù)組,如圖(b),要求你做成下圖(c)所示報表。

嵌套的java對象數(shù)據(jù)源
假設(shè)你有下圖(a)所示的兩個類Student和Person,你可以使用Student的getMembers()方法,取得該學(xué)生的家庭成員列表,每個家庭成員用一個Person對象表示,該對象包含與該學(xué)生的關(guān)系、姓名、性別等信息。

ResultSet數(shù)據(jù)源

指定sql查詢一個報表

三、統(tǒng)計圖與條碼
插入統(tǒng)計圖對象

設(shè)置統(tǒng)計圖背景及立體效果

設(shè)置統(tǒng)計圖輸出格式為Flash

從統(tǒng)計圖鉆取另一個明細報表
你可以在統(tǒng)計圖的某一個數(shù)據(jù)區(qū)放置一個超鏈接,使用戶雙擊該區(qū)時,跳轉(zhuǎn)到另一個子報表或網(wǎng)頁,如,有一個柱形圖,顯示各產(chǎn)品的庫存量,點擊某個產(chǎn)品的柱面,就可以打開該產(chǎn)品相關(guān)的銷售記錄。

餅圖

以時間為橫軸的統(tǒng)計圖

混合類型統(tǒng)計圖

雙軸統(tǒng)計圖

創(chuàng)建甘特圖

特殊統(tǒng)計圖








創(chuàng)建條形碼對象
日常生活中條形碼隨處可見,條形碼用幾何圖形表示數(shù)據(jù),并可以被專門設(shè)備識別。杰表可支持的13種條形碼,分別是codabar、code39、code128、2of5、postnet、ean-128、ean-13、ean-8、upc-a、upc-e、royal-mail-cbc、pdf417、datamatrix,其中最后兩種是二維條形碼。
一維碼
二維碼 
設(shè)置圖片背景

顯示數(shù)據(jù)庫字段上的圖片

三、特殊的報表效果
凍結(jié)窗口效果

點擊表頭排序

使用超鏈接子報表
當(dāng)你瀏覽報表時,可能需要了解更詳細的信息,比如,我們在瀏覽一個訂單列表時,希望了解該訂單中各貨物的銷售數(shù)量。這時,你可以在訂單列表中,加一個超鏈接,使用戶在點擊該鏈接后,可以跳轉(zhuǎn)到顯示該訂單明細的一個報表。
你可以在主表中,點擊訂單ID,即可瀏覽該訂單出售的所有貨物明細,如下圖所示:

熱點提示

復(fù)雜匯總

顏色警告

斑馬條

創(chuàng)建頁小計、頁累計報表

四、可視化設(shè)計器
設(shè)計參數(shù)表單
杰表.2008配備了一個可視化參數(shù)表單設(shè)計器,使用這個設(shè)計器,你可以不離開報表設(shè)計器環(huán)境,輕松制作查詢表單。表單設(shè)計器有豐富的web控件,檢驗,事件偵聽,css樣式機制,你也可以使用javascript腳本擴展表單功能,同時,也實現(xiàn)了常用的多個下拉框聯(lián)動功能。

可視化的報表設(shè)計器

報表預(yù)覽面板

本文試圖對市面上流行的純java實現(xiàn)的web報表工具,jasperreport 、 stylereport 、杰表、潤乾報表、快逸、finererport為例,分析各報表工具采用的web打印技術(shù)的異同、優(yōu)劣、及對用戶需求的適應(yīng)性,供大家參考。
打印是報表工具的基本功能之一,有些報表工具就是從一個專門的打印程序中發(fā)展而來,如用友華表。因為想當(dāng)然地簡單,所以,在報表工具選型時用戶常常忽略這個問題,特別是有些報表工具廠商,明知自己的打印方案在滿足某些需求時,存在缺陷,但沒有盡明確告知義務(wù),而故意事先做好花里胡哨的有關(guān)打印方面的文檔,欺騙客戶。我曾不至一次地聽說,有些開發(fā)商選用的報表工具,其打印功能不能滿足需求,不得不另外找打印工具的事情,實在是吃盡苦頭。
報表打印在c/s時代,確實非常簡單,vb,vc,Delphi,pb,都有很好用的打印api,有的甚至用報表控件方式,搞定打印更是分分秒的事情,但今天是b/s的天下,報表都是在網(wǎng)頁瀏覽器中顯示,但當(dāng)今的瀏覽器打印功能一般非常弱(誰讓你叫他“瀏覽”器呢?“瀏覽”就是讓你用眼睛看,“打印”屬于兼職),要做到精確分頁打印,幾乎不可能,所以當(dāng)前的報表工具,一般不會讓你使用瀏覽器的打印菜單來打印報表,都有自己的解決方案,這下可好,各報表工具廠商由是乎,八仙過海,各顯神通,各家都說自己的好,對于web打印了解不深的客戶,總有霧里看花的感覺。
歸納來說,當(dāng)今java報表工具采用的打印技術(shù)不外乎三類:Applet打印、導(dǎo)出成pdf/excel打印、控件打印。用戶選用的重點是:盡量選擇插件小的打印軟件,因為文件小意味著安裝迅速,啟動速度快。插件大小除了插件本身的大小外,還需要考慮支持軟件的大小,如有些插件很小,支持軟件卻很大。
Applet打印
本文開始處提及的報表工具,除finereport外都支持Applet打印。之所以多數(shù)廠商支持Applet方式打印,因為Applet是java實現(xiàn),與java后臺、java報表設(shè)計器的兼容性較好,代碼容易維護,實現(xiàn)也方便。然而,廠商省事,用戶就得多事。Applet方式打印,用戶最多的抱怨是需要安裝jre(而當(dāng)前的操作系統(tǒng),一般不是默認安裝的),雖然說,多數(shù)廠商已經(jīng)做到可以自動安裝jre,但對于10幾M(JRE1.4有15M,JRE1.5為16M))的安裝,這意味著用戶需要較長時間的等待。
另一個問題是Applet配置復(fù)雜,使用不穩(wěn)定。1995年,正是因為給人們無窮的視覺和腦力震蕩的Applet ,使人們認識了java,認識了Games Gosling。所以在b/s早期,人們?yōu)榱苏宫F(xiàn)html的富客戶效果,Applet是唯一之選。但現(xiàn)如今,Applet已經(jīng)是昨日黃花,早已被ajax、flex取代,是什么原因?戰(zhàn)略層面的東西,我也不太說得清楚,但作為程序員,經(jīng)過幾番折騰后,也不會愿意再用Applet了。如經(jīng)常莫名其妙地出現(xiàn)“小應(yīng)用程序,… notinited”的錯誤,還得清理ie緩存,對于Applet打印,還需要設(shè)置jre的安全策略等等。不是靠終端用戶能完成的,這就必須額外地增加開發(fā)商的服務(wù)成本。
Applet打印,啟動速度慢。Applet打印原理是,當(dāng)你點擊打印按鈕時,瀏覽器啟動Applet,Applet根據(jù)參數(shù)訪問后臺頁面信息,后臺返回頁面,Applet加載頁面后,調(diào)用jre的打印服務(wù)進行打印。這就意味著,每次打印都需要調(diào)用后臺服務(wù)程序,就必然影響打印的響應(yīng)速度。
Applet打印很安全,言下之意是ActiveX打印不安全,這是采用Applet打印的廠商津津樂道的,實際上,這是一個偽命題。Applet和ActiveX都是瀏覽器的插件,我們當(dāng)然不希望下載插件后,該插件可以為所欲為,比如,刪除你磁盤里的文件,或啟動一個木馬,從這點來說,Applet確實比ActiveX安全,因為Applet是在一個受限的環(huán)境里運行,而ActiveX是不受限的。所以,當(dāng)你訪問一個陌生的網(wǎng)站時,出于安全考慮,你可能會允許下載運行Applet,而阻止ActiveX。但當(dāng)用戶訪問自己的網(wǎng)站系統(tǒng),時,這種擔(dān)心就沒必要,這好比,當(dāng)你與陌生人打交道時,很自然地會問自己,這人可信嘛?但如果你與家里人打交道,這個問題就不成其為問題了。
Applet打印,除了可以設(shè)置打印機,設(shè)置紙張頁面大小等常規(guī)打印功能外,往往也集成與打印不相關(guān)的功能,比如,打印前修改(有人說,是為了做假帳方便,中國特色,國產(chǎn)報表工具一般都具備,jasperreport,stylereport不支持),按行分頁,自由定位,這些本來由設(shè)計器完成的功能,挪到打印功能上來,來掩蓋上面指出的Applet的種種不足。實際上,Applet功能強弱完全取決于Applet的大小,有些報表廠商甚至用Applet或web start 的方式,提供所謂的基于web的報表設(shè)計,前提是下載 40多M的jar包,實際上,這種方案遠非一般意義上的純web 的報表設(shè)計,完全是混淆概念。作為用戶最希望常規(guī)的,他們熟悉的打印功能,不需要不相關(guān)的,理解困難的打印功能。
PDF/EXCEL打印
Pdf打印方式,就是用戶點擊打印后,瀏覽器會自動彈出adobe reader,再利用adobe的打印按鈕進行打印,由于國外adobe reader安裝非常普及,國外的java報表工具多提供這種打印方案,比如 stylereport,jasperreport,國內(nèi)報表工具finereport也采用這種方式(讓人不解),pdf方式打印的好處是能做到精確打印,而且報表預(yù)覽與打印一氣呵成。但不足是需要在客戶的機子里,事先安裝有adobe reader,作為程序員,一般不太會有問題,因為程序員可能經(jīng)常要瀏覽一些pdf文檔,多數(shù)已經(jīng)裝了adobe reader,但國內(nèi)的終端用戶,大多不知pdf是何物,更談不上安裝。
Pdf打印的另一個問題是必須彈出adobe reader,不能做到無預(yù)覽打印,這可能由于pdf缺少相應(yīng)api的緣故吧。
輕量級的ActiveX打印
這里之所以強調(diào)“輕量級”,目的是與傳統(tǒng)意義上的ActiveX報表相區(qū)別。ActiveX技術(shù)可以說是報表工具家族里的沒落貴族,c/s時代,報表工具一般都被做成控件形式,水晶報表就是如此,在b/s時代,報表工具里仍然能看到ActiveX的身影,但風(fēng)光大不如從前,如數(shù)巨,明宇,用友華表,inforeport。用ActiveX實現(xiàn)報表的不足,在網(wǎng)上你能輕易找到,在此不再詳述。ActiveX 報表雖深受詬責(zé),但從打印功能來說,卻都是近乎完美,處理得卻非常好,非常穩(wěn)定。
既然,ActiveX打印是長處,能不能揚長避短地使用ActiveX技術(shù)?有人提出這樣的問題。于是,有些廠商,比如杰表,采用了瀏覽時用html,打印時用插件的方式。這種方案的需要解決的問題是,ActiveX打印控件,不能太大,否則報表工具成了ActiveX報表了。
與Applet相比,輕量級ActiveX打印具有以下優(yōu)勢:
1. 下載時間短,(大小是Applet的1/250);
2. 本地打印,打印時,不需要訪問后臺服務(wù)程序,不占用服務(wù)器資源;
3. 啟動速度快,由于控件小,且本地打印,所以打印速度是優(yōu)于以上兩中打印方案,打印速度與你點擊瀏覽器打印菜單相差無幾。
采用輕量級的ActiveX打印的不足是,只有ie 5.5 及以上版本支持,其他版本的瀏覽器不支持。好在ie5.5瀏覽器已非常普及,在用戶那里應(yīng)該不是大問題。
杰表采用的打印方案,用一個jatoolsPrinter的控件,大小是60k,是經(jīng)過數(shù)字簽名的。這個打印控件采用ie特有的打印技術(shù)(templateprinter)實現(xiàn)打印功能,支持打印,預(yù)覽,邊距設(shè)置,重復(fù)打印,批量打印功能。
目前,jatoolsPrinter已經(jīng)從杰表中獨立出來,任何報表工具或第三方軟件都利用該控件,實現(xiàn)web打印,推出至今,免費加收費用戶上萬。
下表總結(jié)三種方式的采用者及優(yōu)劣對比,對于ie5.5客戶來說,我們推薦使用ActiveX打印方案.

報表廠商列表
jasperreport
Stylereport
杰表
潤乾
快逸
finererport
當(dāng)我們使用報表工具,設(shè)計完一張報表時,我們同時必須為該報表設(shè)計一個查詢條件表單,使得用戶在瀏覽報表時,可以在網(wǎng)頁中選取查詢條件。在過去,設(shè)計表單是件令人沮喪的事情,這不僅要求你在報表設(shè)計器與開發(fā)環(huán)境之間來回切換,而且在設(shè)計表單時,還需要考慮系統(tǒng)的其他布局元素的關(guān)系,苦燥,繁瑣,沒有挑戰(zhàn)性。更進一步,如果項目要求最終用戶能夠自己設(shè)計報表,天吶,他們可能喜歡用報表設(shè)計工具來設(shè)計報表,但絕對不愿意用網(wǎng)頁設(shè)計工具來設(shè)計表單。
當(dāng)然,也有一些報表工具,實現(xiàn)了參數(shù)表單的自動化,比如,按一定規(guī)則順序排列參數(shù)項,但這種自動化,用戶很難按其需求進行排版布局,所以不能徹底解決用戶的問題。
現(xiàn)在,杰表.2008配備了一個可視化參數(shù)表單設(shè)計器,使用這個設(shè)計器,你可以不離開報表設(shè)計器環(huán)境,輕松制作查詢表單。表單設(shè)計器有豐富的web控件,檢驗,事件偵聽,css樣式機制,你也可以使用javascript腳本擴展表單功能,同時,也實現(xiàn)了常用的多個下拉框聯(lián)動功能。
杰表.2008表單設(shè)計器不僅是表單設(shè)計工具的替代品,更重要的是表單設(shè)計器解決了報表設(shè)計容易,部署難的問題。我們希望,利用集成的表單設(shè)計器,你只要在設(shè)計器中設(shè)計好參數(shù)表單,并將報表模板文件和表單模板文件置于某個位置,你的用戶就可以在瀏覽器中,按條件瀏覽這張報表了,這中間不需要你再做任何其他事情。
有關(guān)表單設(shè)計的更多內(nèi)容,點擊這里

作為java程序員,大家可能都聽說過,或用過birt, 據(jù)說,現(xiàn)在birt的東家actual,正式入駐中國市場,聯(lián)想到前些天杰表.2008的推出,今年,注定是國內(nèi)的報表軟件市場不平靜的一年。
birt的最大好處是開源,不足是水土不服,做起復(fù)雜報表來不方便,復(fù)雜報表主要說的是行上,列上有多個并列分組的交叉報表,國產(chǎn)報表工具大都關(guān)注復(fù)雜報表需求,而洋品牌的報表軟件工具,如jasperreport,crystalreport,這方面關(guān)注不夠,所以做起復(fù)雜報表來很吃力。
做什么事情必須先有觀念,然后,付諸實現(xiàn),做軟件則更進一步,必須將這些觀念結(jié)構(gòu)化,即模型化。對復(fù)雜報表需求的處理,國內(nèi)報表軟件廠商時下,用得最多的是類excel報表模型,即以單元格為中心報表模型,最早產(chǎn)品化的,是用友華表,當(dāng)然它不屬于java陣營的,java陣營的現(xiàn)在有潤乾,finereport,杰表4.0,類excel報表模型大家都覺得,功能很強,但最大問題是,學(xué)習(xí)起來不方便,不知道你在大學(xué)里,微積分考多少,如果你90分以下,那你最好別碰那東西。
杰表.2008采用的復(fù)雜報表模型,相對來說,比excel模型容易得多,比如下圖是一個典型的復(fù)雜報表,該報表用于按不同分類方法
統(tǒng)計培訓(xùn)學(xué)員人數(shù),該表列上存在多個分組(培訓(xùn)類型、累計培訓(xùn)時間、參加培訓(xùn)總?cè)藬?shù)、培訓(xùn)內(nèi)容、渠道類型),分組之間不存在嵌套關(guān)系的,即分組是并列的。行上存在一個按學(xué)員
行政級別為依據(jù)的分組。
復(fù)雜報表的復(fù)雜性在于結(jié)構(gòu)復(fù)雜,比如上圖報表列上存在多個并列分組,不僅如此,行上也可能存在多個并行分組;不僅有多個并列分組,也可能各并列分組的嵌套數(shù)不一樣;不僅各個分組來源于同一個
數(shù)據(jù)集,也可能來自多個不同的數(shù)據(jù)集。
盡管如此,我們?nèi)匀豢梢园褟?fù)雜的交叉報表,看作下圖所示的結(jié)構(gòu),表格包括A,B,C,D四部分,其中B,C是兩個表格,決定了交叉表的結(jié)構(gòu)。B表格非常特殊,第一,該表格向右生長的,而一般我們常見向下生長,如C 表格。第二,該表格有多個并列分組,而一般報表工具中,表格對象最外圍只能有一個分組,盡管其嵌套數(shù)是可以多重的。
杰表.2008以上述結(jié)構(gòu)分析為基礎(chǔ),引入了超級表格對象,該對象就是通過嵌入兩個擴展方向不同的子表格,行頭表和列頭表,來完成交叉報表的結(jié)構(gòu)性問題。兩表均可以有任意多的并列分組,每個分組可以有
層次不同的嵌套。下圖(a)是
設(shè)計面板中的超級表格對象,下圖(b)是該對象子部件的層次關(guān)系,其中對象3就是行頭表,對象4就是列頭表。
杰表的超級表格對象結(jié)合杰表的DOM報表數(shù)據(jù)模型,可以演化出任意復(fù)雜的多源,多組交叉表,下面試舉幾例說明之。(點擊進入查看)
列上并行分組交叉表
層次不等的交叉表
行列并行分組的交叉表
多數(shù)據(jù)集的交叉表
計算比去年增長數(shù)
計算比去年同期增長數(shù)
計算占比
顯示排名
按照匯總值排序的交叉報表
交叉表折頁處理
交叉表居中
一般java報表工具,允許用戶使用java類來作動態(tài)數(shù)據(jù)來源,但這個類必須符合工具要求的接口,如JasperReport的JRDataSource接口,杰表的BeanDataset接口。這種方式確實為用戶提供了一種在報表工具中使用java對象的途徑,但同時,因為需要實現(xiàn)特定接口,額外地增加了編碼工作。
有沒有一種不需要實現(xiàn)接口直接使用java對象的辦法呢?杰表.2008提供了這樣的方法。
假設(shè)你有下圖(a)所示的兩個類Student和Person,你可以使用Student的getMembers()方法,取得該學(xué)生的家庭成員列表,每個家庭成員用一個Person對象表示,該對象包含與該學(xué)生的關(guān)系,姓名,性別等信息。注意,這兩個類沒有實現(xiàn)任何額外的接口。

如果你有一個Student對象,那么,在杰表.2008中,你就可以做成如上圖(b)所示報表,上半部分列出該學(xué)生的本人信息,下面顯示該學(xué)生的家庭成員表。更多內(nèi)容請參照:
使用java對象作數(shù)據(jù)源
使用java數(shù)組
java數(shù)組節(jié)點訪問
List,iterator數(shù)據(jù)源
嵌套的java對象數(shù)據(jù)源
ResultSet數(shù)據(jù)源
TableModel數(shù)據(jù)源
近年來,純java的類excel報表工具異軍突起,在國內(nèi)報表工具市場中取得了初步成功。目前市場上主流的純java類excel的報表工具有潤乾、杰表4.0、finereport等。
類excel報表工具之所以受國人追捧,一方面是契合了國內(nèi)用戶喜歡用格子做報表的習(xí)慣,另一方面,由于擴展的類excel報表模型的推出,比如潤乾的非線性多源分片模型,杰表4.0的超級cell模型,滿足了用戶編制復(fù)雜報表的需求。
然而,通過這幾年的應(yīng)用,類excel報表工具的問題也大量暴露出來,主要集中在易用性和性能兩方面,根本原因在于類excel報表工具模型本身的不合理。用類excel報表模型去解決復(fù)雜報表需求,就像用十字鑼絲刀去開啟一字鑼絲一樣,雖然勉強能用,但終歸不是問題的正解。
現(xiàn)在,因為復(fù)雜報表需求概念被炒得火熱,幾乎每一個報表工具廠商都聲稱自己能做中國式的復(fù)雜報表,但你若追問一句,你們的報表工具好使嘛?需要多長時間能掌握?我估計百分之百啞口。
選用報表工具的目的是為了提高開發(fā)報表模塊的效率,如果報表工具學(xué)習(xí)起來困難,不易掌握,那么,雖然報表工具給你帶來了設(shè)計報表的便利,但也同時給你制造了不必要的學(xué)習(xí)障礙。在it企業(yè)人才流動頻繁的背景下,降低報表工具的學(xué)習(xí)難度,就等于降低項目的人工成本和風(fēng)險,所以報表工具易用性是考量報表工具的一個重要指標(biāo)。往極端了說,如果一個報表工具,需要有一個愛因斯坦的大腦才能使用,這樣的報表工具不用也罷。
用戶是上帝,當(dāng)用戶有很多報表工具產(chǎn)品可供選擇之時,用戶對我們報表廠商提出了更高的要求,他們不會再滿足于問你能不能做,還會問你上手夠不夠快。面對如此新的市場要求,有些報表工具廠商沒有引起足夠重視,仍然延續(xù)著營銷亢奮,研發(fā)萎靡的做法,一個概念賣到低,不能不令人憂慮。杰表團隊堅信,一個好的產(chǎn)品只有持續(xù)地傾聽市場的聲音,并體現(xiàn)在我們提供的產(chǎn)品與服務(wù)上,才能取得持續(xù)的成功。
2003年,融合類excel模型的杰表推出市場,到2006年春,決定全面重寫杰表框架,停止一切主動的市場營銷活動。為什么要重寫框架呢?我們需要找到一種更易使用的報表模型。因為經(jīng)過多年的市場檢驗,我們意識到類excel報表報表模型,不管是杰表4.0的超級cell模型還是潤乾的多源分片模型,都不能很好解決復(fù)雜報表問題。
類excel模型不易學(xué)習(xí)的根本原因是,沒有一個可視化的數(shù)據(jù)模型。所以你需要在非線性、多源分片、軸這些豪華概念的面前,費盡腦力。另外,采用單元格即數(shù)據(jù)的做法,完全違反了MVC的軟件哲學(xué),使之報表工具的靈活性大受限制。總之,非線性多源分片技術(shù)確實很數(shù)學(xué),但很不哲學(xué)。
2008年5月,經(jīng)過持續(xù)兩年的潛心研發(fā),杰表.2008正式面市。杰表.2008采用可視化的dom驅(qū)動報表模型,采用MVC架構(gòu),從根本上解決復(fù)雜報表工具學(xué)習(xí)難的問題。下圖是杰表.2008設(shè)計器中展現(xiàn)的可視化報表模型。更多內(nèi)容參見 www.jatools.com
2009年10月15日
#
簡表(JOR),是一款開源的報表工具,完全java實現(xiàn),核心代碼來自于國內(nèi)一線報表工具品牌杰表.2008 。
提起開源的報表工具,不能不說說jaspereport,jasperreport作為著名的開源報表工具,在java程序員中一直享有盛名。但由于其設(shè)計主要是針對西式的簡單報表,設(shè)計起復(fù)雜的中式報表來,有點力不從心,所以,在國內(nèi)的項目中能成功應(yīng)用的例子并不多。JOR,作為能做復(fù)雜報表的開源報表工具,可以彌補jasperreport的不足。
下載地址:
http://www.jatools.com/jor
2009年9月25日
#
java實現(xiàn)的olap服務(wù)器,完全自主產(chǎn)權(quán),純java實現(xiàn). cube架構(gòu),性能優(yōu),占用空間小.
分析模型設(shè)計器
2009年9月2日
#
閑話少說,曬幾個杰表.2008的ppt截圖,希望有助于大家對報表工具的選擇.






2009年6月22日
#
jni 類型
簡單類型 primitive type
jni有8大基本類型, jboolean,jbyte,jchar,jshort,jint,jfloat,jlong,,jdouble
8位,16位,32位,64位,各兩個(在win32平臺中,其他平臺不一定)
java類型與c++數(shù)據(jù)類型的映射關(guān)系是如下:
jboolean <--> unsigned char
jchar <--> unsigned short
jshort <--> short
jfloat <--> float
jdouble <--> double
這是在 jni.h里定義的,為啥缺了jbyte,jint,jlong的映射呢?
答案是:sun在實現(xiàn)java虛擬機時,考慮到虛擬機可能運行在不同的操作系統(tǒng)和不同的硬件平臺上,比如,硬件平臺有8位,16位,32位,64位的區(qū)別,為了更好地與硬件平臺匹配,發(fā)揮最好的性能,將一些類型抽取出來,允許在不同的平臺上有不同的表示(位數(shù)),我們姑且稱之為硬件相關(guān)類型,jbyte,jint,jlong就屬于硬件相關(guān)類型。
舉列來說,如果你在32位機上,jint表示的是32bit的,而在64位機上,一般是64位即8個字節(jié)表示,也就是說,jbyte,jint,jlong在sun的虛擬機上,位數(shù)是不定的。
那位數(shù)不一定,怎么編譯? sun的方法是增加一個機器相關(guān)的jni_md.h文件,這里的md是machine dependent(機器相關(guān))的意思。在win32平臺中,這三個類型的定義如下:
typedef long jint;
typedef __int64 jlong;
typedef signed char jbyte;
由此可見,在win32平臺中,jint是32位的,jlong是64位,jbyte是8位的.
指針類型 reference type
reference 準(zhǔn)確的譯法,應(yīng)該是引用,但引用實際上就是指針的一種偽裝,只不過更接近人的思維罷了。如果說,"爸爸的爸爸"是一種指針概念,那"爺爺"就是一種引用概念。
jni把類型分為兩大類,一個是簡單類型,一個是引用類型,下面是引用類型

從上圖似乎可以看出,所有引用類型,都從jobject 繼承,jarray又被幾個簡單類型的數(shù)組繼承.
但實際上這個對象層次,是一種假象,跟我們c++與java中看到的對象層次是有區(qū)別的,jobject與LPSTR(字符串指針),本質(zhì)上沒有區(qū)別:
1. jobject, jclass,jstring,...等,所有對象,是指針,不是對象本身,而指針是不存在繼承關(guān)系的,“小狗”的指針,從“動物”的指針繼承,這種說法不成立。
2. jobject,jclass,jstring 是一種指針,不存在任何操作方法,好比你不能 LPCSTR->strlen(),在jni中,也沒有提供任何 jobject->something() 這種調(diào)用。
3. 對這些對象的操作必須依賴于 env對象的操作方法.
看一下,jni.h中對 這些引用對象的定義
class _jobject {};
class _jclass : public _jobject {};
class _jstring : public _jobject {};
...
typedef _jobject *jobject; //_jobject才是類定義,jobject 是否_jobject的指針
typedef _jclass *jclass;
typedef _jstring *jstring;
...
在這些下劃線對象中,有什么成員變量,成員函數(shù)呢? 答案是你什么也不能得到,比如,你想知道,_jstring對象的字符串長度,你不能 _jstring.length(),得到,而必須env->GetStringLength(jstring) 來得到.
只給你一個對象的指針,不告訴你里面有什么,這樣做的好處是實現(xiàn)與接口分離。
jvalue 這個類型,是一個union ,感覺很想com里的variant對象,不過沒有指明類型的field
typedef union jvalue {
jboolean z;
jbyte b;
jchar c;
jshort s;
jint i;
jlong j;
jfloat f;
jdouble d;
jobject l;
} jvalue;
我現(xiàn)在還不知道,這個數(shù)據(jù)類型,什么時候用.
jfieldID是一個java類成員變量的id,這個id在c++中,實際是一個指向結(jié)構(gòu)的一個指針, jmethodID 是成員方法的id, 不管是成員變量還是方法的id,在java類被加載進虛擬機后,是保持不變的。所以從考慮性能計,可以使用靜態(tài)緩存的方法,先取出來,后面會講到
字符串類型
這里說的字符串類型,是jni中char * 的格式,不是指 jstring/_jstring,jni也使用 char * 字符串指針,
好下所示:
jmethodID GetMethodID (JNIEnv *env, jclass clazz, const char *name, const char *sig);
但需要注意的是,這里的name,必須是UTF-8的編碼,utf-8對于ascii字符,只占一個字節(jié),最多不超過3個字節(jié)
2009年3月4日
#
通過圖片介紹java報表開發(fā)過程中,經(jīng)常遇到的一些報表類型,統(tǒng)計圖,及可視化的設(shè)計等.下面以 杰表.2008 為例介紹之.
一、支持報表類型
主從報表

套打報表

標(biāo)簽報表

分欄報表

計算比去年增長數(shù)

計算比去年同期增長數(shù)

補足空行的表格報表

多表合并.不同的數(shù)據(jù)集,做成一個相連的報表.

公式分組報表.按字段值,進行分類,分級

排行榜(Top N)報表

按匯總值大小排序的分組

多級分組

計算占比

顯示排名

交叉表折頁處理



層次不等的交叉表

行列并行分組的交叉表

多數(shù)據(jù)集的交叉表

靜態(tài)表格中的公式計算

二、javabean數(shù)據(jù)源
使用java數(shù)組
假設(shè)項目組其他成員已經(jīng)編寫了一個Student類,如下圖(a),該類定義四個方法,分別獲取其姓名,年齡,性別,分數(shù)。由腳本構(gòu)造一個包含三個Student對象的數(shù)組,如圖(b),要求你做成下圖(c)所示報表。

嵌套的java對象數(shù)據(jù)源
假設(shè)你有下圖(a)所示的兩個類Student和Person,你可以使用Student的getMembers()方法,取得該學(xué)生的家庭成員列表,每個家庭成員用一個Person對象表示,該對象包含與該學(xué)生的關(guān)系、姓名、性別等信息。

ResultSet數(shù)據(jù)源

指定sql查詢一個報表

三、統(tǒng)計圖與條碼
插入統(tǒng)計圖對象

設(shè)置統(tǒng)計圖背景及立體效果

設(shè)置統(tǒng)計圖輸出格式為Flash

從統(tǒng)計圖鉆取另一個明細報表
你可以在統(tǒng)計圖的某一個數(shù)據(jù)區(qū)放置一個超鏈接,使用戶雙擊該區(qū)時,跳轉(zhuǎn)到另一個子報表或網(wǎng)頁,如,有一個柱形圖,顯示各產(chǎn)品的庫存量,點擊某個產(chǎn)品的柱面,就可以打開該產(chǎn)品相關(guān)的銷售記錄。

餅圖

以時間為橫軸的統(tǒng)計圖

混合類型統(tǒng)計圖

雙軸統(tǒng)計圖

創(chuàng)建甘特圖

特殊統(tǒng)計圖








創(chuàng)建條形碼對象
日常生活中條形碼隨處可見,條形碼用幾何圖形表示數(shù)據(jù),并可以被專門設(shè)備識別。杰表可支持的13種條形碼,分別是codabar、code39、code128、2of5、postnet、ean-128、ean-13、ean-8、upc-a、upc-e、royal-mail-cbc、pdf417、datamatrix,其中最后兩種是二維條形碼。
一維碼
二維碼 
設(shè)置圖片背景

顯示數(shù)據(jù)庫字段上的圖片

三、特殊的報表效果
凍結(jié)窗口效果

點擊表頭排序

使用超鏈接子報表
當(dāng)你瀏覽報表時,可能需要了解更詳細的信息,比如,我們在瀏覽一個訂單列表時,希望了解該訂單中各貨物的銷售數(shù)量。這時,你可以在訂單列表中,加一個超鏈接,使用戶在點擊該鏈接后,可以跳轉(zhuǎn)到顯示該訂單明細的一個報表。
你可以在主表中,點擊訂單ID,即可瀏覽該訂單出售的所有貨物明細,如下圖所示:

熱點提示

復(fù)雜匯總

顏色警告

斑馬條

創(chuàng)建頁小計、頁累計報表

四、可視化設(shè)計器
設(shè)計參數(shù)表單
杰表.2008配備了一個可視化參數(shù)表單設(shè)計器,使用這個設(shè)計器,你可以不離開報表設(shè)計器環(huán)境,輕松制作查詢表單。表單設(shè)計器有豐富的web控件,檢驗,事件偵聽,css樣式機制,你也可以使用javascript腳本擴展表單功能,同時,也實現(xiàn)了常用的多個下拉框聯(lián)動功能。

可視化的報表設(shè)計器

報表預(yù)覽面板

2008年8月8日
#
本文試圖對市面上流行的純java實現(xiàn)的web報表工具,jasperreport 、 stylereport 、杰表、潤乾報表、快逸、finererport為例,分析各報表工具采用的web打印技術(shù)的異同、優(yōu)劣、及對用戶需求的適應(yīng)性,供大家參考。
打印是報表工具的基本功能之一,有些報表工具就是從一個專門的打印程序中發(fā)展而來,如用友華表。因為想當(dāng)然地簡單,所以,在報表工具選型時用戶常常忽略這個問題,特別是有些報表工具廠商,明知自己的打印方案在滿足某些需求時,存在缺陷,但沒有盡明確告知義務(wù),而故意事先做好花里胡哨的有關(guān)打印方面的文檔,欺騙客戶。我曾不至一次地聽說,有些開發(fā)商選用的報表工具,其打印功能不能滿足需求,不得不另外找打印工具的事情,實在是吃盡苦頭。
報表打印在c/s時代,確實非常簡單,vb,vc,Delphi,pb,都有很好用的打印api,有的甚至用報表控件方式,搞定打印更是分分秒的事情,但今天是b/s的天下,報表都是在網(wǎng)頁瀏覽器中顯示,但當(dāng)今的瀏覽器打印功能一般非常弱(誰讓你叫他“瀏覽”器呢?“瀏覽”就是讓你用眼睛看,“打印”屬于兼職),要做到精確分頁打印,幾乎不可能,所以當(dāng)前的報表工具,一般不會讓你使用瀏覽器的打印菜單來打印報表,都有自己的解決方案,這下可好,各報表工具廠商由是乎,八仙過海,各顯神通,各家都說自己的好,對于web打印了解不深的客戶,總有霧里看花的感覺。
歸納來說,當(dāng)今java報表工具采用的打印技術(shù)不外乎三類:Applet打印、導(dǎo)出成pdf/excel打印、控件打印。用戶選用的重點是:盡量選擇插件小的打印軟件,因為文件小意味著安裝迅速,啟動速度快。插件大小除了插件本身的大小外,還需要考慮支持軟件的大小,如有些插件很小,支持軟件卻很大。
Applet打印
本文開始處提及的報表工具,除finereport外都支持Applet打印。之所以多數(shù)廠商支持Applet方式打印,因為Applet是java實現(xiàn),與java后臺、java報表設(shè)計器的兼容性較好,代碼容易維護,實現(xiàn)也方便。然而,廠商省事,用戶就得多事。Applet方式打印,用戶最多的抱怨是需要安裝jre(而當(dāng)前的操作系統(tǒng),一般不是默認安裝的),雖然說,多數(shù)廠商已經(jīng)做到可以自動安裝jre,但對于10幾M(JRE1.4有15M,JRE1.5為16M))的安裝,這意味著用戶需要較長時間的等待。
另一個問題是Applet配置復(fù)雜,使用不穩(wěn)定。1995年,正是因為給人們無窮的視覺和腦力震蕩的Applet ,使人們認識了java,認識了Games Gosling。所以在b/s早期,人們?yōu)榱苏宫F(xiàn)html的富客戶效果,Applet是唯一之選。但現(xiàn)如今,Applet已經(jīng)是昨日黃花,早已被ajax、flex取代,是什么原因?戰(zhàn)略層面的東西,我也不太說得清楚,但作為程序員,經(jīng)過幾番折騰后,也不會愿意再用Applet了。如經(jīng)常莫名其妙地出現(xiàn)“小應(yīng)用程序,… notinited”的錯誤,還得清理ie緩存,對于Applet打印,還需要設(shè)置jre的安全策略等等。不是靠終端用戶能完成的,這就必須額外地增加開發(fā)商的服務(wù)成本。
Applet打印,啟動速度慢。Applet打印原理是,當(dāng)你點擊打印按鈕時,瀏覽器啟動Applet,Applet根據(jù)參數(shù)訪問后臺頁面信息,后臺返回頁面,Applet加載頁面后,調(diào)用jre的打印服務(wù)進行打印。這就意味著,每次打印都需要調(diào)用后臺服務(wù)程序,就必然影響打印的響應(yīng)速度。
Applet打印很安全,言下之意是ActiveX打印不安全,這是采用Applet打印的廠商津津樂道的,實際上,這是一個偽命題。Applet和ActiveX都是瀏覽器的插件,我們當(dāng)然不希望下載插件后,該插件可以為所欲為,比如,刪除你磁盤里的文件,或啟動一個木馬,從這點來說,Applet確實比ActiveX安全,因為Applet是在一個受限的環(huán)境里運行,而ActiveX是不受限的。所以,當(dāng)你訪問一個陌生的網(wǎng)站時,出于安全考慮,你可能會允許下載運行Applet,而阻止ActiveX。但當(dāng)用戶訪問自己的網(wǎng)站系統(tǒng),時,這種擔(dān)心就沒必要,這好比,當(dāng)你與陌生人打交道時,很自然地會問自己,這人可信嘛?但如果你與家里人打交道,這個問題就不成其為問題了。
Applet打印,除了可以設(shè)置打印機,設(shè)置紙張頁面大小等常規(guī)打印功能外,往往也集成與打印不相關(guān)的功能,比如,打印前修改(有人說,是為了做假帳方便,中國特色,國產(chǎn)報表工具一般都具備,jasperreport,stylereport不支持),按行分頁,自由定位,這些本來由設(shè)計器完成的功能,挪到打印功能上來,來掩蓋上面指出的Applet的種種不足。實際上,Applet功能強弱完全取決于Applet的大小,有些報表廠商甚至用Applet或web start 的方式,提供所謂的基于web的報表設(shè)計,前提是下載 40多M的jar包,實際上,這種方案遠非一般意義上的純web 的報表設(shè)計,完全是混淆概念。作為用戶最希望常規(guī)的,他們熟悉的打印功能,不需要不相關(guān)的,理解困難的打印功能。
PDF/EXCEL打印
Pdf打印方式,就是用戶點擊打印后,瀏覽器會自動彈出adobe reader,再利用adobe的打印按鈕進行打印,由于國外adobe reader安裝非常普及,國外的java報表工具多提供這種打印方案,比如 stylereport,jasperreport,國內(nèi)報表工具finereport也采用這種方式(讓人不解),pdf方式打印的好處是能做到精確打印,而且報表預(yù)覽與打印一氣呵成。但不足是需要在客戶的機子里,事先安裝有adobe reader,作為程序員,一般不太會有問題,因為程序員可能經(jīng)常要瀏覽一些pdf文檔,多數(shù)已經(jīng)裝了adobe reader,但國內(nèi)的終端用戶,大多不知pdf是何物,更談不上安裝。
Pdf打印的另一個問題是必須彈出adobe reader,不能做到無預(yù)覽打印,這可能由于pdf缺少相應(yīng)api的緣故吧。
輕量級的ActiveX打印
這里之所以強調(diào)“輕量級”,目的是與傳統(tǒng)意義上的ActiveX報表相區(qū)別。ActiveX技術(shù)可以說是報表工具家族里的沒落貴族,c/s時代,報表工具一般都被做成控件形式,水晶報表就是如此,在b/s時代,報表工具里仍然能看到ActiveX的身影,但風(fēng)光大不如從前,如數(shù)巨,明宇,用友華表,inforeport。用ActiveX實現(xiàn)報表的不足,在網(wǎng)上你能輕易找到,在此不再詳述。ActiveX 報表雖深受詬責(zé),但從打印功能來說,卻都是近乎完美,處理得卻非常好,非常穩(wěn)定。
既然,ActiveX打印是長處,能不能揚長避短地使用ActiveX技術(shù)?有人提出這樣的問題。于是,有些廠商,比如杰表,采用了瀏覽時用html,打印時用插件的方式。這種方案的需要解決的問題是,ActiveX打印控件,不能太大,否則報表工具成了ActiveX報表了。
與Applet相比,輕量級ActiveX打印具有以下優(yōu)勢:
1. 下載時間短,(大小是Applet的1/250);
2. 本地打印,打印時,不需要訪問后臺服務(wù)程序,不占用服務(wù)器資源;
3. 啟動速度快,由于控件小,且本地打印,所以打印速度是優(yōu)于以上兩中打印方案,打印速度與你點擊瀏覽器打印菜單相差無幾。
采用輕量級的ActiveX打印的不足是,只有ie 5.5 及以上版本支持,其他版本的瀏覽器不支持。好在ie5.5瀏覽器已非常普及,在用戶那里應(yīng)該不是大問題。
杰表采用的打印方案,用一個jatoolsPrinter的控件,大小是60k,是經(jīng)過數(shù)字簽名的。這個打印控件采用ie特有的打印技術(shù)(templateprinter)實現(xiàn)打印功能,支持打印,預(yù)覽,邊距設(shè)置,重復(fù)打印,批量打印功能。
目前,jatoolsPrinter已經(jīng)從杰表中獨立出來,任何報表工具或第三方軟件都利用該控件,實現(xiàn)web打印,推出至今,免費加收費用戶上萬。
下表總結(jié)三種方式的采用者及優(yōu)劣對比,對于ie5.5客戶來說,我們推薦使用ActiveX打印方案.

報表廠商列表
jasperreport
Stylereport
杰表
潤乾
快逸
finererport
2008年7月29日
#
當(dāng)我們使用報表工具,設(shè)計完一張報表時,我們同時必須為該報表設(shè)計一個查詢條件表單,使得用戶在瀏覽報表時,可以在網(wǎng)頁中選取查詢條件。在過去,設(shè)計表單是件令人沮喪的事情,這不僅要求你在報表設(shè)計器與開發(fā)環(huán)境之間來回切換,而且在設(shè)計表單時,還需要考慮系統(tǒng)的其他布局元素的關(guān)系,苦燥,繁瑣,沒有挑戰(zhàn)性。更進一步,如果項目要求最終用戶能夠自己設(shè)計報表,天吶,他們可能喜歡用報表設(shè)計工具來設(shè)計報表,但絕對不愿意用網(wǎng)頁設(shè)計工具來設(shè)計表單。
當(dāng)然,也有一些報表工具,實現(xiàn)了參數(shù)表單的自動化,比如,按一定規(guī)則順序排列參數(shù)項,但這種自動化,用戶很難按其需求進行排版布局,所以不能徹底解決用戶的問題。
現(xiàn)在,杰表.2008配備了一個可視化參數(shù)表單設(shè)計器,使用這個設(shè)計器,你可以不離開報表設(shè)計器環(huán)境,輕松制作查詢表單。表單設(shè)計器有豐富的web控件,檢驗,事件偵聽,css樣式機制,你也可以使用javascript腳本擴展表單功能,同時,也實現(xiàn)了常用的多個下拉框聯(lián)動功能。
杰表.2008表單設(shè)計器不僅是表單設(shè)計工具的替代品,更重要的是表單設(shè)計器解決了報表設(shè)計容易,部署難的問題。我們希望,利用集成的表單設(shè)計器,你只要在設(shè)計器中設(shè)計好參數(shù)表單,并將報表模板文件和表單模板文件置于某個位置,你的用戶就可以在瀏覽器中,按條件瀏覽這張報表了,這中間不需要你再做任何其他事情。
有關(guān)表單設(shè)計的更多內(nèi)容,點擊這里

2008年6月10日
#
作為java程序員,大家可能都聽說過,或用過birt, 據(jù)說,現(xiàn)在birt的東家actual,正式入駐中國市場,聯(lián)想到前些天杰表.2008的推出,今年,注定是國內(nèi)的報表軟件市場不平靜的一年。
birt的最大好處是開源,不足是水土不服,做起復(fù)雜報表來不方便,復(fù)雜報表主要說的是行上,列上有多個并列分組的交叉報表,國產(chǎn)報表工具大都關(guān)注復(fù)雜報表需求,而洋品牌的報表軟件工具,如jasperreport,crystalreport,這方面關(guān)注不夠,所以做起復(fù)雜報表來很吃力。
做什么事情必須先有觀念,然后,付諸實現(xiàn),做軟件則更進一步,必須將這些觀念結(jié)構(gòu)化,即模型化。對復(fù)雜報表需求的處理,國內(nèi)報表軟件廠商時下,用得最多的是類excel報表模型,即以單元格為中心報表模型,最早產(chǎn)品化的,是用友華表,當(dāng)然它不屬于java陣營的,java陣營的現(xiàn)在有潤乾,finereport,杰表4.0,類excel報表模型大家都覺得,功能很強,但最大問題是,學(xué)習(xí)起來不方便,不知道你在大學(xué)里,微積分考多少,如果你90分以下,那你最好別碰那東西。
杰表.2008采用的復(fù)雜報表模型,相對來說,比excel模型容易得多,比如下圖是一個典型的復(fù)雜報表,該報表用于按不同分類方法
統(tǒng)計培訓(xùn)學(xué)員人數(shù),該表列上存在多個分組(培訓(xùn)類型、累計培訓(xùn)時間、參加培訓(xùn)總?cè)藬?shù)、培訓(xùn)內(nèi)容、渠道類型),分組之間不存在嵌套關(guān)系的,即分組是并列的。行上存在一個按學(xué)員
行政級別為依據(jù)的分組。
復(fù)雜報表的復(fù)雜性在于結(jié)構(gòu)復(fù)雜,比如上圖報表列上存在多個并列分組,不僅如此,行上也可能存在多個并行分組;不僅有多個并列分組,也可能各并列分組的嵌套數(shù)不一樣;不僅各個分組來源于同一個
數(shù)據(jù)集,也可能來自多個不同的數(shù)據(jù)集。
盡管如此,我們?nèi)匀豢梢园褟?fù)雜的交叉報表,看作下圖所示的結(jié)構(gòu),表格包括A,B,C,D四部分,其中B,C是兩個表格,決定了交叉表的結(jié)構(gòu)。B表格非常特殊,第一,該表格向右生長的,而一般我們常見向下生長,如C 表格。第二,該表格有多個并列分組,而一般報表工具中,表格對象最外圍只能有一個分組,盡管其嵌套數(shù)是可以多重的。
杰表.2008以上述結(jié)構(gòu)分析為基礎(chǔ),引入了超級表格對象,該對象就是通過嵌入兩個擴展方向不同的子表格,行頭表和列頭表,來完成交叉報表的結(jié)構(gòu)性問題。兩表均可以有任意多的并列分組,每個分組可以有
層次不同的嵌套。下圖(a)是
設(shè)計面板中的超級表格對象,下圖(b)是該對象子部件的層次關(guān)系,其中對象3就是行頭表,對象4就是列頭表。
杰表的超級表格對象結(jié)合杰表的DOM報表數(shù)據(jù)模型,可以演化出任意復(fù)雜的多源,多組交叉表,下面試舉幾例說明之。(點擊進入查看)
列上并行分組交叉表
層次不等的交叉表
行列并行分組的交叉表
多數(shù)據(jù)集的交叉表
計算比去年增長數(shù)
計算比去年同期增長數(shù)
計算占比
顯示排名
按照匯總值排序的交叉報表
交叉表折頁處理
交叉表居中
2008年5月29日
#
一般java報表工具,允許用戶使用java類來作動態(tài)數(shù)據(jù)來源,但這個類必須符合工具要求的接口,如JasperReport的JRDataSource接口,杰表的BeanDataset接口。這種方式確實為用戶提供了一種在報表工具中使用java對象的途徑,但同時,因為需要實現(xiàn)特定接口,額外地增加了編碼工作。
有沒有一種不需要實現(xiàn)接口直接使用java對象的辦法呢?杰表.2008提供了這樣的方法。
假設(shè)你有下圖(a)所示的兩個類Student和Person,你可以使用Student的getMembers()方法,取得該學(xué)生的家庭成員列表,每個家庭成員用一個Person對象表示,該對象包含與該學(xué)生的關(guān)系,姓名,性別等信息。注意,這兩個類沒有實現(xiàn)任何額外的接口。

如果你有一個Student對象,那么,在杰表.2008中,你就可以做成如上圖(b)所示報表,上半部分列出該學(xué)生的本人信息,下面顯示該學(xué)生的家庭成員表。更多內(nèi)容請參照:
使用java對象作數(shù)據(jù)源
使用java數(shù)組
java數(shù)組節(jié)點訪問
List,iterator數(shù)據(jù)源
嵌套的java對象數(shù)據(jù)源
ResultSet數(shù)據(jù)源
TableModel數(shù)據(jù)源
2008年5月20日
#
近年來,純java的類excel報表工具異軍突起,在國內(nèi)報表工具市場中取得了初步成功。目前市場上主流的純java類excel的報表工具有潤乾、杰表4.0、finereport等。
類excel報表工具之所以受國人追捧,一方面是契合了國內(nèi)用戶喜歡用格子做報表的習(xí)慣,另一方面,由于擴展的類excel報表模型的推出,比如潤乾的非線性多源分片模型,杰表4.0的超級cell模型,滿足了用戶編制復(fù)雜報表的需求。
然而,通過這幾年的應(yīng)用,類excel報表工具的問題也大量暴露出來,主要集中在易用性和性能兩方面,根本原因在于類excel報表工具模型本身的不合理。用類excel報表模型去解決復(fù)雜報表需求,就像用十字鑼絲刀去開啟一字鑼絲一樣,雖然勉強能用,但終歸不是問題的正解。
現(xiàn)在,因為復(fù)雜報表需求概念被炒得火熱,幾乎每一個報表工具廠商都聲稱自己能做中國式的復(fù)雜報表,但你若追問一句,你們的報表工具好使嘛?需要多長時間能掌握?我估計百分之百啞口。
選用報表工具的目的是為了提高開發(fā)報表模塊的效率,如果報表工具學(xué)習(xí)起來困難,不易掌握,那么,雖然報表工具給你帶來了設(shè)計報表的便利,但也同時給你制造了不必要的學(xué)習(xí)障礙。在it企業(yè)人才流動頻繁的背景下,降低報表工具的學(xué)習(xí)難度,就等于降低項目的人工成本和風(fēng)險,所以報表工具易用性是考量報表工具的一個重要指標(biāo)。往極端了說,如果一個報表工具,需要有一個愛因斯坦的大腦才能使用,這樣的報表工具不用也罷。
用戶是上帝,當(dāng)用戶有很多報表工具產(chǎn)品可供選擇之時,用戶對我們報表廠商提出了更高的要求,他們不會再滿足于問你能不能做,還會問你上手夠不夠快。面對如此新的市場要求,有些報表工具廠商沒有引起足夠重視,仍然延續(xù)著營銷亢奮,研發(fā)萎靡的做法,一個概念賣到低,不能不令人憂慮。杰表團隊堅信,一個好的產(chǎn)品只有持續(xù)地傾聽市場的聲音,并體現(xiàn)在我們提供的產(chǎn)品與服務(wù)上,才能取得持續(xù)的成功。
2003年,融合類excel模型的杰表推出市場,到2006年春,決定全面重寫杰表框架,停止一切主動的市場營銷活動。為什么要重寫框架呢?我們需要找到一種更易使用的報表模型。因為經(jīng)過多年的市場檢驗,我們意識到類excel報表報表模型,不管是杰表4.0的超級cell模型還是潤乾的多源分片模型,都不能很好解決復(fù)雜報表問題。
類excel模型不易學(xué)習(xí)的根本原因是,沒有一個可視化的數(shù)據(jù)模型。所以你需要在非線性、多源分片、軸這些豪華概念的面前,費盡腦力。另外,采用單元格即數(shù)據(jù)的做法,完全違反了MVC的軟件哲學(xué),使之報表工具的靈活性大受限制。總之,非線性多源分片技術(shù)確實很數(shù)學(xué),但很不哲學(xué)。
2008年5月,經(jīng)過持續(xù)兩年的潛心研發(fā),杰表.2008正式面市。杰表.2008采用可視化的dom驅(qū)動報表模型,采用MVC架構(gòu),從根本上解決復(fù)雜報表工具學(xué)習(xí)難的問題。下圖是杰表.2008設(shè)計器中展現(xiàn)的可視化報表模型。更多內(nèi)容參見 www.jatools.com