kooyee ‘s blog

          開(kāi)源軟件, 眾人努力的結(jié)晶, 全人類的共同財(cái)富
          posts - 103, comments - 55, trackbacks - 0, articles - 66
             :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          JasperReports+iReport在eclipse中的使用

          Posted on 2007-08-03 17:34 kooyee 閱讀(4736) 評(píng)論(2)  編輯  收藏 所屬分類: Jasper Report

          一、介紹

          1)它可以PDF,HTML,XML等多種形式產(chǎn)生報(bào)表或動(dòng)態(tài)報(bào)表,在新版本還支持CSV,XLS,RTF等格式的報(bào)表;
          2)它按預(yù)定義的XML文檔來(lái)組織數(shù)據(jù),來(lái)源多(如:關(guān)系數(shù)據(jù)庫(kù),Java容器對(duì)象(collection,arrays)等);
          報(bào)表的填充過(guò)程:
          先產(chǎn)生報(bào)表設(shè)計(jì)對(duì)象->序列化該對(duì)象->存儲(chǔ)在磁盤或網(wǎng)絡(luò)->產(chǎn)生XML文件(表格數(shù)據(jù))。
          表單的設(shè)計(jì)過(guò)程就是用定義于XML文件中的Java表達(dá)式來(lái)實(shí)現(xiàn)報(bào)表的設(shè)計(jì)。
          3)它帶數(shù)據(jù)一致性驗(yàn)證;
          4)報(bào)表引擎必須先接受數(shù)據(jù)(通過(guò)參數(shù)等多種形式)來(lái)產(chǎn)生報(bào)表,更多的是來(lái)自數(shù)據(jù)源,引擎直接接收用于填充表格的數(shù)據(jù)源對(duì)象,或者通過(guò)自身提供的JDBC連接對(duì)象來(lái)處理數(shù)據(jù)庫(kù)的數(shù)據(jù);
          5)報(bào)表最終要產(chǎn)生一個(gè)新的對(duì)象來(lái)進(jìn)行填充操作,從而產(chǎn)生打印文檔對(duì)象,這也是存儲(chǔ)在磁盤或網(wǎng)絡(luò)傳輸介質(zhì)的序列化對(duì)象;
          6)內(nèi)置瀏覽器能直接查看結(jié)果,以PDF,HTML,XML導(dǎo)出;
          7)重要的類:
          net.sf.jasperreports.engine.design.JasperDesign
          其實(shí)例是用于報(bào)表產(chǎn)生的原始類;
          net.sf.jasperreports.engine.design.JasperReport
          表現(xiàn)了報(bào)表設(shè)計(jì)對(duì)象,是作為報(bào)表的編譯過(guò)程的結(jié)果而被實(shí)例化,是向報(bào)表中填充數(shù)據(jù)的準(zhǔn)備。



          二、結(jié)構(gòu)

          JasperReports用XML文件來(lái)定義,約定用jrxml作為文件的后綴名。

          1)主要元素:
          <jasperReport> 根元素
          <title> 報(bào)表的標(biāo)題
          <pageHeader> 頁(yè)眉
          <detail> 正文
          <pageFooter> 頁(yè)腳
          <band> 定義報(bào)表部件,以上所有元素都包含一個(gè)band元素作為其唯一子元素。
          除了根元素,其余元素是可選的。

          2)其編輯工具iReport在Eclipse3.2下的安裝過(guò)程
          菜單“幫助”->“軟件更新”->“查找并安裝”->“搜索要安裝的新功能部件”--(下一步)-->“新建遠(yuǎn)程站點(diǎn)”,輸入以下內(nèi)容:
          名稱:JasperForge
          URL:http://www.jasperforge.org/update
          --(確定)-->“下一步”-->直至完成。

          3)以JasperReports1.3.0版本為例,一個(gè)JasperReports項(xiàng)目需要如下jar包
          包名                                    說(shuō)明
          jasperreports-1.3.0.jar                 JasperReports API
          commons-beanutils-1.7.jar               JavaBeans Utility classes
          commons-collections-2.1.jar             Collections framework extension classes
          commons-digester-1.7.jar                classes for processing XML documents
          commons-logging-1.0.2.jar               Logging classes
          poi-2.0-final-20040126.jar              Jarkarta POI API to generate an Excel Document
          itext-1.3.1.jar                         PDF library
          xml-apis.jar                            XML parser API



          三、iReport介紹

          1)iReport是為JasperReports設(shè)計(jì)的強(qiáng)大的,直觀的,易于使用的可視化報(bào)表設(shè)計(jì)器,為win32平臺(tái)編寫(xiě)。允許用戶可視化地編輯XML JasperDesign文件,可以和其它數(shù)據(jù)庫(kù)進(jìn)行JDBC通信。
          再設(shè)計(jì)模板時(shí)可以以HTML,PDF,XML方式預(yù)覽,用它生成的文件有.jrxml和.jasper兩種文件。
          .jrxml:是可視化編輯的xml文件;
          .jasper:經(jīng)編譯后生成的類文件,即報(bào)表模板文件。

          2)iReport的輸出格式
          其預(yù)覽輸出格式有:PDF,HTML,CSV。JAVA2D,EXCEL,純文本,JRView。
          注意:JRViewer是直接以C/S方式作為報(bào)表的輸出格式,在JFrame框架下輸出。

          3)報(bào)表的動(dòng)態(tài)對(duì)象變量、參數(shù)、字段
          字段Fields:是從數(shù)據(jù)庫(kù)抽取出來(lái)的,在報(bào)表中出現(xiàn)的數(shù)據(jù)庫(kù)內(nèi)容。$F
          參數(shù)Parameters:你寫(xiě)的應(yīng)用需要提供給報(bào)表的入口。 $P
          變量Variables:報(bào)表中一些邏輯運(yùn)算的表現(xiàn)。 $V
          每個(gè)對(duì)象的定義格式如下: $V{variablesName}

          4)運(yùn)行時(shí)需要.jasper文件;編譯:把.jrxml->.jasper文件。
          靜態(tài)運(yùn)行:靜態(tài)文本來(lái)運(yùn)行,和數(shù)據(jù)源無(wú)關(guān);
          動(dòng)態(tài)運(yùn)行:帶數(shù)據(jù)源運(yùn)行。

          5)報(bào)表的結(jié)構(gòu)
          title、pageHeader、columnHeader、detail、columnFooter、pageFooter、summary、groupHeader、groupfooter。

          6)在iReport中創(chuàng)建數(shù)據(jù)庫(kù)連接
          (1)菜單DourceSource -> Connections/DataSources -> ...new ->
          (2)菜單Build -> Set active connection -> 選擇 -> ... -> OK

          7)在iReport中創(chuàng)建文件
          iReport工具是一個(gè)可視編輯器幫助創(chuàng)建JasperReports文件。JasperReports是一個(gè)基于Java報(bào)表的引擎。
          當(dāng)你在iReport中創(chuàng)建一個(gè)報(bào)表,你實(shí)際上是對(duì)配置文件進(jìn)行操作,告訴JasperReports應(yīng)該怎樣建立Report。
          三種文件:
          .jasper文件:編譯的二進(jìn)制文件;
          .jrxml文件:報(bào)表的配置文件;
          .pdf文件:生成的pdf文件。

          8)報(bào)表格式化
          在iReport上選擇報(bào)表的一個(gè)區(qū)域,將呈現(xiàn)藍(lán)色高亮顯示;
          可用鼠標(biāo)拖曳來(lái)改變區(qū)域的尺寸,當(dāng)誤操作時(shí),用undo來(lái)恢復(fù);
          如選擇框變紅,則有錯(cuò)誤,report將不能編譯;
          改變字體或調(diào)整尺寸,菜單“View”->“Element properties”->分三個(gè)選擇:
          (1)Common選擇:尺寸,前景色/背景色,透明度,打印條件,位置屬性等;
          (2)Font選擇:字體、大小、類型,PDF字體,加粗,斜體,下劃線,水平位置,垂直位置,PDF編碼。
          注意:兩種字體:
               Font Name:將顯示在iReport設(shè)計(jì)器和JasperReports運(yùn)行中;
               PDF font Name:將顯示在編譯后的PDF文件中。
          (3)Static Text:靜態(tài)文本。
          想瀏覽元素時(shí),看“View”->“Elements browser”;
          一次選擇多個(gè)域,按“shift”鍵再用鼠標(biāo)點(diǎn)擊;
          菜單“View”->“Report Properties”報(bào)表屬性:
          報(bào)表尺寸,單位,頁(yè)邊距,報(bào)表名,縱向Portrait/橫向Landscape,列寬,Spacing,標(biāo)題作為新頁(yè),Summary作為新頁(yè),XML編碼(UTF-8)。

          9)使用Groups
          菜單“View”->“Report query” 可以查詢和修改SQL語(yǔ)句。

          10)為report增加參數(shù)
          (1)菜單“View”->“Report Query”,修改SQL語(yǔ)句,如:加上 WHERE LAST_NAME=$P{LAST_NAME}
          注意:參數(shù)用$P{}來(lái)封裝。
          (2)定義參數(shù)
          菜單“View”->“Reports Parameters”
          新建參數(shù),如參數(shù)名為“LAST_NAME”,再指定參數(shù)的類型(如:String)
          還可設(shè)定“缺省值”和參數(shù)的“描述”
          運(yùn)行報(bào)表(缺省),還可以傳遞參數(shù)方式:http://server/showReport?LAST_NAME=smith
          菜單“Build”->“Execute report(using active conn.)”

          11)創(chuàng)建子報(bào)表
          例子:一個(gè)報(bào)表包含另一個(gè)報(bào)表
          (1)建立兩個(gè)報(bào)表;
          (2)擴(kuò)展master報(bào)表,增加一個(gè)subreport元素;
          (3)雙擊subreport元素,設(shè)置其屬性。在Subreport(other)欄中,
          Subreport Expression填入“c:\test2.jasper”(第二個(gè)表即子表的文件名),點(diǎn)擊“Add”,增加/修改:“Subreport parameter name”和Default value expression值;(COUNTRY     $F{COUNTRY})
          (4)對(duì)子表“Report query”->添加'where COUNTRY=${COUNTRY}'
          (5)增加“Report parameters”,(COUNTRY,java.lang.String)
          (6)編譯detail report;
          (7)運(yùn)行master report。


          iReport支持Groovy腳本語(yǔ)言,可無(wú)需懂Java。

          1、配置XML文件
          jasperreports的XML配置文件局域jasperreport.dtd文件而來(lái)。

          1)根元素jasperReport
          其子元素有:報(bào)告的字體reportFont,參數(shù)parameter,查詢字符串queryString,字段field,變量variable,組group,標(biāo)題title,頁(yè)眉pageHeader,列眉columnHeader,表明細(xì)detail,列腳columnFooter,頁(yè)腳pageFooter。
          屬性有:列寬columnWidth,列間距columnSpacing,左邊距l(xiāng)eftMargin,頂邊距topMargin,底邊距bottomMargin。

          2)報(bào)表層字體含義reportFonts
          無(wú)子元素;
          屬性有:名字name,是否缺省isFault,字體名fontName,字體大小size,是否粗體isBold,是否斜體isItalic,是否帶下劃線isUnderline,isStrikeThrough,PDF字體名pdfFontName,PDF編碼pdfEncoding,是否嵌入PDF(isPdfEmbedded)。

          3)用于產(chǎn)生報(bào)表的對(duì)象參數(shù)parameter。引用P${name}
          其子元素有:ParameterDescription,defaultValueExpression
          屬性有:name,class

          4)從數(shù)據(jù)庫(kù)檢索數(shù)據(jù)的查詢SQL語(yǔ)句 queryString

          5)包含于report中的數(shù)據(jù)庫(kù)表列字段 field。 引用F${name}
          其子元素有:variableExpression,initialValueExpression
          屬性有:name,class

          6)用在XML文件中的變量 Variable   引用V${name}
          其子元素有:variableExpression,initialValueExpression
          屬性有:name,class

          7)報(bào)表標(biāo)題 title
          其子元素有:band
          無(wú)屬性

          8)頁(yè)眉 pageHeader
          其子元素有:band
          無(wú)屬性

          9)報(bào)表的列名 columnHeader
          其子元素有:band
          無(wú)屬性

          10)指定的列值detail
          其子元素有:band
          無(wú)屬性

          11)列尾columnFooter
          其子元素有:band
          無(wú)屬性

          12)頁(yè)腳pageFooter
          其子元素有:band
          無(wú)屬性
          注:在report中,一個(gè)band表示一個(gè)report節(jié)點(diǎn)。一個(gè)band元素包括:staticText(靜態(tài)文本)和textElement(文本元素)兩個(gè)元素。
          常見(jiàn)報(bào)表模型:列表、分組、主從、嵌套、交叉、圖形、套打、分欄、填報(bào)。

          2、創(chuàng)建報(bào)表

          1)建立輸入源
          InputStream input = new FileInputStream(new File("c:\\JasperReports\\catalog.xml"));
          JasperDesign design=JRXmlLoader.load(Input);

          2)創(chuàng)建對(duì)象
          JasperReport report = JasperCompileManager.compileReport(design);

          3)獲得JDBC連接從數(shù)據(jù)庫(kù)檢索數(shù)據(jù)
          InitialContext initialContext = new InitialContext();
          DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/OracleDBConnectionDS");
          Connection conn = ds.getConnection();

          4)產(chǎn)生可預(yù)覽、打印、輸出為其它格式的JasperPrint文件
          JasperPrint print = JasperFillManager.fillReport(report, parameters, conn);

          5)參數(shù)處理
          Map parameters = new HashMap();
          parameters.put("ReportTitle", "PDF JasperReport");

          6)輸出成XML,PDF,HTML,CSV,XLS(Excel)的任一種文件。
          OutputStream output = new FileOutputStream(new File("c:/JasperReports/catalog.pdf"))
          JasperExportManager.exportReportToPdfStream(print,output);

          3、JasperReports的安裝配置

          1)JDK的安裝,注意JAVA_HOME環(huán)境變量;
          2)要支持中文,需itext-1.3.1.jar和iTextAsian.jar包,加入CLASSPATH環(huán)境變量中;
          3)安裝iReport,用iReport-1.3.0-windows-installer.exe安裝;
          4)JasperReport不需任何配置,將其jar包(jasperreports-1.3.0.jar)放入CLASSPATH;
          5)數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)包,例如Sybase的驅(qū)動(dòng)包為jconn6.jar,加入到CLASSPATH。

          4、iReport的安裝配置

          iReport如果不用其安裝文件iReport-1.3.0-windows-installer.exe安裝,則需要配置。
          iReport需Sun公司的JDK下的tools.jar,需拷貝到iReport的lib目錄下。
          iReport初始化配置的組成:
          (1)建立報(bào)表;
          (2)選擇語(yǔ)言;
          (3)加入到CLASSPATH。



          四、Report Structure 報(bào)告的結(jié)構(gòu)

          本章描述報(bào)告的結(jié)構(gòu),可用的report對(duì)象和它們的屬性。這基本上是JasperReports的快速參考。

          1、Expressions 表達(dá)式
          表達(dá)式是JasperReports的核心特征。它是一個(gè)重要的機(jī)制,允許操縱和顯示報(bào)告數(shù)據(jù),執(zhí)行各種計(jì)算,自定義報(bào)告的外觀和報(bào)告對(duì)象的可視性。

          1)一個(gè)典型的表達(dá)式
          $F{LastName} + " " + $F{LastName}
          一個(gè)JasperReports的表達(dá)式是以Java表達(dá)式為基礎(chǔ)的,再加上一些附加的語(yǔ)法,它允許引用參數(shù)、變量和字段等。
          比如說(shuō)要引用一個(gè)名叫DATA的參數(shù)時(shí),語(yǔ)法應(yīng)為$P{PARAM_NAME}。
          對(duì)變量和字段來(lái)說(shuō),其引用語(yǔ)法分別為$V{VAR_NAME}和$F{FIELD_NAME}。
          注意:在JasperReports的groovy腳本語(yǔ)言中,也同樣可以用$F,$P,$V引用參數(shù)、變量和字段。

          2)表達(dá)式的語(yǔ)法
          (1)$F{FIELD}   引用名為FIELD的字段;
          (2)$V{VAR}     引用名為VAR的變量;
          (3)$P{PARAM}   引用名為PARAM的參數(shù);
          (4)$P!{PARAM} 引用名為PARAM的參數(shù);這個(gè)特殊的語(yǔ)法僅能用于report的查詢中。它允許插入?yún)?shù)的內(nèi)容到查詢字符串中。例如,它能被用于創(chuàng)建一個(gè)帶通過(guò)參數(shù)來(lái)指定WHERE條件的動(dòng)態(tài)查詢。
          $R{keyName}      在resource bundle中檢索帶keyName關(guān)鍵字的字符串。
          注意:表達(dá)式是用Java或Groovy寫(xiě)成的,這意外著可以用Java強(qiáng)大的功能,如調(diào)用方法,允許構(gòu)建無(wú)限復(fù)雜的表達(dá)式。還要注意,表達(dá)式的結(jié)果總是一個(gè)對(duì)象。

          3)更多的表達(dá)式
          (1)new Integer(Math.max($V{Price1},$V{Price2}))
          (2)(new SimpleDateFormat("dd/MM/yyyy")).format($F{OrderDate})
          (3)$F{SpecialOffer}.booleanValue()? $F{SpecialPrice} : $F{Price}

          2、內(nèi)建的函數(shù)
          JasperReports提供了一套內(nèi)建的函數(shù)用于report表達(dá)式中。這些函數(shù)盡管是內(nèi)建的工具,還是可以在普通操作中執(zhí)行它。
          注意:目前這套函數(shù)很有限,在未來(lái)會(huì)得到擴(kuò)展。

          1)例:使用內(nèi)建函數(shù)
          msg("Total cost is {0}", $F{TOTAL})
          msg("Matched {0} products out of {1}", $F{MATCHED}, $P{TOTAL})

          2)內(nèi)建的函數(shù)
          (1)String str(String key);
          從和report相聯(lián)系的resource bundle中得到給出的key的一個(gè)字符串。這個(gè)函數(shù)的功能和使用$R{key}語(yǔ)法等價(jià)。
          (2)String msg(String pattern, Object arg0);
          建立一個(gè)帶給定的pattern和給定參數(shù)來(lái)指定其格式的java.util.MessageFormat對(duì)象。
          (3)String msg(String pattern, Object arg0, Object arg1);
          同上;
          (4)String msg(String pattern, Object arg0, Object arg1, Object arg2);
          同上。

          3、Report 報(bào)告
          Report是表現(xiàn)為報(bào)告模板的根對(duì)象。在報(bào)告執(zhí)行期間,report模板和數(shù)據(jù)組合成最終的文檔。
          報(bào)告的屬性有:
          (1)Report Name 報(bào)告名;
          (2)Units 報(bào)告的單位;有:像素Pixels,毫米Millimeters,厘米Centimeters和英寸Inches。
          (3)Language 報(bào)告表達(dá)式使用的語(yǔ)言;目前有Java和Groovy兩種。
          (4)Orientation 頁(yè)的方向;其可能值為水平Protrait和縱向Landscape。
          (5)Page Width 以報(bào)告單位指定的頁(yè)寬;
          (6)Page Height 以報(bào)告單位指定的頁(yè)高;
          (7)Page Size 報(bào)告的尺寸,即為page width和page height。
          (8)Left Margin 以報(bào)告單位指定的左邊頁(yè)邊距;
          (9)Right Margin 以報(bào)告單位指定的右邊頁(yè)邊距;
          (10)Top Margin 以報(bào)告單位指定的頂部頁(yè)邊距;
          (11)Bottom Margin 以報(bào)告單位指定的底部頁(yè)邊距;
          (12)Column Count 報(bào)告中的列數(shù);
          (13)Column Spacing 以報(bào)告單位指定的列邊距;
          (14)Column Width 以報(bào)告單位指定的列寬;
          (15)Print Order 填充列的順序;有垂直Vertical和水平Horizontal兩種。
          (16)Float Column Footer 浮動(dòng)列腳,指出是否在列底部或明細(xì)表最后或組腳進(jìn)行打印;
          (17)Default Font 缺省字體;
          (18)Default Style 缺省風(fēng)格;
          (19)Scriptlet Class 腳本類,它必須是JRAbstractScriptlet類的子類。如果省略,將創(chuàng)建一個(gè)JRDefaultScriptlet的實(shí)例。
          (20)Summary New Page 新頁(yè)的概要;
          (21)Title New Page 新頁(yè)的標(biāo)題;
          (22)When No Data Print 無(wú)數(shù)據(jù)時(shí)的打印,有三個(gè)選擇:No Pages 表示0頁(yè);Blank Page 空白頁(yè);All Sections No Detail 除了detail section,其它的都打印。
          (23)Query 查詢,用來(lái)檢索數(shù)據(jù)到報(bào)告中。
          (24)Query Language 查詢語(yǔ)言,有五個(gè)值:SQL 用于JDBC數(shù)據(jù)源的查詢語(yǔ)言;HBM Hibernate用于Hibernate數(shù)據(jù)源的查詢語(yǔ)言;XPath 用于XML數(shù)據(jù)源的查詢語(yǔ)言;EJBQL用于支持Java持久層(Persistence)API的數(shù)據(jù)源的查詢語(yǔ)言;MDX 用于Mondrian數(shù)據(jù)源的查詢語(yǔ)言。
          (25)Imports java輸入的列表,例如:java.util.*和java.text.SimpleDateFormat格式。用于簡(jiǎn)化report的表達(dá)式。
          (26)Resource Bundle 為report提供了本地的系列字符串。在報(bào)告中,本地字符串能用$R{key}引用。
          (27)When Resource Missing Print 允許自定義引擎在resource bundle中處理丟失的resource。有4種選擇:Null 丟失的resource不打印;Empty 丟失的resource為空;Key 用$R{key}指定的key來(lái)打印; Error 用錯(cuò)誤來(lái)中斷報(bào)告的執(zhí)行。

          4、Styles 風(fēng)格
          一個(gè)report可以定義大量的風(fēng)格。一旦定義了,它們能和report對(duì)象聯(lián)系起來(lái),為了給各種可視視圖提供基本的配置。report允許用模塊化的方式來(lái)定義模塊的風(fēng)格。
          風(fēng)格有相關(guān)聯(lián)的條件風(fēng)格。條件風(fēng)格允許當(dāng)其表達(dá)式為真時(shí)改變風(fēng)格。

          1)風(fēng)格的屬性有:
          (1)Name 風(fēng)格名;
          (2)Parent Style 父風(fēng)格;
          (3)Foreground 前景色;
          (4)Background 背景色;
          (5)Mode 方式,決定是否帶透明度;
          (6)Pen 畫(huà)筆 有6種選擇:None 無(wú)線;1 Point 正常寬度的線;2 Point 中等寬度的線;4 Point 粗線;Dotted 虛線;Thin 細(xì)線。
          (7)Fill 填充;決定對(duì)對(duì)象進(jìn)行填充的模式;
          (8)Box 指定盒子的屬性,如邊框類型,邊框顏色,是否填充。
          (9)Horizontal Alignment 水平排列;有3種選擇:Left 左;Center 中;Right 右。
          (10)Vertical Alignment 垂直排列;有3種選擇:Top 頂;Middle 中;Bottom 底。
          (11)Scale 比例;指定圖像的比例,有3種選擇:Clip 尺寸不適合時(shí),多余部分省略;Fill Frame 圖像按比例填充進(jìn)Image對(duì)象中;Retain Shape 保留原形狀進(jìn)行填充。
          (12)Radius 指定矩形邊框倒角的弧度;
          (13)Pattern 用Text Field表達(dá)式的值來(lái)指定樣式;其日期類型的值用java.text.SimpleDataFormat類來(lái)定義;其數(shù)值型的值用java.text.DecimalFormat來(lái)定義。
          (14)Blank When Null 當(dāng)Text Field表達(dá)式的值為null時(shí)顯示空白;
          (15)Line Spacing 線距;有3種選擇:Single:?jiǎn)伪毒€距;1 and 1/2:1.5倍線距;Double:雙倍線距。
          (16)Rotation 旋轉(zhuǎn);有3種選擇:None 不旋轉(zhuǎn);Left 左旋180度;Right 右旋180度。
          (17)Styled Text 是一個(gè)標(biāo)志位,用來(lái)指定是否text對(duì)象包含了已定義風(fēng)格或規(guī)則的text。
          (18)Font Name 字體名;
          (19)Font Size 字體的尺寸;
          (20)Bold 粗體;
          (21)Italic 斜體;
          (22)Underline 下劃線;
          (23)Strike Through 通過(guò)標(biāo)準(zhǔn)位來(lái)取消;
          (24)PDF Font Name:PDF字體名;
          (25)PDF Encoding:PDF編碼;
          (26)PDF Embedded是一個(gè)標(biāo)志位,指定是否PDF字體應(yīng)該嵌入到文檔中。

          2)條件風(fēng)格的屬性:
          和上面僅有一點(diǎn)點(diǎn)的不同。其不同的屬性為:
          Condition Expression 條件表達(dá)式;是一個(gè)布爾型的表達(dá)式,用于判斷是否應(yīng)用條件表達(dá)式。

          5、Section Properties 節(jié)屬性
          Section的種類前面已經(jīng)講了,這里只是補(bǔ)充講述它的屬性:
          (1)Height 以報(bào)告的單位指定的section的高度;
          (2)Print When Expression 是一個(gè)布爾表達(dá)式,決定是否打印本Section;
          (3)Split Allowed 一個(gè)標(biāo)志位,指示當(dāng)Section超過(guò)當(dāng)前頁(yè)面的尺寸時(shí),是否允許分割它。如果為真,當(dāng)前Section將遷移到下一頁(yè)。注意:如果Section在下一頁(yè)也不適合時(shí),則不管標(biāo)志位值如何,都會(huì)分割它。

          6、Groups 組
          一個(gè)report可以定義大量的組。組表示決定帶相關(guān)數(shù)據(jù)的可視組的表達(dá)式名。一旦聲明后,組能在報(bào)告任意地方使用。
          一個(gè)數(shù)據(jù)組用一個(gè)表達(dá)式組來(lái)識(shí)別。
          注意:組機(jī)制不能完成來(lái)自于數(shù)據(jù)源數(shù)據(jù)的任何排序。如果想要有序的數(shù)據(jù),必須把數(shù)據(jù)源的數(shù)據(jù)進(jìn)行先排序處理。
          組屬性:
          (1)Name 組名;用于引用組。
          (2)Expression 表達(dá)式;決定report數(shù)據(jù)的組;
          (3)Min Height To Start New Page 開(kāi)始新頁(yè)的最小高度;
          (4)Reprint Header On Each Page 一個(gè)標(biāo)志位,指示在每一頁(yè)的開(kāi)始處是否重新打印組頭;
          (5)Reset Page Number 重設(shè)頁(yè)數(shù),一個(gè)標(biāo)志位;在組頭在新頁(yè)開(kāi)始處打印時(shí),是否重新設(shè)置頁(yè)數(shù);
          (6)Start New Column 一個(gè)標(biāo)志位,是否在新列中總是打印組頭;
          (7)Start New Page 一個(gè)標(biāo)志位,是否在新頁(yè)中總是打印組頭;

           


          五、JasperReports作為一種開(kāi)源的報(bào)表庫(kù)為應(yīng)用提供了強(qiáng)大的支持。其易用性和
          靈活性為系統(tǒng)的開(kāi)發(fā)提供了極大的便利。



          在報(bào)表生成過(guò)程中,使用JDBC等傳統(tǒng)數(shù)據(jù)源操作方法獲取數(shù)據(jù)的過(guò)程會(huì)消耗大量的系統(tǒng)時(shí)間,這樣就需要利用其它手段來(lái)簡(jiǎn)化數(shù)據(jù)源操作。
          在這種情況下,適當(dāng)?shù)氖褂肙RM(Object/Relational Mapping)技術(shù),能夠很好的解決這個(gè)問(wèn)題,對(duì)于系統(tǒng)性能的提升有很大的幫助。

          1、JasperReports填充報(bào)表

          要完成報(bào)表的填充,必須先完成用于報(bào)表的xml模板,其過(guò)程是先產(chǎn)生報(bào)表布局對(duì)象,再序列號(hào)該對(duì)象,存儲(chǔ)在磁盤或者網(wǎng)絡(luò),用于產(chǎn)生特定應(yīng)用的表格數(shù)據(jù)。
          實(shí)際上,表單的設(shè)計(jì)過(guò)程就是用定義于xml文件中的java表達(dá)式來(lái)表現(xiàn)報(bào)表的布局。
          編輯過(guò)程中會(huì)有各種保證數(shù)據(jù)一致性的驗(yàn)證,最終會(huì)產(chǎn)生相關(guān)數(shù)據(jù)的文檔。
          報(bào)表引擎必須先接受數(shù)據(jù)來(lái)產(chǎn)生報(bào)表,這些數(shù)據(jù)一般來(lái)源于各種數(shù)據(jù)源,報(bào)表引擎能直接接收用于填充表格的數(shù)據(jù)源對(duì)象,或者通過(guò)自身提供的JDBC連接對(duì)象來(lái)處理數(shù)據(jù)庫(kù)的數(shù)據(jù)。
          報(bào)表最終要產(chǎn)生一個(gè)新的對(duì)象來(lái)進(jìn)行填充操作從而產(chǎn)生用于輸出的文檔對(duì)象,這也是一個(gè)存儲(chǔ)在磁盤或者網(wǎng)絡(luò)傳輸介質(zhì)的序列化對(duì)象。
          JasperReports的內(nèi)置瀏覽器能直接查看結(jié)果或者以PDF,HTML,XML形式將其導(dǎo)出。

          2、持久化技術(shù)和ORM

          持久化(Persistence),即把數(shù)據(jù)保存到可永久保存的存儲(chǔ)設(shè)備中(如磁盤)。
          持久化的主要應(yīng)用是將內(nèi)存中的數(shù)據(jù)存儲(chǔ)在關(guān)系型的數(shù)據(jù)庫(kù)中,當(dāng)然也可以存儲(chǔ)在磁盤文件中、XML數(shù)據(jù)文件中等。
          ORM即“對(duì)象-關(guān)系型數(shù)據(jù)映射組件。對(duì)于O/R,即Object(對(duì)象)和Relational(關(guān)系型數(shù)據(jù)),表示必須同時(shí)使用面向?qū)ο蠛完P(guān)系型數(shù)據(jù)進(jìn)行開(kāi)發(fā)。
          MVC(Model View Control)中的Model包含了復(fù)雜的業(yè)務(wù)邏輯和數(shù)據(jù)邏輯,以及數(shù)據(jù)存取機(jī)制(如JDBC的連接、SQL生成和Statement創(chuàng)建、還要ResultSet結(jié)果集的讀取等)。將這些復(fù)雜的業(yè)務(wù)邏輯和數(shù)據(jù)邏輯分離,以將系統(tǒng)的緊耦合關(guān)系轉(zhuǎn)化為松耦合關(guān)系(即解耦合),是降低系統(tǒng)耦合度迫切要做的,也是持久化要做的工作。
          MVC模式實(shí)現(xiàn)了架構(gòu)上將表現(xiàn)層和數(shù)據(jù)處理層分離的解耦合,而持久化設(shè)計(jì)則實(shí)現(xiàn)了數(shù)據(jù)處理層內(nèi)部的業(yè)務(wù)邏輯和數(shù)據(jù)邏輯分離的解耦合。
          關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)基本都是以一行行的數(shù)據(jù)進(jìn)行存取的,而程序運(yùn)行卻是一個(gè)個(gè)對(duì)象進(jìn)行處理,而目前大部分?jǐn)?shù)據(jù)庫(kù)驅(qū)動(dòng)技術(shù)(如ADO.NET、JDBC、ODBC等)均是以行集的結(jié)果集一條條進(jìn)行處理的。所以為解決這一困難,就出現(xiàn)ORM這一個(gè)對(duì)象和數(shù)據(jù)之間映射技術(shù)。

          3、在JasperReports中使用Hibernate

          Hibernate是一個(gè)開(kāi)發(fā)源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)。
          Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。

          package src;

          import java.util.HashMap;
          import java.util.List;

          import net.sf.jasperreports.engine.JRException;
          import net.sf.jasperreports.engine.JasperCompileManager;
          import net.sf.jasperreports.engine.JasperFillManager;
          import net.sf.jasperreports.engine.JasperPrint;
          import net.sf.jasperreports.engine.JasperReport;
          import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
          import net.sf.jasperreports.engine.design.JasperDesign;
          import net.sf.jasperreports.engine.xml.JRXmlLoader;
          import net.sf.jasperreports.engine.JasperExportManager;

          import org.hibernate.HibernateException;
          import org.hibernate.MappingException;
          import org.hibernate.Session;
          import org.hibernate.SessionFactory;
          import org.hibernate.cfg.Configuration;

          public class Simple1 {
          public static void main(String args[]){
             String sampleReportFile
          =new String("reports/sampleReport.jrxml");
             
          //Hibernate Result Set Holder.
             List bowlerInfo=null;
             
          try{
              
          //Configure the Hibernate session
              Configuration cfg=new Configuration();
              cfg.addResource(
          "hibernate-mapping.xml");
              SessionFactory sessions
          =cfg.buildSessionFactory();
              
          //Open the Hibernate Session
              Session session=sessions.openSession();
              
          //Returns all SampleData records.
              
          //Simple POJO object.
              bowlerInfo=session.createQuery("from SampleData").list();
              
          //Fill the parameters
              HashMap parameters=new HashMap();
              parameters.put(
          "ReportTitle","Bowling Scores");
              parameters.put(
          "NoOfGames"new Integer(3));
              
          //Load the sample report file from the XML file
              
          //into the JasperDesign object.
              JasperDesign design=JRXmlLoader.load(sampleReportFile);
              
          //Compile the Report in Memory storing it in a JasperReport object
              
          //no .jasper report file is created.
              JasperReport report=new JasperCompileManager().compileReport(design);
              
          //Fill the report using the JRBeanCollectionDataSource passed
              
          //a Hibernate query result set.
              JasperPrint print=JasperFillManager.fillReport(report,parameters,new JRBeanCollectionDataSource(bowlerInfo));
              
          //Export to PDF file.
              JasperExportManager.exportReportToPdfFile(print,"simpleHibernatExample.pdf");
              
          //Close the Hibernate Session.
              session.close();   
             }
          catch(JRException jre){
              jre.printStackTrace();
             }
          catch(MappingException me){
              me.printStackTrace();
             }
          catch(HibernateException he){
              he.printStackTrace();
             }

          }

          }



           

          當(dāng)Hibernate檢索返回集合類型的對(duì)象時(shí),使用JRBeanCollection接口可將數(shù)據(jù)通過(guò)Hibernate的POJO(Plain Old Java Object)實(shí)例映射到報(bào)表域中,使用JRXmlLoader.load(templateName)方法加載報(bào)表模板,最后通過(guò)JasperFillManager方法將數(shù)據(jù)填入模板中。
          本例使用JasperExportManager.exportReportToPdfFile()方法將報(bào)表輸出為PDF格式。JasperReports提供的net.sf.jasperreports.engine.JRExporter接口可以方便的將報(bào)表輸出為PDF、XLS、CSV、RTF、HTML或者XML格式,目前以PDF和EXCEL格式較為通用。

          4、總結(jié)

          在JasperReports中使用了Hibernate以后,如果隨業(yè)務(wù)更換數(shù)據(jù)源的話,只需要更好Hibernate的映射文件,極大提高了代碼的可重用性,同時(shí)由于Hibernate本身對(duì)于查詢的優(yōu)化,也能很好的提高整個(gè)應(yīng)用的效率,盡可能的節(jié)省開(kāi)發(fā)時(shí)間。


          評(píng)論

          # re: JasperReports+iReport在eclipse中的使用  回復(fù)  更多評(píng)論   

          2007-09-07 15:38 by 疑問(wèn)者
          very good!!!

          # re: JasperReports+iReport在eclipse中的使用  回復(fù)  更多評(píng)論   

          2008-03-27 04:25 by 你還
          我看看
          主站蜘蛛池模板: 咸宁市| 六枝特区| 洞口县| 阳曲县| 霸州市| 延吉市| 库车县| 黄龙县| 集安市| 双城市| 平凉市| 大关县| 溧阳市| 九龙坡区| 特克斯县| 信阳市| 杂多县| 措美县| 桓仁| 锡林浩特市| 南通市| 高陵县| 栾城县| 泗阳县| 抚宁县| 肥西县| 晴隆县| 子长县| 霍林郭勒市| 中西区| 苗栗县| 阳信县| 绍兴市| 青州市| 洛南县| 石台县| 菏泽市| 昭平县| 天祝| 沁水县| 永城市|