win7系統(tǒng)下載
當(dāng)前位置: 首頁(yè) > 編程軟件教程 > 詳細(xì)頁(yè)面

【JasperReport下載】JasperReport報(bào)表生成工具 v6.7.0 綠色中文版

【JasperReport下載】JasperReport報(bào)表生成工具 v6.7.0 綠色中文版
  • 軟件類型:編程軟件
  • 軟件語(yǔ)言:簡(jiǎn)體中文
  • 授權(quán)方式:免費(fèi)軟件
  • 更新時(shí)間:2024-11-30
  • 閱讀次數(shù):
  • 推薦星級(jí):
  • 運(yùn)行環(huán)境:WinXP,Win7,Win10,Win11
軟件介紹
分享到: 0

軟件介紹

JasperReport是一款免費(fèi)開(kāi)源的報(bào)表生成工具,我們可以通過(guò)這款軟件來(lái)制作各種復(fù)雜的報(bào)表。而且JasperReport中文版還能夠?qū)⒅谱骱玫膱?bào)表文件轉(zhuǎn)換成PDF,HTML,或者XML格式。這款軟件是JAVA設(shè)計(jì)人員經(jīng)常會(huì)使用到的重要工具之一。

JasperReport下載

JasperReport軟件簡(jiǎn)介

JasperReport是一個(gè)強(qiáng)大、靈活的報(bào)表生成工具,能夠展示豐富的頁(yè)面內(nèi)容,并將之轉(zhuǎn)換成PDF,HTML,或者XML格式。該庫(kù)完全由Java寫(xiě)成,可以用于在各種Java應(yīng)用程序,包括J2EE,Web應(yīng)用程序中生成動(dòng)態(tài)內(nèi)容。

Jasperreport是開(kāi)源的,這給我們帶來(lái)很大方便,但文檔收費(fèi),可以理解。

它還有一個(gè)相關(guān)的開(kāi)源工程IReport。

IReport是一個(gè)圖形化的輔助工具,能彌補(bǔ)JasperReport的缺陷:JasperReport僅提供了可使用的類庫(kù),而未提供更好的開(kāi)發(fā)工具。它們配合使用將會(huì)更大程度的提高效率。

【JasperReport下載】JasperReport報(bào)表生成工具 v6.7.0 綠色中文版-本站

JasperReport基本架構(gòu)

JasperReport借由定義于XML文檔中的report design進(jìn)行數(shù)據(jù)組織。

這些數(shù)據(jù)可能來(lái)自不同的數(shù)據(jù)源,包括關(guān)系型數(shù)據(jù)庫(kù),collections,java對(duì)象數(shù)組。

通過(guò)實(shí)現(xiàn)簡(jiǎn)單接口,用戶可以將report library插入到訂制好的數(shù)據(jù)源中。

JasperReports的報(bào)告模板可以以iReport之類的工具來(lái)制作,只要把報(bào)告儲(chǔ)存成XML格式,就可以讓JasperReport閱讀,然后再編譯成為.jasper檔。

JasperReports是世界上最流行的開(kāi)源報(bào)告引擎。它是完全用Java編寫(xiě)的,它是能夠使用的數(shù)據(jù)來(lái)自任何類型的數(shù)據(jù)源,并生成像素級(jí)的文檔,可以查看、打印或?qū)С鲈诙喾N文檔格式,包括HTML、PDF、excel、Openoffice和doc。

JasperReport使用方法

第一步:XML解析

JasperReport使用SAX2.0 API對(duì)XML文件進(jìn)行解析。然而,這并不是必須的,用戶可以在執(zhí)行其自行決定使用哪一種XML解析器。

JasperReport使用org.xml.sax.helpers.XMLReaderFactory類的createXMLReader()來(lái)獲得解析器實(shí)例。在這種情況下,就像在SAX2.0文檔中說(shuō)的那樣,在運(yùn)行期,把Java系統(tǒng)屬性org.xml.sax.driver(這是屬性的key)的值(value)設(shè)定為SAX driver類的全限定名是必要的。用戶可以通過(guò)兩種方法做到這一點(diǎn),我稍后將解釋全部?jī)煞N方法。如果你想使用不同的SAX2.0XML解析器,你需要指定相應(yīng)的解析器類的名字。

設(shè)置系統(tǒng)屬性的第一種方法是在你啟動(dòng)Java虛擬機(jī)的時(shí)候,在命令行使用-D開(kāi)關(guān):java ?Dorg.xml.sax.driver=org.apache.serces.parsers.SAXParser mySAXApp sample.xml

在JasperReport提供的所有例子中,都采用ANT構(gòu)建工具來(lái)執(zhí)行不同的任務(wù)。我們通過(guò)使用內(nèi)置的 task中的元素來(lái)提供這一系統(tǒng)屬性:

第二種設(shè)置系統(tǒng)屬性的方法是使用java.lang.System.setProperty(String key, String value)

System.setProperty(“org.xml.sax.driver”,” org.apache.xerces.parsers.SAXParser”);

Jsp/compile.jsp和web-inf/class/servlets/CompileServlet.java文件提供了這方面的例子。

注:對(duì)于第二種方法,我要說(shuō)些題外話。有關(guān)于JVM的系統(tǒng)屬性(我們可以通過(guò)System.out.println(System.getProperty(“PropertyKey”)來(lái)查看),可以在運(yùn)行期像上面說(shuō)所得那樣用System.setProperty(“propertyKey”,”propertyValue”);來(lái)進(jìn)行設(shè)置。但是一旦JVM已經(jīng)啟動(dòng)之后,其內(nèi)建的系統(tǒng)屬性,如user.dir,就不能再被更改。奇怪的是我們?nèi)钥梢杂肧ystem.setProperty()方法對(duì)其進(jìn)行設(shè)置,而在用System.out.println(System.getProperty())方法進(jìn)行查看的時(shí)候發(fā)現(xiàn),其值已經(jīng)更改為我們?cè)O(shè)置的值,但事實(shí)上我們?cè)O(shè)置的值不會(huì)起任何作用。所以對(duì)于內(nèi)置的屬性,我們只能通過(guò)-D開(kāi)關(guān)在JVM執(zhí)行之前進(jìn)行設(shè)置。對(duì)于org.xml.sax.driver,由于它不是系統(tǒng)內(nèi)建屬性,所以仍然可以在JVM啟動(dòng)之后加以設(shè)置。更詳細(xì)的信息可以參考王森的〈Java深度歷險(xiǎn)〉。

第二步:編譯報(bào)表設(shè)計(jì)(Report Designs)

為了生成一個(gè)報(bào)表,用戶需要首先生成報(bào)表的設(shè)計(jì)(report’s design),生成方法或采用直接編輯XML文件,或通過(guò)程序生成一個(gè)net.sf.jasper.engine.design.JasperDesign對(duì)象。本文中,我將主要采用編輯XML文件的方法,因?yàn)檫@種方法在目前是使用JasperReport類庫(kù)的最好的方法,并且我們有機(jī)會(huì)更好的了解類庫(kù)的行為。

先前提到過(guò),XML報(bào)表設(shè)計(jì)是JasperReport用來(lái)生成報(bào)表的初級(jí)材料(raw meterial)。這是因?yàn)閄ML中的內(nèi)容需要被編譯并載入到JasperDesign對(duì)象中,這些對(duì)象將在報(bào)表引擎向其中填入數(shù)據(jù)之前經(jīng)過(guò)編譯過(guò)程。

注意:大多數(shù)時(shí)候,報(bào)表的編譯被劃歸為開(kāi)發(fā)時(shí)期的工作。你需要編譯你的應(yīng)用程序報(bào)表設(shè)計(jì),就像你編譯你的Java源文件一樣。在部署的時(shí)候,你必須將編譯好的報(bào)表,連同應(yīng)用程序一起安裝到要部署的平臺(tái)上去。這是因?yàn)樵诖蠖鄶?shù)情況下報(bào)表設(shè)計(jì)都是靜態(tài)的,很少用應(yīng)用程序需要提供給用戶在執(zhí)行期編譯的,需要?jiǎng)討B(tài)生成的報(bào)表。

報(bào)表編譯過(guò)程的主要目的是生成并裝載含有所有報(bào)表表達(dá)式(report expression)的類的字節(jié)碼。這個(gè)動(dòng)態(tài)生成的類將會(huì)被用來(lái)在裝填數(shù)據(jù),并給所有報(bào)表表達(dá)式求值(evaluate)的時(shí)候使用。具體例子是,如果你用IReport生成一個(gè)報(bào)表名字叫SimpleSheetTest,它的XML設(shè)計(jì)文件名叫SimpleSheetTest.jrxml,同時(shí)和它在同一目錄下IReport會(huì)自動(dòng)生成一個(gè)文件名為SimpleSheetTest.java,里面主要是一些報(bào)表元素,如Field,Parameters,Variables的定義,以及一些求值表達(dá)式。當(dāng)然,像上面提到的,這個(gè)文件在你直接使用JasperReport API的時(shí)候是看不到的,因?yàn)樗窃趫?zhí)行期生成的一個(gè)Class。要想看到它的辦法是:在IDE(JBuilder,Eclipse)中單步執(zhí)行程序,在報(bào)表打印的階段,你將能跟蹤到這個(gè)類,它的名字就是“你的報(bào)表名.java”,按上面的例子就是SimpleSheetTest.java,這和IReport是一致的。當(dāng)然也可以像下面說(shuō)的那樣,到生成這個(gè)類的臨時(shí)目錄里找到它。

在這個(gè)類生成過(guò)程之前,JasperReport引擎需要驗(yàn)證報(bào)表設(shè)計(jì)的一致性(consistency),哪怕存在一處驗(yàn)證檢查失敗都不會(huì)繼續(xù)運(yùn)行下面的工作。在下面的章節(jié),我將會(huì)展示報(bào)表設(shè)計(jì)驗(yàn)證成功之后的狀況。

對(duì)于這個(gè)包含了所有報(bào)表表達(dá)式(report expressions)的類的字節(jié)碼,我們至少需要關(guān)心三個(gè)方面的內(nèi)容:

臨時(shí)工作目錄(temporary workingl directory)

Java編譯器的使用:

Classpath:

為了能夠編譯Java源文件,這個(gè)文件必須被創(chuàng)建并且被保存到磁盤(pán)上。Java編譯過(guò)程的輸出是一個(gè).class文件,這個(gè)包含所有報(bào)表表達(dá)式的類在這個(gè)工作目錄里被創(chuàng)建并編譯,這也是為什么JasperReport需要訪問(wèn)這個(gè)臨時(shí)目錄的原因。當(dāng)報(bào)表的編譯過(guò)程結(jié)束之后,這些臨時(shí)的類文件將被自動(dòng)刪除,而生成的字節(jié)碼將保存在net.sf.jasper.engine.JasperReport對(duì)象中。如果需要的話,這個(gè)類可以將自己序列化(serialized itself)并保存到磁盤(pán)上。這就是IReport的做法。

缺省情況下,這個(gè)臨時(shí)工作目錄就是啟動(dòng)JVM時(shí)的當(dāng)前目錄,這卻取決于JVM的系統(tǒng)屬性u(píng)ser.dir。通過(guò)更改系統(tǒng)屬性jasper.report.compile.temp,用戶可以很容易更改這個(gè)工作目錄。在Web環(huán)境下,特別是當(dāng)你不想讓含有啟動(dòng)Web Server的批處理文件的目錄和報(bào)表編譯過(guò)程的臨時(shí)工作目錄混在一起的時(shí)候,修改這個(gè)屬性就可以了。

上面提到的第二個(gè)方面涉及用來(lái)編譯報(bào)表表達(dá)式類的Java編譯器。首先,報(bào)表引擎將試圖使用sun.tools.javac.Main類來(lái)編譯Java源文件。這個(gè)類包含在tools.jar中,當(dāng)且僅當(dāng)這個(gè)jar文件在JDK安裝目錄下的bin/目錄中,或在classpath中時(shí),sun.tools.javac.Main才能正常使用。

如果JasperReport不能成功裝載sun.tools.javac.Main文件,程序?qū)?dòng)態(tài)執(zhí)行java編譯過(guò)程,就像我們通常用命令行那樣,使用JDK安裝目錄下的bin/目錄下的javac.exe。這就是為什么將JDK安裝目錄/lib/下的tools.jar文件copy到JasperReport工程的lib/目錄下是一個(gè)可選的操作(optional operation)。如果tools.jar不在classpath中,JasperReport將顯示錯(cuò)誤信息并繼續(xù)上面提到的操作。

當(dāng)編譯Java源文件的時(shí)候,最重要的事情莫過(guò)于classpath。如果Java編譯器不能在指定的classpath中找到它試圖編譯的所有相關(guān)類的源文件,則整個(gè)過(guò)程將失敗并停止,錯(cuò)誤信息將在控制臺(tái)顯示出來(lái)。同樣的事情也將發(fā)生在JasperReport試圖編譯報(bào)表表達(dá)式類的時(shí)候。所以,在runtime為編譯過(guò)程提供正確的classpath是非常重要的。例如,我們我們需要確認(rèn)在classpath中,我們提供了在報(bào)表表達(dá)式中可能用到的類(custom class)。

在這個(gè)方面也有一個(gè)缺省的行為。如果沒(méi)有為編譯report class特殊指定classpath,引擎將會(huì)使用系統(tǒng)屬性java.class.path的值來(lái)確定當(dāng)前的JVM classpath。如果你指定了系統(tǒng)屬性jasper.reports.compile.class.path的值,你可以用你定義的classpath來(lái)覆蓋缺省行為。

大多數(shù)情況下,編譯一個(gè)report只需要簡(jiǎn)單的調(diào)用JasperReport類庫(kù)中的JasperCompileManager.compileReport(myXmlFileName);即可。調(diào)用之后將生成編譯好的report design并存儲(chǔ)在.jasper文件中,這個(gè)文件將會(huì)保存在和提供XML report design文件相同的目錄中。

第三步:Report Design 預(yù)覽

JasperReport類庫(kù)并沒(méi)有提供高級(jí)的GUI工具來(lái)輔助進(jìn)行設(shè)計(jì)工作。然而,JasperReport本身提供了一個(gè)很有用的可視化組件來(lái)幫助報(bào)表設(shè)計(jì)者在編譯的時(shí)候預(yù)覽報(bào)表設(shè)計(jì)(其實(shí)不如直接用IReport方便)。

net.sf.jasper.view.JasperDesigner是一個(gè)基于Swing的Java應(yīng)用程序,它可以載入并顯示XML形式或編譯后的報(bào)表設(shè)計(jì)。盡管它不是一個(gè)復(fù)雜的GUI應(yīng)用程序,缺乏像拖拽可視化報(bào)表元素這樣的高級(jí)功能,但是它仍然是一個(gè)有用的工具(instrument)。所有JasperReport工程提供的例子都利用了這個(gè)報(bào)表查看器(report viewer)。

如果你已經(jīng)安裝了ANT(別告訴我你不知道什么是ANT),想要查看一個(gè)簡(jiǎn)單的報(bào)表設(shè)計(jì)(JasperReport工程所帶例子),你只需要到相應(yīng)的文件夾下輸入如下命令:

〉ant viewDesignXML 或者 〉ant viewDesign

如果你沒(méi)安裝ANT,要達(dá)到上面的效果就不是很容易,因?yàn)镴asperReport本身需要一些其他輔助的jar包(在JasperReport安裝目錄/lib下),在運(yùn)行的時(shí)候,你需要把這些jar包都包含到你的classpath里面,并且正確設(shè)計(jì)系統(tǒng)屬性,如上面提到的org.xml.sax.driver。我可以展示一下在windows下的例子:

>java -classpath ./;../../../lib/commons-digester.jar;

../../../lib/commons-beanutils.jar;../../../lib/commons-collections.jar;

../../../lib/xerces.jar;../../../lib/jasperreports.jar

-Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser

dori.jasper.view.JasperDesignViewer -XML -FFirstJasper.xml

很麻煩吧?還是趕快弄個(gè)ANT吧。下面是預(yù)覽之后的結(jié)果(其實(shí)用IReport更好)

第四步:報(bào)表裝填(Filling Report)

報(bào)表裝填(report filling)過(guò)程是JasperReport library最重要的功能。它體現(xiàn)了這個(gè)軟件最主要的目的(main objective),因?yàn)檫@一過(guò)程可以自由的操作數(shù)據(jù)集(data set),以便可以產(chǎn)生高質(zhì)量的文檔。有3種材料需要裝填過(guò)程中作為輸入提供給JasperReport:

report design(reportl templet)

參數(shù)(parameters)l

數(shù)據(jù)源(datal source)

這一過(guò)程的輸出通常是一個(gè)單一的最終要被查看,打印或?qū)С龅狡渌袷降奈臋n。

要進(jìn)行這一過(guò)程,我們需要采用net.sf.jasper.engine.JasperFillManager類。這個(gè)類提供了一些方法來(lái)讓我們裝填報(bào)表設(shè)計(jì)(report design),report design的來(lái)源可以是本地磁盤(pán),輸入流,或者直接就是一個(gè)已存在于內(nèi)存中的net.sf.jasper.engine.JasperReport類。輸出的產(chǎn)生是于輸入類型相對(duì)應(yīng)的,也就是說(shuō),如果JasperFillManager接到一個(gè)report design的文件名,裝填結(jié)束后生成的report將會(huì)是一個(gè)放在磁盤(pán)上的文件;如果JasperFillManager收到的是一個(gè)輸入流,則生成的report將會(huì)被寫(xiě)道一個(gè)輸出流中。

有些時(shí)候,這些JasperFillManager提供的方法不能滿足某些特定的應(yīng)用的要求,例如可能有人希望他的report design被作為從classpath中得到的資源,并且輸出的報(bào)表作為一個(gè)文件存放在一個(gè)指定的磁盤(pán)目錄下。遇到這種情況時(shí),開(kāi)發(fā)人員需要考慮在將報(bào)表設(shè)計(jì)傳遞給報(bào)表裝填過(guò)程之前,用net.sf.jasper.engine.util.JRLoader類來(lái)裝載report design對(duì)象。這樣,他們就能獲得像報(bào)表名這樣的report design屬性,于是開(kāi)發(fā)者就能生成最終文檔的名字(construct the name of the resulting document),并將它存放到所需的位置上。

在現(xiàn)實(shí)中,有許多報(bào)表裝填的情境(scenarios),而裝填管理器僅試圖覆蓋其中最常被使用到的部分。然而對(duì)于想要自己定制裝填過(guò)程的人來(lái)說(shuō),只要采用上面所說(shuō)的方法,任何開(kāi)發(fā)者都可以達(dá)到滿意的結(jié)果。

報(bào)表參數(shù)通常作為java.util.Map的value提供給裝填管理器,參數(shù)名為其鍵值(key)。

作為裝填過(guò)程所需的第三種資源?數(shù)據(jù)源,有如下兩種情況:

通常,引擎需要處理net.sf.jasper.engine.JRDataSource接口的一個(gè)實(shí)例,通過(guò)這個(gè)實(shí)例,引擎可以在裝填過(guò)程中獲取所需數(shù)據(jù)。JasperFillManager提供的方法支持所有的JRDataSource對(duì)象(這是一個(gè)Interface,上面一章提到過(guò)它的常用實(shí)現(xiàn))。

然而,這個(gè)管理器還提供一些接受java.sql.Connection對(duì)象作為參數(shù)的方法集,來(lái)取代所需的數(shù)據(jù)源對(duì)象。這是因?yàn)樵诤芏嗲闆r下,報(bào)表生成所需的數(shù)據(jù)都來(lái)源于某個(gè)關(guān)系型數(shù)據(jù)庫(kù)中的表(table)。

在報(bào)表中,用戶可以提供SQL查詢語(yǔ)句來(lái)從數(shù)據(jù)庫(kù)中取回報(bào)表數(shù)據(jù)(report data)。在執(zhí)行期,engine唯一需要做的是獲得JDBCconnection對(duì)象,并使用它來(lái)連接想要連接的數(shù)據(jù)庫(kù),執(zhí)行SQL查詢并取回報(bào)表數(shù)據(jù)。在后臺(tái),引擎將使用一個(gè)特殊的JRDataSource對(duì)象,但是它對(duì)于調(diào)用它的程序來(lái)說(shuō)是透明的。

JasperReport工程提供了相關(guān)的例子,它們采用HSQL數(shù)據(jù)庫(kù)服務(wù)器(在工程文件中,有一個(gè)相應(yīng)的文件夾),要運(yùn)行這些例子你需要首先啟動(dòng)該服務(wù)器,方法是:在/demo/hsqldb目錄下輸入如下命令:>ant 或者 >ant runServer

沒(méi)裝ANT就麻煩點(diǎn):>java -classpath ./;../../lib/hsqldb.jar org.hsqldb.Server

一下代碼片斷顯示了query例子是如何裝填數(shù)據(jù)的:

//Preparing parameters

Map parameters = new HashMap();

parameters.put("ReportTitle", "Address Report");

parameters.put("FilterClause", "'Boston', 'Chicago', 'Oslo'");

parameters.put("OrderClause", "City");

//Invoking the filling process

JasperFillManager.fillReportToFile(fileName, parameters, getConnection());

第五步:查看報(bào)表(Viewing Reports)

報(bào)表填充階段的輸出通常是一個(gè)JasperPrint對(duì)象,如果把它保存在磁盤(pán)上,通常以一個(gè).jrprint文件的形式存在。JasperReport擁有一個(gè)內(nèi)置的查看器,用來(lái)查看用內(nèi)置的XML導(dǎo)出器(XML exporter)獲得的XML格式的報(bào)表文件。這個(gè)查看器就是以前提到過(guò)的net.sf.jasper.niew.JRViewer?一個(gè)基于Swing的應(yīng)用程序組件,用戶可以通過(guò)繼承這個(gè)類來(lái)定制自己所需的查看器。JasperReport工程中自帶的例子webapp中,你可以閱讀JRViewerPlus類的代碼來(lái)獲取進(jìn)一步內(nèi)容。

注意:JasperViewer更像是一個(gè)教人們?nèi)绾问褂肑RViewer組件的演示程序,這里要注意一點(diǎn),當(dāng)你調(diào)用JasperViewer的viewReport()方法來(lái)顯示報(bào)表時(shí),如果你關(guān)閉了預(yù)覽Frame,整個(gè)應(yīng)用程序?qū)?huì)隨之結(jié)束,因?yàn)檫@個(gè)函數(shù)最后調(diào)用了System.exit(0);你可以通過(guò)繼承這個(gè)類,并重新在你的Viewer里注冊(cè)java.awt.event.WindowListener來(lái)避免這一情況的發(fā)生。

第六步:打印報(bào)表

JasperReport類庫(kù)的主要目標(biāo),就是生成可打印的文檔。而且多數(shù)應(yīng)用程序生成的報(bào)表都是需要落實(shí)(或打印)到紙張上。我們可以用net.sf.jasper.engine.JasperPrintManager來(lái)打印JasperReport生成的文檔。當(dāng)然,報(bào)表也同樣可以在被導(dǎo)出到其他格式如PDF,HTML之后再被打印。通過(guò)JasperPrintManager提供的方法,我們可以打印整個(gè)文檔,打印單個(gè)文檔或打印某一范圍內(nèi)的文檔,可以顯示打印對(duì)話框也可以不顯示。下面的例子演示了不顯示對(duì)話框,打印整個(gè)文檔的方法:JasperPrintManager.printReport(myReport,false);

這個(gè)例子顯示了如何打印5-11頁(yè)的文檔,同時(shí)顯示打印對(duì)話框:net.sf.jasper.engine.JasperPrintManager.printPages(myReport,4,10,true);

第七步:導(dǎo)出報(bào)表

在一些應(yīng)用程序環(huán)境下,將JasperReport生成的文檔從其特有的格式導(dǎo)出到其他更為流行的格式如PDF,HTML是非常有用的。這樣一來(lái),其他人就可以在沒(méi)有安裝JasperReport的情況下查看這些報(bào)表,特別是當(dāng)這些文檔要通過(guò)網(wǎng)絡(luò)發(fā)送出去的時(shí)候。

JasperReport提供了JasperExportManager類來(lái)支持此項(xiàng)功能。這項(xiàng)功能將會(huì)在以后不斷加入對(duì)新的格式的支持。HTML和XML類型的文檔,下面是導(dǎo)出的代碼片斷:JasperExportManager.exortReportToHtmlFile(myReport);

注意:想要將自己的報(bào)表導(dǎo)出到其他格式的用戶,需要實(shí)現(xiàn)JRExporter的接口,或繼承相應(yīng)的JRAbstractExporter類。

第八步:對(duì)象的載入和保存

當(dāng)使用JasperReport的時(shí)候,你經(jīng)常會(huì)與序列化的對(duì)象,如以編譯的報(bào)表設(shè)計(jì),或已生成的報(bào)表打交道。有時(shí),你需要手動(dòng)載入從不同的source如input stream或你用類庫(kù)核心功能(lib’s core functionality)產(chǎn)生的序列化類。JasperReport提供了兩個(gè)特殊的工具類來(lái)提供上述操作的能力,這些類通常供報(bào)表引擎自己使用:

net.sf.jasper.engine.util.JRLoader

net.sf.jasper.engine.util.JRSaver

第一個(gè)類提供了一些方法讓我們能夠從不同類型的數(shù)據(jù)源如文件,URL,input stream和classpath里面獲取序列化對(duì)象。最令人感興趣的方法是loadObjectFormLocation(String)。它已經(jīng)在上一章中介紹過(guò)了,這里不再贅述。

與上面的對(duì)象載入工具相反的部分是JRSaver類,它可以幫助程序員將自己的類序列化之后存放到本地磁盤(pán)或通過(guò)Output Stream發(fā)送到網(wǎng)絡(luò)上去。

有時(shí),開(kāi)發(fā)人員可能想要載入已經(jīng)生成好的report,或最終的已經(jīng)被導(dǎo)出到XML格式的JasperReport文檔,這與上面所說(shuō)的直接load序列化對(duì)象有所不同。這時(shí),我們需要載入的是將載入的XML內(nèi)容進(jìn)行編譯,并生成JasperPrint對(duì)象,而并非僅僅是載入序列化對(duì)象。這時(shí),我們可以通過(guò)net.sf.jasper.engine.xml.JRPrintXmlLoader類的一些靜態(tài)方法,通過(guò)編譯從XML文件中讀取的內(nèi)容構(gòu)建出一個(gè)位于內(nèi)存中的文檔對(duì)象。


點(diǎn)下面下載:(推薦使用"迅雷"進(jìn)行下載,系統(tǒng)下載大全QQ交流群:)
主站蜘蛛池模板: 91欧美一区二区三区综合在线| 国产精品 综合 第五页| 亚洲色图综合在线| 欧美综合欧美视频| 99久久国产综合精品成人影院| 国产激情综合在线观看| 欧美成电影综合网站色www| 久久婷婷色综合一区二区| 狠狠色丁香久久婷婷综合_中 | 狠狠色狠狠色综合日日不卡| 亚洲国产成人久久综合碰| 国产成+人欧美+综合在线观看| 国产综合第一页| 亚洲狠狠婷婷综合久久蜜芽| 亚洲丁香色婷婷综合欲色啪| 亚洲综合熟女久久久30p| 欧美综合自拍亚洲综合图片区| 久久综合色区| 狠狠色丁香久久婷婷综合图片| 亚洲综合区小说区激情区 | 狠狠亚洲婷婷综合色香五月排名 | 国产欧美日韩综合自拍| 国产成人精品综合在线观看| 99久久国产综合精品五月天喷水 | 狠狠色狠狠色综合日日五| 亚洲综合精品一二三区在线| 国产欧美日韩综合精品一区二区三区| 亚洲狠狠婷婷综合久久久久 | 天天干天天色综合| 欧美日韩亚洲乱国产综合| 伊人久久大香线蕉综合影院首页| HEYZO无码综合国产精品227| 色99久久久久高潮综合影院| 久久久久亚洲AV综合波多野结衣| 亚洲综合av永久无码精品一区二区 | 日韩欧美Aⅴ综合网站发布| 97久久综合精品久久久综合| 亚洲第一综合天堂另类专| 婷婷综合另类小说色区| 天天久久狠狠色综合| 色噜噜狠狠狠综合曰曰曰|