liqiangit

          Java

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            0 隨筆 :: 1 文章 :: 0 評(píng)論 :: 0 Trackbacks

          用iReport開(kāi)發(fā)Web報(bào)表功能強(qiáng)大,容易上手使用。由于iReport支持JasperReport,它是純Java程序,所以用于Web的最佳引擎是JSP,首選Tomcat。報(bào)表開(kāi)發(fā)平臺(tái)使用Windows平臺(tái)即可。iReport早期在Windows系統(tǒng)上安裝只要直接解壓即可,而目前最新的版本是1.3.1,可在其官方網(wǎng)站下載http://ireport.sf.net/,支持安裝程序。

          安裝時(shí)需要預(yù)先安裝java jre,可打開(kāi)DOS窗口輸入java-version看使用的是哪個(gè)版本的jre。實(shí)用中,安裝Oracle10g客戶(hù)端自帶的Java 1.4.2最適合當(dāng)前的iReport版本,使用Jbuilder2006自帶的Java 1.5.0在打開(kāi)某些交叉報(bào)表時(shí)可能出現(xiàn)死機(jī)現(xiàn)象,建議在Windows系統(tǒng)上安裝Java1.4,它支持最新iReport。

          iReport開(kāi)發(fā)文檔是收費(fèi)的,雖然網(wǎng)上可找到較多例子供參考,還有完整的簡(jiǎn)單報(bào)表開(kāi)發(fā)指南,稍加研究即可開(kāi)發(fā)簡(jiǎn)單報(bào)表。但如果要開(kāi)發(fā)中小企業(yè)級(jí)各類(lèi)Web報(bào)表,就需要深入研究,反復(fù)測(cè)試了。

          在報(bào)表中顯示中文

          iReport內(nèi)部使用Unicode UTF-8編碼,設(shè)置正確就可支持所有中文報(bào)表需求。界面選項(xiàng)支持簡(jiǎn)體中文。為了在報(bào)表中顯示中文,在報(bào)表字體或較新版本的Style,選擇宋體字體。為了正確顯示中文,必須安裝亞洲語(yǔ)言包,可以從網(wǎng)上下載iTextAsian.jar考入開(kāi)發(fā)機(jī)iReport安裝目錄/lib之下和服務(wù)器端WEB-INF/lib目錄下。還必須將服務(wù)器端的Java漢化,Java1.4比較麻煩,除拷貝宋體字庫(kù)外,還要修改幾個(gè)屬性文件。Java1.5漢化非常簡(jiǎn)單,只要在jre/lib/fonts下建立fallback目錄,將宋體字庫(kù)考入該目錄即可。為了以PDF格式輸出中文,需要在“PDF Font Name”選項(xiàng)中選擇“STSong-Light”,在中文字體定義中勾選“Default”、“PDF Embedded”,“PDF Encoding”選擇“UniGB-UCS2-H (Chinese Simplified)”。

          在報(bào)表中插入圖形

          適當(dāng)?shù)牟鍒D在報(bào)表中起到畫(huà)龍點(diǎn)睛作用,可以使枯燥冗長(zhǎng)的數(shù)據(jù)趨勢(shì)、比例等一目了然。iReport內(nèi)置基于jfreechart的Chart Tool工具可以方便繪制常用的柱狀圖、餅圖、曲線圖等,可滿足一般報(bào)表的需求。

          如果需要插入靜態(tài)圖片,則要用image工具,要在圖片的“Image Expression”中寫(xiě)圖片文件的絕對(duì)路徑。為了便于在PC上調(diào)試并可用于服務(wù)器,文件路徑應(yīng)寫(xiě)成“$P{imagePath}+文件名”的形式,參數(shù)$P{imagePath}在PC上設(shè)為PC機(jī)上的DOS路徑,注意因?yàn)?#8220;\”是轉(zhuǎn)義符號(hào),DOS路徑的“\”要寫(xiě)成“\\”。在Web輸出圖片時(shí)將服務(wù)器上的文件路徑作為參數(shù)$P{imagePath}傳遞給輸出程序,就可輸出正確圖片。在以下設(shè)定子報(bào)表絕對(duì)路徑等場(chǎng)合,為了增加靈活性,都需要這樣做。

          iReport內(nèi)置的Chart工具并沒(méi)有支持jfreechart的全部功能,繪圖存在局限性,例如,1.2.7之后的版本才實(shí)現(xiàn)標(biāo)記label的旋轉(zhuǎn),旋轉(zhuǎn)90度可使標(biāo)記字符垂直顯示,以免水平項(xiàng)目過(guò)多時(shí)標(biāo)記顯示重疊在一起而顯示不出來(lái)。又如圖片中的category各個(gè)項(xiàng)目只能是查詢(xún)結(jié)果集各個(gè)記錄垂直方向的項(xiàng)目,如果要顯示同一記錄中水平方向各個(gè)項(xiàng)目就無(wú)法繪圖。另外,至今最新版本餅圖還不能顯示百分比。為了顯示更為靈活的圖片,應(yīng)該使用第三方繪圖工具。自行開(kāi)發(fā)jfteechart繪圖程序可解決這些問(wèn)題。jfreeChart也是純Java工具,一般設(shè)計(jì)Servlet用于繪圖,使用image工具,在“Image Expression”中用URL表示對(duì)繪圖程序Servlet的調(diào)用,new java.net.URL(URL?參數(shù)),其中URL繪圖Servlet的調(diào)用路徑,問(wèn)號(hào)后用于傳遞各種繪圖參數(shù)。其中為了正確傳遞中文參數(shù),中文字符串應(yīng)該使用標(biāo)準(zhǔn)的URL編碼,即定義一個(gè)變量值為java.net.URLEncoder.encode("中文字符串","GB2312"),在image的URL中使用變量名傳遞中文。

          對(duì)數(shù)據(jù)源的支持

          iReport報(bào)表引擎需要從數(shù)據(jù)源獲取報(bào)表中的數(shù)據(jù)。而最基本的查詢(xún)數(shù)據(jù)源的方法就是SQL查詢(xún)語(yǔ)句,一個(gè)報(bào)表只支持一個(gè)查詢(xún)結(jié)果集,設(shè)計(jì)一個(gè)報(bào)表的核心內(nèi)容就是設(shè)計(jì)SQL語(yǔ)句。如果一個(gè)報(bào)表在不同條件使用完全不同的數(shù)據(jù)庫(kù)表查詢(xún)語(yǔ)句,一般在報(bào)表程序中形成SQL語(yǔ)句,并查詢(xún)得到結(jié)果集,再將所得結(jié)果集傳遞給報(bào)表引擎形成報(bào)表。這樣雖然很靈活,但使報(bào)表程序冗長(zhǎng)復(fù)雜,不便維護(hù)。最好是將SQL寫(xiě)在報(bào)表數(shù)據(jù)源內(nèi),運(yùn)行時(shí)將數(shù)據(jù)庫(kù)連接和其他必要參數(shù)傳遞給報(bào)表引擎,由報(bào)表引擎執(zhí)行SQL語(yǔ)句并生成報(bào)表。

          由于報(bào)表只支持單一結(jié)果集,對(duì)較為復(fù)雜的報(bào)表,SQL語(yǔ)句的設(shè)計(jì)就需要較高技巧。簡(jiǎn)單的參數(shù)如數(shù)字可直接傳遞,在報(bào)表的SQL語(yǔ)句中用參數(shù)表示,如查詢(xún)條件where x=$P{y},實(shí)際使用時(shí)程序中直接將參數(shù)值如“10”傳遞給報(bào)表引擎,執(zhí)行時(shí)就可以當(dāng)做where x=10執(zhí)行。較為復(fù)雜的參數(shù)可用$P!{param},可用于替代SQL語(yǔ)句的任何部分,如在不同條件下使用不同的字段排序,可在報(bào)表SQL中寫(xiě)order by $P!{y},實(shí)際使用報(bào)表時(shí)可將實(shí)際的值如“a,b”或“b desc”傳遞給報(bào)表引擎,實(shí)際執(zhí)行時(shí)就當(dāng)做“order by a,b”或“order by b desc”排序子句執(zhí)行,參數(shù)使用是SQL語(yǔ)句靈活支持多種需要的最重要手段。

          絕大部分參數(shù)是字符串格式,偶然需要日期格式的參數(shù),iReport中設(shè)缺省值比較復(fù)雜,如“2007年2月28日”要寫(xiě)成“(new SimpleDateFormat("yyyy-MM-dd")).parse("2003-01-01")”,要使用Java函數(shù)形式,實(shí)際上iReport中所有設(shè)定表達(dá)式都要顯式使用Java函數(shù)。

          對(duì)于涉及多個(gè)表查詢(xún)的情況,需要使用聯(lián)合查詢(xún)語(yǔ)句join和union,join用語(yǔ)橫向聯(lián)結(jié)多個(gè)表,而union用于縱向合并相同結(jié)構(gòu)表的結(jié)果集。可以使用子查詢(xún)技術(shù),即將一個(gè)查詢(xún)語(yǔ)句當(dāng)做臨時(shí)表再進(jìn)行查詢(xún),或與其他表聯(lián)合查詢(xún)。

          通過(guò)以上各種技術(shù),在各種條件下,最終形成一個(gè)單一數(shù)據(jù)結(jié)果集,形成報(bào)表。對(duì)于報(bào)表各個(gè)記錄來(lái)自完全不同來(lái)源的情況,可考慮使用非SQL基本數(shù)據(jù)源,如可用“JavaBean Data Source”。定義一個(gè)基本類(lèi),聲明各個(gè)字段類(lèi)型及getXXX()、setXXX()方法。測(cè)試報(bào)表時(shí),建一個(gè)數(shù)據(jù)類(lèi),用JRBeanCollectionDataSource(list)封裝,其中用list加入測(cè)試數(shù)據(jù)。將class打包考入iReport/lib目錄下,在iReport新建數(shù)據(jù)源,類(lèi)型為JRDataSourceProvider,類(lèi)名為剛才定義的類(lèi),就可用該類(lèi)提供測(cè)試數(shù)據(jù)測(cè)試報(bào)表。打包時(shí)注意兩點(diǎn),編譯和打包使用的jar的Java版本要與安裝iReport時(shí)Java版本一致,特別在電腦上裝有多個(gè)版本的Java時(shí)。實(shí)際使用報(bào)表時(shí),也是使用list先動(dòng)態(tài)填充數(shù)據(jù),fill報(bào)表時(shí)傳遞數(shù)據(jù)源為new JRBeanCollectionDataSource(list)即可生成動(dòng)態(tài)報(bào)表。


           

           

          posted on 2012-08-23 22:24 虎在天涯 閱讀(565) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Ireport

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 健康| 邻水| 黄山市| 西林县| 兴宁市| 阳高县| 武鸣县| 英超| 南安市| 云浮市| 太保市| 乌拉特前旗| 浮山县| 东山县| 沂源县| 灵宝市| 昭平县| 南澳县| 神木县| 萨迦县| 合阳县| 曲阳县| 达尔| 河源市| 上高县| 沅江市| 新绛县| 三穗县| 江山市| 棋牌| 兰考县| 维西| 商河县| 广平县| 遂平县| 巧家县| 三都| 泗洪县| 秭归县| 民勤县| 安国市|