<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 310, comments - 6939, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    怎樣用iReport制作Web報表 轉

    Posted on 2007-12-02 22:02 詩特林 閱讀(2964) 評論(1)  編輯  收藏 所屬分類: BI

    怎樣用iReport制作Web報表 轉

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

    安裝時需要預先安裝java jre,可打開DOS窗口輸入java-version看使用的是哪個版本的jre。實用中,安裝Oracle10g客戶端自帶的Java 1.4.2最適合當前的iReport版本,使用Jbuilder2006自帶的Java 1.5.0在打開某些交叉報表時可能出現死機現象,建議在Windows系統上安裝Java1.4,它支持最新iReport。

    iReport開發文檔是收費的,雖然網上可找到較多例子供參考,還有完整的簡單報表開發指南,稍加研究即可開發簡單報表。但如果要開發中小企業級各類Web報表,就需要深入研究,反復測試了。

    在報表中顯示中文

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

    在報表中插入圖形

    適當的插圖在報表中起到畫龍點睛作用,可以使枯燥冗長的數據趨勢、比例等一目了然。iReport內置基于jfreechart的Chart Tool工具可以方便繪制常用的柱狀圖、餅圖、曲線圖等,可滿足一般報表的需求。

    如果需要插入靜態圖片,則要用image工具,要在圖片的“Image Expression”中寫圖片文件的絕對路徑。為了便于在PC上調試并可用于服務器,文件路徑應寫成“$P{imagePath}+文件名”的形式,參數$P{imagePath}在PC上設為PC機上的DOS路徑,注意因為“\”是轉義符號,DOS路徑的“\”要寫成“\\”。在Web輸出圖片時將服務器上的文件路徑作為參數$P{imagePath}傳遞給輸出程序,就可輸出正確圖片。在以下設定子報表絕對路徑等場合,為了增加靈活性,都需要這樣做。

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

    對數據源的支持

    iReport報表引擎需要從數據源獲取報表中的數據。而最基本的查詢數據源的方法就是SQL查詢語句,一個報表只支持一個查詢結果集,設計一個報表的核心內容就是設計SQL語句。如果一個報表在不同條件使用完全不同的數據庫表查詢語句,一般在報表程序中形成SQL語句,并查詢得到結果集,再將所得結果集傳遞給報表引擎形成報表。這樣雖然很靈活,但使報表程序冗長復雜,不便維護。最好是將SQL寫在報表數據源內,運行時將數據庫連接和其他必要參數傳遞給報表引擎,由報表引擎執行SQL語句并生成報表。

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

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

    對于涉及多個表查詢的情況,需要使用聯合查詢語句join和union,join用語橫向聯結多個表,而union用于縱向合并相同結構表的結果集。可以使用子查詢技術,即將一個查詢語句當做臨時表再進行查詢,或與其他表聯合查詢。

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


    評論

    # re: 怎樣用iReport制作Web報表 轉[未登錄]  回復  更多評論   

    2008-09-13 12:34 by hehe
    請問如果sql語句涉及到多表查詢,在ireport中應該怎么處理呢?
    主站蜘蛛池模板: 免费观看无遮挡www的小视频| 国产在线观看免费不卡| 亚洲国产亚洲片在线观看播放 | 国产成人亚洲综合在线| 免费一级毛片不卡不收费| 中文字幕在线免费看线人| 亚洲综合小说久久另类区 | 亚洲午夜国产精品| 日韩一区二区在线免费观看| 一级毛片大全免费播放下载| 亚洲欧洲日韩国产综合在线二区| 青青草97国产精品免费观看| 国产乱色精品成人免费视频| 免费播放在线日本感人片| 亚洲日韩小电影在线观看| 国产黄色免费网站| 亚洲人成电影院在线观看| 亚洲AV中文无码乱人伦在线视色| 免费av片在线观看网站| 亚洲色大情网站www| 日本xxwwxxww在线视频免费| 免费无码作爱视频| 亚洲大码熟女在线观看| 91久久亚洲国产成人精品性色| 国产一级高清免费观看| **毛片免费观看久久精品| 亚洲国产美女精品久久| 久久亚洲中文字幕精品一区四| 最近免费字幕中文大全| 亚洲熟妇AV一区二区三区浪潮| 国产av天堂亚洲国产av天堂| 成人免费视频国产| 黄色成人免费网站| a级毛片免费全部播放| 精品女同一区二区三区免费播放| 亚洲美女视频免费| 亚洲宅男天堂在线观看无病毒| 日本免费中文字幕在线看| 亚洲国产精品免费在线观看| 在线观看免费黄色网址| 国产成人 亚洲欧洲|