海鷗航際

          JAVA站
          posts - 11, comments - 53, trackbacks - 1, articles - 102

          使用iReport制作報(bào)表模板

          Posted on 2005-02-02 12:27 海天一鷗 閱讀(1101) 評(píng)論(0)  編輯  收藏 所屬分類: 報(bào)表專題
          軟件工程師, 湖南省長(zhǎng)沙鐵道學(xué)院科創(chuàng)計(jì)算機(jī)系統(tǒng)集成有限公司
          2005 年 1 月
          現(xiàn)在很多公司和個(gè)人都在使用iReport制作報(bào)表模板,我接觸的時(shí)間也不長(zhǎng),在這里,我將我在實(shí)踐過(guò)程中的一些經(jīng)驗(yàn)以及碰到的一些問(wèn)題和大家一起來(lái)探討。

          一、iReport介紹
          說(shuō)到iReport不得不先介紹Jasperreport,Jasperreport是一個(gè)報(bào)表制作程序,用戶需要按照它制定的規(guī)則編寫一個(gè)XML文件,然后得到用戶需要輸出的格式文件。它支持輸出的文件格式包括PDF,HTML,XML,XLS,CVS等等。而iReport就是一個(gè)制作Jasperreport的XML文件的可視化開(kāi)發(fā)工具。

          二、模板制板
          首先必須下載一個(gè)iRport(地址:http://ireport.sourceforge.net),現(xiàn)在的最高版是0.4.0,我們這里使用的是0.2.2。

          將iReport解壓縮以后編輯目錄下的iReport.bat文件即可,如下


          
          @echo off
          
          set JAVA_HOME=C:\j2sdk1.4.0_03
          set ANT_HOME=C:\ant
          set IREPORT_HOME=C:\Documenti\progetti\iReport\iReport2\
          
          rem %ANT_HOME%\bin\ant javadocs
          %ANT_HOME%\bin\ant iReport
          

          只要設(shè)置相應(yīng)的一些路經(jīng)就可以,這里是采用ant來(lái)運(yùn)行,當(dāng)然如果你沒(méi)有安裝ant也不想安裝它,那么也可以,找到noAnt文件夾下的startup.bat文件即可運(yùn)行。

          建立新模板時(shí),便得到如圖所示的界面。


          選中菜單項(xiàng)"Datatsource",單擊其子菜單項(xiàng)"Connection/Datasources",便會(huì)彈出一個(gè)編輯框,選擇"New"按鈕,


          輸入數(shù)據(jù)源名稱,選擇JDBC Driver,在輸入JDBC URL時(shí),可以點(diǎn)擊"Wizard"按鈕,它會(huì)根據(jù)你選的JDBC Driver配置好你的URL,不過(guò)得修改IP地址以及DatabaseName,輸入數(shù)據(jù)庫(kù)名、用戶名、密碼。點(diǎn)擊"Test"按鈕,確定連接情況,然后保存。

          下圖是我做好的一個(gè)報(bào)表模板:


          $F{}是用來(lái)標(biāo)明這是數(shù)據(jù)庫(kù)字段。$F{WINDOWS_NAME}、$F{NUMBER}、$F{vname}、$F{SP_NAME}和$F{SP_TYPE}是數(shù)據(jù)庫(kù)里的字段,也是我要在模板里用到的字段。對(duì)于$F{NUMBER}、$F{vname}、$F{SP_NAME}和$F{SP_TYPE}這四個(gè)字段,雖然放在其他域也可以顯示出結(jié)果,比如:pageHeader域、columnHeader域、columnFooter域等等,但是因?yàn)闀?huì)有多列的數(shù)據(jù)要顯示,所以必須放到"detail"域中。

          模板畫完了,現(xiàn)在來(lái)配置模板的查詢語(yǔ)句,以及字段、變量和參數(shù)。

          首先輸入查詢語(yǔ)句,如"select * from v_baseinfo_statbanjiereport",點(diǎn)擊"Read fields"按鈕,會(huì)查詢出該表的所有字段名


          如果您要有條件的查詢,那么就在后面添加Where語(yǔ)句,如"select * from v_baseinfo_statbanjiereport where DEPT_NAME=$P{orgname} and END_SP_DAY=$P{etime}",點(diǎn)擊"Save query to report"按鈕保存。

          這里要提醒大家注意的是,您可以直接把參數(shù)寫入Where語(yǔ)句中,象這樣"where DEPT_NAME='中國(guó)' and END_SP_DAY='2004-11-23'";但是從java程序或者jsp頁(yè)面?zhèn)鬟^(guò)來(lái)的參數(shù)是中文字符的話,您就必須做編碼轉(zhuǎn)換或者用英文字符、數(shù)字來(lái)代替;還有像日期參數(shù)"2004-11-23",jasperreports好象解析不了,如果你把SQL語(yǔ)句改成" select * from v_baseinfo_statbanjiereport where DEPT_NAME='$P{orgname}' and END_SP_DAY='$P{etime}'",那么又會(huì)拋出異常,因?yàn)镴asperreport會(huì)先把SQL語(yǔ)句設(shè)置成預(yù)編譯語(yǔ)句"select * from v_baseinfo_statbanjiereport where DEPT_NAME=?and END_SP_DAY=?",所以SQL語(yǔ)句中用到參數(shù)的時(shí)候,除了其特定的"$P{}"符號(hào)外,不能有別的標(biāo)點(diǎn)符號(hào),傳進(jìn)去的參數(shù)值也盡量不要帶標(biāo)點(diǎn)符號(hào),所以日期格式得改成"20041123"。

          設(shè)置模板字段:


          設(shè)置模板參數(shù):


          當(dāng)這些全部做完后,點(diǎn)擊"Save"按鈕,就會(huì)生成一個(gè)XML文件,再點(diǎn)擊"Compile"按鈕,就會(huì)生成一個(gè)后綴名為jasper的文件。

          現(xiàn)在可以預(yù)覽一下模板的效果,先選擇菜單項(xiàng)"Build"的子菜單項(xiàng)"PDF preview"、"HTML preview"、"JAVA 2D preview"、"Excel preview"、"CSV preview"和"JRViewer preview"中的一項(xiàng)(對(duì)這些項(xiàng)顯示工具的配置在菜單項(xiàng)Tools\Options..下的External programs), 再點(diǎn)擊"Execute report";如果你想帶數(shù)據(jù)預(yù)覽,還得先激活一下剛配置的數(shù)據(jù)源,選中菜單欄"Build"下的子菜單欄"Set active connection",會(huì)彈出一編輯框,選中一個(gè)數(shù)據(jù)源名稱,點(diǎn)擊"OK"。

          此時(shí)我們就要引入一個(gè)jsp頁(yè)面,假設(shè)是pdf.jsp,那么下面就是pdf.jsp的代碼:


          
          <%@ page import="dori.jasper.engine.*" %>
          <%@ page import="java.util.*" %>
          <%@ page import="java.io.*" %>
          <%@ page import="java.sql.*" %>
           
          <%
          	File reportFile = new File(application.getRealPath("/reports/ribanjietongji.jasper"));
           
          	Map parameters = new HashMap();
          	parameters.put("orgname", "zhongguo");
          	parameters.put("etime", "20041123");
          	Connection conn=null
          	
          	//以下忽略得到數(shù)據(jù)庫(kù)連接過(guò)程
          //……
          		
          	byte[] bytes = 
          		JasperRunManager.runReportToPdf(
          			reportFile.getPath(), 
          			parameters, 
          			conn
          			);
          	
          	response.setContentType("application/pdf");
          	response.setContentLength(bytes.length);
          	ServletOutputStream ouputStream = response.getOutputStream();
          	ouputStream.write(bytes, 0, bytes.length);
          	ouputStream.flush();
          	ouputStream.close();
          %>
          

          程序里面要和大家說(shuō)明的就是,"/reports/test.jasper"這個(gè)路徑是相對(duì)于你這個(gè)jsp頁(yè)面的,比如你的jsp頁(yè)面保存在D:\\..\ROOT\目錄下,那么你就必須在這個(gè)目錄下建一個(gè)report目錄,然后把你做好的報(bào)表模板文件放到該目錄下來(lái)。


          
          		Map parameters = new HashMap();
          	parameters.put("orgname", "zhongguo");
          	parameters.put("etime", "20041123");
          	

          "orgname"和"etime"必須和模板時(shí)定義的參數(shù)名稱一致。

          三、結(jié)束語(yǔ)
          到此整個(gè)模板就算完成了,有什么沒(méi)有說(shuō)明白或者錯(cuò)誤的地方,希望你能和我一起來(lái)討論。

          關(guān)于作者
          舒峰,聯(lián)系方式:feng.shu@chinacreator.com ,簡(jiǎn)介: 本人目前是湖南省長(zhǎng)沙鐵道學(xué)院科創(chuàng)計(jì)算機(jī)系統(tǒng)集成有限公司軟件中心軟件工程師,主要研究J2EE編程技術(shù)。

          主站蜘蛛池模板: 前郭尔| 桓仁| 克山县| 德惠市| 太仓市| 祁阳县| 黔西| 南京市| 泸西县| 南乐县| 朔州市| 白沙| 苏尼特左旗| 丰台区| 光泽县| 西充县| 开远市| 乌苏市| 哈密市| 庆安县| 吉林市| 黎城县| 全椒县| 霍林郭勒市| 怀集县| 犍为县| 清丰县| 平湖市| 台东市| 博罗县| 玉山县| 鄯善县| 芦山县| 敦化市| 页游| 七台河市| 南宁市| 北辰区| 龙泉市| 旺苍县| 屯留县|