文章來源:http://blog.chinahr.com/blog/vincent860214/post/99218
Author: liuxiaohua mailto: vincent860214@126.com
一、iReport 是什么
iReport是一個能夠創建復雜報表的開源項目,并且它能調用JasperReports庫應用于任何一種java應用程序。本身是分布式的且由符合GNU通用公共許可的百分之百純java編寫。
由于它豐富的圖形界面,你能夠很快的創建出任何一種你想要的報表。iReport能夠讓我們提高技術方面的信心,比如它能降低學習JasperReports的XML語法的難度,而且能夠為熟練的技術人員節省大量的時間并能開發出非常精細的報表。
二、iReport 的下載與安裝
JasperReport 的下載地址:http://jasperreports.sourceforge.net/index.html
iReport的下載地址:http://sourceforge.net/projects/ireport
可能有幾種不同的分類
iReport-x.x.x.zip 這是官方的zip格式的二進制文件。
iReport-x.x.x.tgz 這是官方的tar gz格式的二進制文件。
iReport-x-x-x-src.zip 這是官方的包含源代碼的zip格式的二進制文件。
x.x.x表明了iReport的版本號。每一種都包含必須使用的第三方的庫和程序及附加文件,例如模板和一些html格式的基礎教程。
三、iReport 的配置
iReport的初始化配置包括:設置所要查看運行后的文檔的格式;選擇語言;設置編譯后的文件目錄。我們要配置 iReport 必須運行剛剛安裝的 iReport。然后選擇菜單選項中工具選項(menu Options → Tools.)。
首先出現如下圖的界面(圖1.1)。此選項卡是一些簡單常規的設置。
圖 1.1
這個選項卡(圖1.2)是用來設置編譯后的文件存儲目錄,默認的目錄會在iReport的根目錄。一般情況下是要指定一個有效的目錄來保存編譯文件。這個目錄也可以是加載報表源時的目錄。筆者的文件存儲目錄是 D:"J2EE"iReport ,以后所有的報表文件都將被保存在這個目錄下。
圖 1.2
這個選項卡(圖1.3)設置 iReport 編譯后用來預覽報表的外部程序。筆者這里只設定了 IE,其它沒有設定的編譯之后 iReport 會為你生成一個對應格式的文件保存在上面設置的默認目錄下,但不會打開。
圖 1.3
四、創建 JDBC 連接
任何一種動態報表都需要一個數據源,iReport 支持任何一款關系型數據庫作為數據源。
首先我們來看一下怎么建立一個數據源的連接。點菜單(圖1.4),出現一個 Connections /Datasources 對話框。
圖 1.4
圖 1.5
筆者這里已經創建了兩個數據源。如果你是第一次使用 iReport 工具來作報表的話,那么你就要首先來創建數據源的連接。點擊New 新建一個數據源連接。將出現(圖1.6)一個 Connections properties 對話框。這里有很多種數據源類型,我們程序員常用的只有 Database JDBC connection、XML file data source、JavaBeans set data source、EJBQL connection 這幾種。其它的一般程序員很少用得到的。(呵呵…..這是筆者個人的看法)
圖 1.6
我們選擇 Database JDBC connection 后點擊 Next 出現一個數據源連接的配置屬性對話框(圖1.7)。以下是針對筆者的 Oracle 10 數據庫連接配置。
圖 1.7
配置好后我們需要測試一下是否連接成功。點擊 Test 進行測試如出現 Connectin test successful 則表示連接成功(圖1.8)。
注意:這里有一個 Save password 復選框,如果你選種了此復選框,則它會將密碼保存到一個 .txt 文件里面,如果你的密碼不想被暴露話的話,建議不要選此復選框。
圖 1.8
創建一個連接后此連接后,筆者的 iReport 就有三個數據源了(圖1.9)。
圖 1.9
注意:我們創建數據源連接時一定要有數據庫連接驅動的支持。iReport 只為我們符帶了一個 MySQL 的驅動包,并且不定符合你的 MySQL 數據庫的版本。所以我們連接任何一種關系型數據庫時都要將驅動拷貝到 iReport 的安裝根目錄下的 lib 目錄里。
五、第一個簡單的報表
第一個報表我們就采用 iReport 本身的報表精靈向導來創建一個簡單的。iReport Wizard 是一個用來一步步創建報表的工具。點擊(圖2.0)菜單檔案à報表清靈,將出現一個 iReport Wizard 對話框(圖2.1)。
圖2.0
iReport Wizard 工具可以根據你以往的模版進行報表的創建。也可選擇你已經配置好的數據庫連接作為此報表的數據源,然后編寫SQL語句或導入已有的SQL文件。即使你不會寫SQL語句也可以做出一個漂亮的報表出來,因為它有一個 Design… 按鈕(圖2.2),專門為一些不會寫SQL語句的人所設計的。
圖2.1
在此視圖中你可以選擇你要使用的表和表字段,并且它幫我們把表的關系給體現出來了。
圖 2.2
下一步需要選擇我們要在報表中顯示的字段(圖2.3)。
圖2.3
根據此向導我們可以創建四個組(事實它可以設置很多的組)。
圖2.4
向導為我們提供幾套顯示模版供我們選擇(圖2.5)。
圖2.5
最終它根據我們的設定生成了一份報表(圖2.6)。
圖2.6
所有的工作已經全部完成,只需要執行報表就可以了。點擊后面這個執行動態報表將出來下圖(圖2.7)的報表結果。
圖2.7
如何支持中文。
這個報表的所有數據都是英文的,如果您的數據有中文的話,那么您還需要進行一步設定(圖2.8),要修改的地方有三個,1.Font Name 改成中國的字體。2.PDF Font Name 改成 STSong-Light。3.PDF Encoding 改成 UniGB-UCS2-H (Chinese Simplified)。就OK啦。
圖2.8
上面我只做了一個簡單的報表,其實 iReport+JasperReport 最大的靚點就是設計可視化的圖表報表,下面是筆者做的一個簡單的圖形報表(圖2.9)。
圖2.9
六、圖形報表(餅圖)
新建一個chatReport 報表
編寫SQL語句(圖3.0)。查詢每個部門有多少個職員。
圖3.0
選擇工具欄中插入餅圖的快捷鍵(圖3.1)
圖3.1
出現一個圖形報表選擇向導。我們選擇第二個三維餅圖(圖3.2)。
圖3.2
點擊OK之后,在報表的設計器中出現一個三維餅圖(圖3.3)。我們需要設置餅圖的一些屬性,通過右鍵 Chart Properties 來完成屬性的設定。
圖3.3
出現了 Chart Properties 對話框后,選擇 Chart Data 選項卡圖形報表的數據,設置其數據來源。
對應部門的職員的個數 部門名稱 圖3.4 關閉設計視圖。然后選擇我們要預覽的格式(圖3.5)。 圖3.5 注意:在生成PDF預覽時,需要向 iReprot 的 lib 目錄下加入一個 iTextAsian.jar 的亞州語言包,用于處理亞州語言的亂碼的問題。iTextAsian.jar 現在很難下載得到了,如果你需要的話給我一個郵件,講明你所要的東西。 點擊工具欄的編譯運行,最終執行報表的效果(圖3.6)。 圖3.6 七、一勞永益的解決中文的問題 前面提到過報表中的中文問題,上面給出的解決方案比較麻煩需要對每個字段進行設定,下面給出一個通用的設定,可以應用到所有的字段,這樣我們只須做一次設定永久使用。 第一步:添加一個自定義的字體(圖3.7)。 圖 3.7 彈出一個添加自定義字體的對話框(圖3.8)。 圖3.8 點擊添加一個新的字體。要想中文不出現亂碼,則要跟我的配置一樣(圖3.9)。 圖3.9 配置已完生,以后在使用的時候只要選中字段然后右鍵屬性,在Font 選項卡中 Report Font 中選擇我的字體就OK了(圖4.0),不用像上面那樣子每次都要同時修改三個地方了。 圖4.0 八、應用程序調用JasperReport 報表 應用程序包結構(圖4.1)。 圖4.1 Servlet 代碼:
iReport 工具的lib目錄下的.jar 全部拷貝到工程下面。 public void service(HttpServletRequest request, HttpServletResponse response) 記住此應用程序需要添加一些庫支持。最簡單的辦法就是把 運行程序,打開瀏覽器。 http://localhost:8080/reportdemo/index.jsp出現此頁面(圖4.2)。 圖4.2 點擊生成報表。出現我們想要的報表(圖4.3)。 圖4.3 大功告成。。
throws ServletException, IOException {
try {
// 報表編譯之后生成的.jasper 文件的存放位置
File reportFile = new File(
request.getRealPath("jasperreport/employee.jasper"));
// 傳遞報表中用到的參數值
Map<String, String> parameters = new HashMap<String, String>();
// "name"是報表中定義過的一個參數名稱,其類型為String 型
// parameters.put("name", value);
byte[] bytes = JasperRunManager.runReportToPdf(
reportFile.getPath(), null, DBConnection.getConnection());
//生成PDF文件
response.setContentType("application/pdf");
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (Exception e) {
System.out.println("出錯");
e.printStackTrace();
}
}