隨筆 - 251  文章 - 504  trackbacks - 0
          <2006年6月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          本博客系個人收集材料及學習記錄之用,各類“大俠”勿擾!

          留言簿(14)

          隨筆分類

          收藏夾

          My Favorite Web Sites

          名Bloger

          非著名Bloger

          搜索

          •  

          積分與排名

          • 積分 - 202819
          • 排名 - 284

          最新評論

          在網絡上可以搜索到很多使用 iReport Jasperreport 配合實現各種報表任務的文章,但是我覺得很少有一篇(幾乎沒有)做一個比較詳細的介紹如何使用 iReport 制作報表的全過程,我所看過的文章的基本思想是覆蓋面廣,很多內容都是提及即過,并不是開發人員都有時間為每個實踐花費時間自己實現,如果能有更詳細的資料,那豈不是一件樂事。出于這個念頭促使我寫這篇文章,希望能對那些使用 iReport Jasperreport 朋友有所幫助,特別是需要親身去實現報表的朋友,希望能給你們帶來一點幫助。本文不是對 iReport 的每個細節進行介紹,關于 iReport 的每個細節可以參考 iReport 網站的資料,但是可能得花費一些費用。一般用戶沒有必要付出這些費用,因為我們關心的是如何制作我們需要的報表,而不是去擴展 iReport ,比如制作 iReport 的插件。

          2 、準備

          2.1 、下載 JDK

          地址: http://www.sun.com ,選擇 1.3 以上版本(建議 1.4.2 以上版本),安裝 JDK ,默認安裝即可;如果你的系統已經有安裝過 JDK 或是有 JRE 即可省略這一步驟,驗證 JDK 或是 JRE 是否可以默認運行,在命令行( CMD )打入 X:>java 如果出現: Usage java……………………….. 開頭的一堆信息既是通過驗證。否則必須進行配置,配置信息如下,在 windows 的環境變量設置:

          path :在最后面加入“ ;java 的安裝目錄”

          JAVA_HOME :“ java 的安裝目錄”

          CLASSPATH :“ java 的安裝目錄 \bin
          重新驗證 JDK 或是 JRE 是否可以在CMD任何位置運行

          2.2 、下載 iReport

          地址: http://ireport.sourceforge.net/ ,選擇 0.3.2 版本(發稿之前為止建議使用的版本)解壓 iReport 在任意目錄,解壓后的文件里面有一個 iReport.bat ,通過雙擊,過大約 30 秒鐘如果可以彈出 iReport 的主窗體即表明你的系統已經可以運行 iReport 了,如果不能彈出主窗體,一般是第一步驟錯誤,或是沒有完成。

          2.3 、準備數據庫

          iReport 支持絕大部分數據庫,只要該數據庫能提供 JDBC 驅動器。本文提供 MySql 數據庫作為例子,但是文章最后會提到如何配置 Oracle 的支持。關于數據庫的安裝和建立表不屬于本文的范圍,請參考其他資料。本文假設已經安裝了 MySql 和在 MySql 已經有一些表,并且確定表中已經有數據了。

          * 【特別提示】 MySql 的版本要求與 iReport 文件夾下的 Lib 目錄的使用 MySql 驅動程序兼容,筆者建議到 http://www.mysql.org/ 下載最新版本 mysql 的驅動器,這樣就不會應為 JDBC 驅動器的問題而當心數據庫的支持問題。

          2.4 、啟動 MySql 服務

          確定 Mysql 使用的的字符集是重要的問題,特別是對需要中文報表的朋友,應該特別注意這個問題。

          2.5 、確定商務邏輯

          ?????? 也就是希望完成什么樣的報表任務。需要實現的報表的詳細描述,這是實現報表的業務條件,否則所有的任務絕大部分沒有意義。本文使用一個 Bug 記錄表為例,本文的例子是制作一個根據項目和項目中的模塊分組的 Bug 量統計。

          3 、開始配置基本信息

          3.1 、配置界面使用的語言和報表輸出路徑

          ?????? 第一次進入系統是英文環境,可以通過【 Tools 】-【 Options 】開啟配置iReport系統的基本信息對話框。在“ Language ”選項里面選擇你需要的界面語言,比如“中文-中國”。點擊【 Apply 】按鈕,系統既把整個界面中文化。

          ?????? 在配置iReport系統的基本信息對話框中選擇【編譯】 Label ,之后決定你的報表輸出路徑,可以把“編譯在報表數據文件夾”選擇打勾,這樣報表的 jrxml 文件和 jasper 文件就放置同一文件夾。(在新建報表時會要求你把 jrxml 文件保存到指定的文件夾)

          Options 】選項中的一部分參數修改不能通過【 Apply 】按鈕直接起作用,比如“ Look&Feel ”,必須重新啟動 iReport 才能起作用。不知道是不是iReport的 Bug ?!最后【存檔】。

          3.2 、配置 MySql 的數據庫連接

          ?????? 這就是報表與數據庫的接口。可以通過【資料來源】-【連接 / 資料來源】開啟配置列表對話框, iReport 會記錄以前使用的所有連接,除非你手工刪除這些連接,否則所有的連接都會存在連接 / 資料來源配置列表對話框中,不管是否確實可用。

          ?????? 點擊【 New 】進入配置新連接界面,如圖:


          填寫JDBC連接需要的信息,iReport支持多種數據源連接,如圖:

          3.3 、新建一個空報表的基本配置

          單擊工具欄的第一個工具“ New Report ”,新建一個報表,輸入報表名稱和定義報表的一些參數,比如名稱輸入 BugsRpt (例子是做一個項目的 Bug 量統計報表) , 單擊【 More…. 】選擇標簽,填寫或是選擇 XML 編碼,這是關系到你的 XML 支持的字符集的選擇,請根據需要選擇,比如需要你的 XML 文件支持中文,那么可以輸入 GB2312 或是 GBK ,之后點擊【 OK 】按鈕,進入報表的設計界面。

          * 【特別提示】請在開始任何工作之前保存報表,這時 iReport 提示保存報表的位置,選擇合適的位置之后輸入 BugsRpt 作為名稱。

          3.4 、定義報表可能需要的字體類型及其屬性

          ?????? 一個報表的內容五花八門,有表頭、欄位名、數據、其他變量信息等等,如果這些信息都是一致的字體和屬性(比如顏色),那么整個報表就死氣沉沉,顯得很粗糙了。我們可以在為報表添加每個元素時定義元素的屬性,但是那是一個多么費時的工作,如果能預先定義一些屬性的組合,之后在創建每個元素時只需選擇這些組合的其中一個即可,省事又快速。

          ?????? 單擊【預覽】-【報表字體】開啟自定義組合對話框。單擊【 New 進入定義詳細對話框,如圖:按照圖中的順序填寫信息和步驟,依次定義“表頭”、“組”、“列”、“列內容”、“統計計算”、“其他”等6中字體組合。注意PDF內嵌字體的選擇,如果你需要報表時以PDF文件格式提供,那么對此需要作出選擇。


          4 、理解幾個重要的概念

          4.1 iReport 的輸出格式

          iReport 的預覽輸出格式可以支持以下幾種:

          PDF HTML CSV JAVA2D Excel 、純文字、 JRViewer ,其中最常用的是 PDF JRViewer 。本文以 JRViewer 為例子。 JRViewer 是直接以 C/S 方式作為報表的輸出格式,在 JFrame 框架下輸出。 Jasperreport 提供默認的 JRViewer 輸出類。

          4.2 、報表的動態對象變量、參數、字段

          在使用 iReport 的過程中會碰到很多與變量( Variables )、參數( Parameters )、字段( Fields )這些有關的內容,我們要介紹這些對象的使用和意義:

          ·字段( Fields ):是數據庫抽取出來的,希望在報表中出現的數據庫內容。比如一個 ID 的所有值。 $F{ filedsName }

          ·參數( Parameters ):這是你的應用需要提供給報表的入口,比如你希望在報表被解釋的時候提供 Where 語句的條件值,那么就可以使用參數( Parameters )。 $P{ parameterName }

          ·變量( Variables ):這是報表中一些邏輯運算的表現,比如統計值。 $V{ variablesName }

          每種對象的定義格式如每個對象的后面說明,比如定義一個變量( Variables ),那么表達式就寫成 $V{ variablesName } ,報表中出現的就是這個變量的名稱。后文會詳細的介紹使用方法。

          4.3 、編譯、靜態運行、動態運行

          Jasperreport 運行時需要的就是一個 jasper 后綴的文件,編譯過程其實就是把 jrxml 后綴的文件生成 jasper 后綴的文件。(可以參考 Jasperreport 的運行原理)

          靜態運行和動態運行是相對的,后者帶數據源運行,比如帶數據庫運行。前者就是靜態文本運行,和數據源無關,如果報表中出現和數據源有關的對象,則以 null 顯示。

          4.4 、報表結構

          ?????? 一個報表的結構大致是 個部分: title pageHeader columnHeader detial columnFooter pageFooter summary groupHeader groupfooter

          ·Title :每個報表一般會有一個名字,比如×××銷售報表, title 就是擱置這個名稱的最好地方了,當然你也可以根據需要擱置在合適的地方。

          ·pageHeader :報表的一些公共要素,比如頁碼、創建時間、創建人等信息放置在這里是比較好的選擇。

          ·columnHeader :無可非議的這里是放置列的名稱,記住不是列數據。

          ·Detial :放置需要循環的數據,比如銷售記錄數據。

          ·columnFooter :放置列級別的統計計算值或是列的說明。

          ·pageFooter :放置頁級別的統計值或是頁的說明。

          ·Summary :可能需要對幾頁(你的報表可能有幾個頁組成)的統計值。比如 50 個銷售記錄共占用了 3 頁,那么放置這些統計記錄的統計值最好的地方就是 summary

          ·groupHeader :每個表的內容可能需要根據某個屬性進行劃分顯示內容和計算內容,比如希望以月份為單位每組分開顯示銷售記錄,那么就可以定義一個組(組的定義參考后文), groupHeader 就是放置組說明或是組標志最好的地方。

          ·Groupfooter :放置組的統計或是說明

          5 、向表添加對象

          5.1 、添加靜態對象

          可以通過工具欄的工具添加靜態對象,比如文本,點擊【 T 】,之后在報表的空白處單擊,如此即可把靜態對象添加到報表,然后拖動對象的邊框,使它的大小合適,雙擊對象彈出對象的屬性配置對話框,切換到【 Font Label ,在“ Report font ”的 ComBox 選擇“表頭”字體,(表頭字體是前文提供的自定義屬性組合),再切換到【 Static Text Label ,修改表頭的名字,比如“ Bug 統計報表”或是“銷售記錄統計表”等等與業務有關的內容。添加圖片,請點擊【 Image Tool 】,之后的操作與 Text 類似。其他靜態對象操作步驟類似。

          5.2 、使用連接

          ?????? 還記得前文提供的( 3.2 節)配置 MySql 數據庫連接嗎?這里我們將要使用前文配置的連接了。選擇菜單【建立】-【使用動態連接】開啟可選的動態連接,選擇任何一個你需要的連接最后【 OK 】,保存報表,這樣你的報表就使用了這個連接了。

          * 【特別提示】此連接必須與以后應用程序使用的連接一致。

          5.3 、創建 SQL 查詢語句

          ?????? SQL 語句是對任何 RDBMS 起作用的語言,外部用戶需要使用這些語言管理維護數據庫中的數據,同樣的, iReport 也是需要這么做,我們需要提供查詢數據庫的語言- SQL 語句,這樣, iReport 即可通過此 SQL 語句獲取數據,之后組織到報表中并顯示出來,以滿足用戶的需要為目的。

          ?????? 通過菜單【資料來源】-【報表查詢】開啟 SQL 輸入對話框,并在【 Report SQL Query Label 中輸入 SQL 語句如圖:圖中的“ Automatically Retrieve Fields checkbox 和“ ReadFields Button 是確認自動獲取還是手動獲取數據庫表的可用 Fields 。單擊【 OK 】,保存報表。


          5.4 、創建字段動態對象

          報表的動態對象有變量、參數、字段,前文提及了他們的概念,這里將要一一講解如何使用。

          字段也就是數據庫中的字段,通過菜單【預覽】-【報表字段】開啟字段的列表(工具條上可以找到相應的工具),可以拖放任意字段到報表的任何位置,比如拖動一部分 Bug 的內容字段到 detial 段(內容無關緊要,只要知道原理)。

          5.5 、創建組

          組是一個很重要的概念,一個報表可以多個組,每個組以一個關鍵字為標記,比如希望 Bug 統計是根據項目(或是產品)進行統計的。那么可以設立一個項目標記的組。如圖:

          組的參數設定可以看界面即可理解部分,其中最主要的是“Group expression”,這是必須輸入格式正確的并且存在的字段名稱,本文的“proname”是【字段】中的一個元素。依此類推,建立其他的組對象。每建立一個組,在報表的界面上都會出現該組對應的段,如圖:至于他們的意義和容納的內容參考“4.4報表結構”,他們是首尾對應出現的。(HeaderFooter

          5.6 、添加參數和使用參數

          我們重申參數作用,一般是需要外界提供參數給報表的入口,比如 SQL 語句的 where 條件的表達式。通過【預覽】-【報表參數】開啟報表參數列表對話框(工具條上可以找到相應的工具)。如圖:輸入名稱及其他參數。【 ok , 保存報表。

          那么如何使用呢?打開 SQL 語句對話框,參考“ 5.3 創建 SQL 查詢語句”,這時候的 SQL 語句應該是:
          SELECT *

          FROM bugs? where proname=$P{ProjectName} order by proname,modulename
          注意其中的紅體字部分,就是把剛才定義的變量運用到SQL語句了。這樣當應用提供參數時,只要指定提供給這個參數,那么報表解釋引擎即可替換這些變量然后再執行SQL語句,在第二部分提到編程時,會提供參數設定代碼。

          5.7 、添加變量和使用變量

          變量的定義類似參數,通過【預覽】-【報表變量】開啟報表變量列表對話框(工具條上可以找到相應的工具),如圖,圖中定義的變量的作用是:定義一個 Bug 的計數器,數據類型是 java.lang.Integer, 使用 Count 函數進行統計字段 tester ,作用范圍是模塊組,也就是統計模塊的 Bug 量。其中的 tester 可以改成其他非組對象,比如 proname 是組對象,就不要用作這里的統計參數。以上提供的是自定義變量,其實iReport系統還有提供一些內嵌( Buildin )的變量,比如頁碼,行記錄數等,視需要而使用。

          6 、最后的報表

          6.1 、完成后的報表

          6.2 、預覽報表

          ?

          點擊動態運行報表,出現如圖內容:

          7 、總結

          第一部分只是介紹了如何制作一個動態數據報表,其實 iReport 還有提供很多的特性供開發人員使用,比如柱狀圖、餅圖、及各種形狀的圖形等,滿足企業絕大部分應用的需求。希望你能繼續研究并充分利用。 ????

          ????關于使用 Oracle 數據庫作為數據源的內容:提供與使用的 Oracle 版本對應的 JDBC 驅動,把驅動放置在 iReport lib 目錄,配置數據庫的 JDBC 連接時如圖:其它操作基本沒有區別。

          8、補充內容

          8.1、實現表格

          可以在Detial中加入必要線條實現表格,配合columnFooter、columnHeader、Detial這3個位置實現,您可以試試畫線的位置!

          轉自-阿木Blog

          posted on 2006-06-06 19:11 matthew 閱讀(1336) 評論(0)  編輯  收藏 所屬分類: 報表設計與開發
          主站蜘蛛池模板: 钦州市| 平阳县| 来凤县| 大竹县| 浙江省| 枣阳市| 淳化县| 温宿县| 昌图县| 浑源县| 沁源县| 图片| 孟村| 封开县| 杭锦旗| 莫力| 上饶县| 兴隆县| 深圳市| 永嘉县| 固安县| 汝城县| 阿城市| 乌拉特中旗| 峨边| 准格尔旗| 德格县| 道真| 牙克石市| 屏南县| 绥江县| 墨玉县| 图木舒克市| 连城县| 诸暨市| 苏州市| 许昌县| 依兰县| 阿拉善右旗| 怀仁县| 凌海市|