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

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

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

    海鷗航際

    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í)踐過程中的一些經(jīng)驗(yàn)以及碰到的一些問題和大家一起來探討。

    一、iReport介紹
    說到iReport不得不先介紹Jasperreport,Jasperreport是一個(gè)報(bào)表制作程序,用戶需要按照它制定的規(guī)則編寫一個(gè)XML文件,然后得到用戶需要輸出的格式文件。它支持輸出的文件格式包括PDF,HTML,XML,XLS,CVS等等。而iReport就是一個(gè)制作Jasperreport的XML文件的可視化開發(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來運(yùn)行,當(dāng)然如果你沒有安裝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,不過得修改IP地址以及DatabaseName,輸入數(shù)據(jù)庫(kù)名、用戶名、密碼。點(diǎn)擊"Test"按鈕,確定連接情況,然后保存。

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


    $F{}是用來標(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)在來配置模板的查詢語(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)鬟^來的參數(shù)是中文字符的話,您就必須做編碼轉(zhuǎn)換或者用英文字符、數(shù)字來代替;還有像日期參數(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ù)連接過程
    //……
    		
    	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();
    %>
    

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


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

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

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

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

    主站蜘蛛池模板: 亚洲一区二区三区在线观看网站 | 亚洲AV无码一区二区一二区| 国产精品亚洲片在线va| 亚洲欧洲AV无码专区| 国产精品免费视频观看拍拍 | 91av免费在线视频| 亚洲人成影院在线观看| 亚洲狠狠狠一区二区三区| 亚洲美国产亚洲AV| 在线免费视频一区| 精品亚洲综合久久中文字幕| 亚洲综合色婷婷在线观看| 岛国av无码免费无禁网站| 久久九九亚洲精品| 亚洲精品免费视频| 免费看的黄色大片| 亚洲AV无码第一区二区三区| 亚洲av无码专区在线电影天堂| 成人免费福利电影| 亚洲成人在线免费观看| 成全高清在线观看免费| 免费h黄肉动漫在线观看| 亚洲一级视频在线观看| 全免费a级毛片免费看| 免费人成在线观看网站视频| 一级美国片免费看| 免费A级毛片无码A| 99re6在线视频精品免费| 亚洲人成色7777在线观看不卡| 亚洲精品乱码久久久久久蜜桃图片| 日本zzzzwww大片免费| 亚洲人成网亚洲欧洲无码久久| 99亚洲精品卡2卡三卡4卡2卡| 欧洲一级毛片免费| 亚洲av无码片vr一区二区三区| 亚洲男人的天堂一区二区| 无码免费一区二区三区免费播放 | 免费无码黄网站在线看| 亚洲一区二区三区不卡在线播放| 日本高清免费中文字幕不卡| 国产成人精品亚洲日本在线|