轉載:http://blog.csdn.net/daming924/article/details/7402295java
1、介紹
1)它能夠PDF,HTML,XML等多種形式產生報表或動態報表,在新版本還支持CSV,XLS,RTF等格式的報表;
2)它按預約義的XML文檔來組織數據,來源多(如:關係數據庫,Java容器對象(collection,arrays)等);
報表的填充過程:
先產生報表設計對象->序列化該對象->存儲在磁盤或網絡->產生XML文件(表格數據)。
表單的設計過程就是用定義於XML文件中的Java表達式來實現報表的設計。
3)它帶數據一致性驗證;
4)報表引擎必須先接受數據(經過參數等多種形式)來產生報表,更多的是來自數據源,引擎直接接收用於填充表格的數據源對象,或者經過自身提供的JDBC鏈接對象來處理數據庫的數據;
5)報表最終要產生一個新的對象來進行填充操做,從而產生打印文檔對象,這也是存儲在磁盤或網絡傳輸介質的序列化對象;
6)內置瀏覽器能直接查看結果,以PDF,HTML,XML導出;
7)重要的類:
net.sf.jasperreports.engine.design.JasperDesign
其實例是用於報表產生的原始類;
net.sf.jasperreports.engine.design.JasperReport
表現了報表設計對象,是做爲報表的編譯過程的結果而被實例化,是向報表中填充數據的準備。程序員
2、結構
JasperReports用XML文件來定義,約定用jrxml做爲文件的後綴名。
1)主要元素:
<jasperReport> 根元素
<title> 報表的標題
<pageHeader> 頁眉
<detail> 正文
<pageFooter> 頁腳
<band> 定義報表部件,以上全部元素都包含一個band元素做爲其惟一子元素。
除了根元素,其他元素是可選的。
2)其編輯工具iReport在Eclipse3.2下的安裝過程
菜單「幫助」->「軟件更新」->「查找並安裝」->「搜索要安裝的新功能部件」--(下一步)-->「新建遠程站點」,輸入如下內容:
名稱:JasperForge
URL:http://www.jasperassistant.com/updates/3.x/
--(肯定)-->「下一步」-->直至完成。
3)以JasperReports1.3.0版本爲例,一個JasperReports項目須要以下jar包:
包名 說明
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
3、iReport介紹
1)iReport是爲JasperReports設計的強大的,直觀的,易於使用的可視化報表設計器,爲win32平臺編寫。容許用戶可視化地編輯XML JasperDesign文件,能夠和其它數據庫進行JDBC通訊。
再設計模板時能夠以HTML,PDF,XML方式預覽,用它生成的文件有.jrxml和.jasper兩種文件。
.jrxml:是可視化編輯的xml文件;
.jasper:經編譯後生成的類文件,即報表模板文件。
2)iReport的輸出格式
其預覽輸出格式有:PDF,HTML,CSV。JAVA2D,EXCEL,純文本,JRView。
注意:JRViewer是直接以C/S方式做爲報表的輸出格式,在JFrame框架下輸出。
3)報表的動態對象變量、參數、字段
字段Fields:是從數據庫抽取出來的,在報表中出現的數據庫內容。$F
參數Parameters:你寫的應用須要提供給報表的入口。 $P
變量Variables:報表中一些邏輯運算的表現。 $V
每一個對象的定義格式以下: $V{variablesName}
4)運行時須要.jasper文件;編譯:把.jrxml->.jasper文件。
靜態運行:靜態文原本運行,和數據源無關;
動態運行:帶數據源運行。
5)報表的結構
title、pageHeader、columnHeader、detail、columnFooter、pageFooter、summary、groupHeader、groupfooter。
6)在iReport中建立數據庫鏈接
(1)菜單DourceSource -> Connections/DataSources -> ...new ->
(2)菜單Build -> Set active connection -> 選擇 -> ... -> OK
7)在iReport中建立文件
iReport工具是一個可視編輯器幫助建立JasperReports文件。JasperReports是一個基於Java報表的引擎。
當你在iReport中建立一個報表,你其實是對配置文件進行操做,告訴JasperReports應該怎樣創建Report。
三種文件:
.jasper文件:編譯的二進制文件;
.jrxml文件:報表的配置文件;
.pdf文件:生成的pdf文件。
8)報表格式化
在iReport上選擇報表的一個區域,將呈現藍色高亮顯示;
可用鼠標拖曳來改變區域的尺寸,當誤操做時,用undo來恢復;
如選擇框變紅,則有錯誤,report將不能編譯;
改變字體或調整尺寸,菜單「View」->「Element properties」->分三個選擇:
(1)Common選擇:尺寸,前景色/背景色,透明度,打印條件,位置屬性等;
(2)Font選擇:字體、大小、類型,PDF字體,加粗,斜體,下劃線,水平位置,垂直位置,PDF編碼。
注意:兩種字體:
Font Name:將顯示在iReport設計器和JasperReports運行中;
PDF font Name:將顯示在編譯後的PDF文件中。
(3)Static Text:靜態文本。
想瀏覽元素時,看「View」->「Elements browser」;
一次選擇多個域,按「shift」鍵再用鼠標點擊;
菜單「View」->「Report Properties」報表屬性:
報表尺寸,單位,頁邊距,報表名,縱向Portrait/橫向Landscape,列寬,Spacing,標題做爲新頁,Summary做爲新頁,XML編碼(UTF-8)。
9)使用Groups
菜單「View」->「Report query」 能夠查詢和修改SQL語句。
10)爲report增長參數
(1)菜單「View」->「Report Query」,修改SQL語句,如:加上 WHERE LAST_NAME=$P{LAST_NAME}
注意:參數用$P{}來封裝。
(2)定義參數
菜單「View」->「Reports Parameters」
新建參數,如參數名爲「LAST_NAME」,再指定參數的類型(如:String)
還可設定「缺省值」和參數的「描述」
運行報表(缺省),還能夠傳遞參數方式:http://server/showReport?LAST_NAME=smith
菜單「Build」->「Execute report(using active conn.)」
11)建立子報表
例子:一個報表包含另外一個報表
(1)創建兩個報表;
(2)擴展master報表,增長一個subreport元素;
(3)雙擊subreport元素,設置其屬性。在Subreport(other)欄中,
Subreport Expression填入「c:\test2.jasper」(第二個表即子表的文件名),點擊「Add」,增長/修改:「Subreport parameter name」和Default value expression值;(COUNTRY $F{COUNTRY})
(4)對子表「Report query」->添加'where COUNTRY=${COUNTRY}'
(5)增長「Report parameters」,(COUNTRY,java.lang.String)
(6)編譯detail report;
(7)運行master report。
iReport支持Groovy腳本語言,可無需懂Java。數據庫
一、配置XML文件
jasperreports的XML配置文件局域jasperreport.dtd文件而來。
1)根元素jasperReport
其子元素有:報告的字體reportFont,參數parameter,查詢字符串queryString,字段field,變量variable,組group,標題title,頁眉pageHeader,列眉columnHeader,代表細detail,列腳columnFooter,頁腳pageFooter。
屬性有:列寬columnWidth,列間距columnSpacing,左邊距leftMargin,頂邊距topMargin,底邊距bottomMargin。
2)報表層字體含義reportFonts
無子元素;
屬性有:名字name,是否缺省isFault,字體名fontName,字體大小size,是否粗體isBold,是否斜體isItalic,是否帶下劃線isUnderline,isStrikeThrough,PDF字體名pdfFontName,PDF編碼pdfEncoding,是否嵌入PDF(isPdfEmbedded)。
3)用於產生報表的對象參數parameter。引用P${name}
其子元素有:ParameterDescription,defaultValueExpression
屬性有:name,class
4)從數據庫檢索數據的查詢SQL語句 queryString
5)包含於report中的數據庫表列字段 field。 引用F${name}
其子元素有:variableExpression,initialValueExpression
屬性有:name,class
6)用在XML文件中的變量 Variable 引用V${name}
其子元素有:variableExpression,initialValueExpression
屬性有:name,class
7)報表標題 title
其子元素有:band
無屬性
8)頁眉 pageHeader
其子元素有:band
無屬性
9)報表的列名 columnHeader
其子元素有:band
無屬性
10)指定的列值detail
其子元素有:band
無屬性
11)列尾columnFooter
其子元素有:band
無屬性
12)頁腳pageFooter
其子元素有:band
無屬性
注:在report中,一個band表示一個report節點。一個band元素包括:staticText(靜態文本)和textElement(文本元素)兩個元素。
常見報表模型:列表、分組、主從、嵌套、交叉、圖形、套打、分欄、填報。
二、建立報表
1)創建輸入源
InputStream input = new FileInputStream(new File("c:\\JasperReports\\catalog.xml"));
JasperDesign design=JRXmlLoader.load(Input);
2)建立對象
JasperReport report = JasperCompileManager.compileReport(design);
3)得到JDBC鏈接從數據庫檢索數據
InitialContext initialContext = new InitialContext();
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/OracleDBConnectionDS");
Connection conn = ds.getConnection();
4)產生可預覽、打印、輸出爲其它格式的JasperPrint文件
JasperPrint print = JasperFillManager.fillReport(report, parameters, conn);
5)參數處理
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);
三、JasperReports的安裝配置
1)JDK的安裝,注意JAVA_HOME環境變量;
2)要支持中文,需itext-1.3.1.jar和iTextAsian.jar包,加入CLASSPATH環境變量中;
3)安裝iReport,用iReport-1.3.0-windows-installer.exe安裝;
4)JasperReport不需任何配置,將其jar包(jasperreports-1.3.0.jar)放入CLASSPATH;
5)數據庫的JDBC驅動包,例如Sybase的驅動包爲jconn6.jar,加入到CLASSPATH。
四、iReport的安裝配置
iReport若是不用其安裝文件iReport-1.3.0-windows-installer.exe安裝,則須要配置。
iReport需Sun公司的JDK下的tools.jar,需拷貝到iReport的lib目錄下。
iReport初始化配置的組成:
(1)創建報表;
(2)選擇語言;
(3)加入到CLASSPATH。express
4、Report Structure 報告的結構
本章描述報告的結構,可用的report對象和它們的屬性。這基本上是JasperReports的快速參考。
一、Expressions 表達式
表達式是JasperReports的核心特徵。它是一個重要的機制,容許操縱和顯示報告數據,執行各類計算,自定義報告的外觀和報告對象的可視性。
1)一個典型的表達式
$F{LastName} + " " + $F{LastName}
一個JasperReports的表達式是以Java表達式爲基礎的,再加上一些附加的語法,它容許引用參數、變量和字段等。
好比說要引用一個名叫DATA的參數時,語法應爲$P{PARAM_NAME}。
對變量和字段來講,其引用語法分別爲$V{VAR_NAME}和$F{FIELD_NAME}。
注意:在JasperReports的groovy腳本語言中,也一樣能夠用$F,$P,$V引用參數、變量和字段。
2)表達式的語法
(1)$F{FIELD} 引用名爲FIELD的字段;
(2)$V{VAR} 引用名爲VAR的變量;
(3)$P{PARAM} 引用名爲PARAM的參數;
(4)$P!{PARAM} 引用名爲PARAM的參數;這個特殊的語法僅能用於report的查詢中。它容許插入參數的內容到查詢字符串中。例如,它能被用於建立一個帶經過參數來指定WHERE條件的動態查詢。
$R{keyName} 在resource bundle中檢索帶keyName關鍵字的字符串。
注意:表達式是用Java或Groovy寫成的,這意外着能夠用Java強大的功能,如調用方法,容許構建無限複雜的表達式。還要注意,表達式的結果老是一個對象。
3)更多的表達式
(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}
二、內建的函數
JasperReports提供了一套內建的函數用於report表達式中。這些函數儘管是內建的工具,仍是能夠在普通操做中執行它。
注意:目前這套函數頗有限,在將來會獲得擴展。
1)例:使用內建函數
msg("Total cost is {0}", $F{TOTAL})
msg("Matched {0} products out of {1}", $F{MATCHED}, $P{TOTAL})
2)內建的函數
(1)String str(String key);
從和report相聯繫的resource bundle中獲得給出的key的一個字符串。這個函數的功能和使用$R{key}語法等價。
(2)String msg(String pattern, Object arg0);
創建一個帶給定的pattern和給定參數來指定其格式的java.util.MessageFormat對象。
(3)String msg(String pattern, Object arg0, Object arg1);
同上;
(4)String msg(String pattern, Object arg0, Object arg1, Object arg2);
同上。
三、Report 報告
Report是表現爲報告模板的根對象。在報告執行期間,report模板和數據組合成最終的文檔。
報告的屬性有:
(1)Report Name 報告名;
(2)Units 報告的單位;有:像素Pixels,毫米Millimeters,釐米Centimeters和英寸Inches。
(3)Language 報告表達式使用的語言;目前有Java和Groovy兩種。
(4)Orientation 頁的方向;其可能值爲水平Protrait和縱向Landscape。
(5)Page Width 以報告單位指定的頁寬;
(6)Page Height 以報告單位指定的頁高;
(7)Page Size 報告的尺寸,即爲page width和page height。
(8)Left Margin 以報告單位指定的左邊頁邊距;
(9)Right Margin 以報告單位指定的右邊頁邊距;
(10)Top Margin 以報告單位指定的頂部頁邊距;
(11)Bottom Margin 以報告單位指定的底部頁邊距;
(12)Column Count 報告中的列數;
(13)Column Spacing 以報告單位指定的列邊距;
(14)Column Width 以報告單位指定的列寬;
(15)Print Order 填充列的順序;有垂直Vertical和水平Horizontal兩種。
(16)Float Column Footer 浮動列腳,指出是否在列底部或明細表最後或組腳進行打印;
(17)Default Font 缺省字體;
(18)Default Style 缺省風格;
(19)Scriptlet Class 腳本類,它必須是JRAbstractScriptlet類的子類。若是省略,將建立一個JRDefaultScriptlet的實例。
(20)Summary New Page 新頁的概要;
(21)Title New Page 新頁的標題;
(22)When No Data Print 無數據時的打印,有三個選擇:No Pages 表示0頁;Blank Page 空白頁;All Sections No Detail 除了detail section,其它的都打印。
(23)Query 查詢,用來檢索數據到報告中。
(24)Query Language 查詢語言,有五個值:SQL 用於JDBC數據源的查詢語言;HBM Hibernate用於Hibernate數據源的查詢語言;XPath 用於XML數據源的查詢語言;EJBQL用於支持Java持久層(Persistence)API的數據源的查詢語言;MDX 用於Mondrian數據源的查詢語言。
(25)Imports java輸入的列表,例如:java.util.*和java.text.SimpleDateFormat格式。用於簡化report的表達式。
(26)Resource Bundle 爲report提供了本地的系列字符串。在報告中,本地字符串能用$R{key}引用。
(27)When Resource Missing Print 容許自定義引擎在resource bundle中處理丟失的resource。有4種選擇:Null 丟失的resource不打印;Empty 丟失的resource爲空;Key 用$R{key}指定的key來打印; Error 用錯誤來中斷報告的執行。
四、Styles 風格
一個report能夠定義大量的風格。一旦定義了,它們能和report對象聯繫起來,爲了給各類可視視圖提供基本的配置。report容許用模塊化的方式來定義模塊的風格。
風格有相關聯的條件風格。條件風格容許當其表達式爲真時改變風格。
1)風格的屬性有:
(1)Name 風格名;
(2)Parent Style 父風格;
(3)Foreground 前景色;
(4)Background 背景色;
(5)Mode 方式,決定是否帶透明度;
(6)Pen 畫筆 有6種選擇:None 無線;1 Point 正常寬度的線;2 Point 中等寬度的線;4 Point 粗線;Dotted 虛線;Thin 細線。
(7)Fill 填充;決定對對象進行填充的模式;
(8)Box 指定盒子的屬性,如邊框類型,邊框顏色,是否填充。
(9)Horizontal Alignment 水平排列;有3種選擇:Left 左;Center 中;Right 右。
(10)Vertical Alignment 垂直排列;有3種選擇:Top 頂;Middle 中;Bottom 底。
(11)Scale 比例;指定圖像的比例,有3種選擇:Clip 尺寸不適合時,多餘部分省略;Fill Frame 圖像按比例填充進Image對象中;Retain Shape 保留原形狀進行填充。
(12)Radius 指定矩形邊框倒角的弧度;
(13)Pattern 用Text Field表達式的值來指定樣式;其日期類型的值用java.text.SimpleDataFormat類來定義;其數值型的值用java.text.DecimalFormat來定義。
(14)Blank When Null 當Text Field表達式的值爲null時顯示空白;
(15)Line Spacing 線距;有3種選擇:Single:單倍線距;1 and 1/2:1.5倍線距;Double:雙倍線距。
(16)Rotation 旋轉;有3種選擇:None 不旋轉;Left 左旋180度;Right 右旋180度。
(17)Styled Text 是一個標誌位,用來指定是否text對象包含了已定義風格或規則的text。
(18)Font Name 字體名;
(19)Font Size 字體的尺寸;
(20)Bold 粗體;
(21)Italic 斜體;
(22)Underline 下劃線;
(23)Strike Through 經過標準位來取消;
(24)PDF Font Name:PDF字體名;
(25)PDF Encoding:PDF編碼;
(26)PDF Embedded是一個標誌位,指定是否PDF字體應該嵌入到文檔中。
2)條件風格的屬性:
和上面僅有一點點的不一樣。其不一樣的屬性爲:
Condition Expression 條件表達式;是一個布爾型的表達式,用於判斷是否應用條件表達式。
五、Section Properties 節屬性
Section的種類前面已經講了,這裏只是補充講述它的屬性:
(1)Height 以報告的單位指定的section的高度;
(2)Print When Expression 是一個布爾表達式,決定是否打印本Section;
(3)Split Allowed 一個標誌位,指示當Section超過當前頁面的尺寸時,是否容許分割它。若是爲真,當前Section將遷移到下一頁。注意:若是Section在下一頁也不適合時,則無論標誌位值如何,都會分割它。
六、Groups 組
一個report能夠定義大量的組。組表示決定帶相關數據的可視組的表達式名。一旦聲明後,組能在報告任意地方使用。
一個數據組用一個表達式組來識別。
注意:組機制不能完成來自於數據源數據的任何排序。若是想要有序的數據,必須把數據源的數據進行先排序處理。
組屬性:
(1)Name 組名;用於引用組。
(2)Expression 表達式;決定report數據的組;
(3)Min Height To Start New Page 開始新頁的最小高度;
(4)Reprint Header On Each Page 一個標誌位,指示在每一頁的開始處是否從新打印組頭;
(5)Reset Page Number 重設頁數,一個標誌位;在組頭在新頁開始處打印時,是否從新設置頁數;
(6)Start New Column 一個標誌位,是否在新列中老是打印組頭;
(7)Start New Page 一個標誌位,是否在新頁中老是打印組頭;編程
報表工具之JasperReports+iReport(5)windows
5、JasperReports做爲一種開源的報表庫爲應用提供了強大的支持。其易用性和靈活性爲系統的開發提供了極大的便利。
在報表生成過程當中,使用JDBC等傳統數據源操做方法獲取數據的過程會消耗大量的系統時間,這樣就須要利用其它手段來簡化數據源操做。
在這種狀況下,適當的使用ORM(Object/Relational Mapping)技術,可以很好的解決這個問題,對於系統性能的提高有很大的幫助。
一、JasperReports填充報表
要完成報表的填充,必須先完成用於報表的xml模板,其過程是先產生報表佈局對象,再序列號該對象,存儲在磁盤或者網絡,用於產生特定應用的表格數據。
實際上,表單的設計過程就是用定義於xml文件中的java表達式來表現報表的佈局。
編輯過程當中會有各類保證數據一致性的驗證,最終會產生相關數據的文檔。
報表引擎必須先接受數據來產生報表,這些數據通常來源於各類數據源,報表引擎能直接接收用於填充表格的數據源對象,或者經過自身提供的JDBC鏈接對象來處理數據庫的數據。
報表最終要產生一個新的對象來進行填充操做從而產生用於輸出的文檔對象,這也是一個存儲在磁盤或者網絡傳輸介質的序列化對象。
JasperReports的內置瀏覽器能直接查看結果或者以PDF,HTML,XML形式將其導出。
二、持久化技術和ORM
持久化(Persistence),即把數據保存到可永久保存的存儲設備中(如磁盤)。
持久化的主要應用是將內存中的數據存儲在關係型的數據庫中,固然也能夠存儲在磁盤文件中、XML數據文件中等。
ORM即「對象-關係型數據映射組件。對於O/R,即Object(對象)和Relational(關係型數據),表示必須同時使用面向對象和關係型數據進行開發。
MVC(Model View Control)中的Model包含了複雜的業務邏輯和數據邏輯,以及數據存取機制(如JDBC的鏈接、SQL生成和Statement建立、還要ResultSet結果集的讀取等)。將這些複雜的業務邏輯和數據邏輯分離,以將系統的緊耦合關係轉化爲鬆耦合關係(即解耦合),是下降系統耦合度迫切要作的,也是持久化要作的工做。
MVC模式實現了架構上將表現層和數據處理層分離的解耦合,而持久化設計則實現了數據處理層內部的業務邏輯和數據邏輯分離的解耦合。
關係型數據庫中的數據基本都是以一行行的數據進行存取的,而程序運行倒是一個個對象進行處理,而目前大部分數據庫驅動技術(如ADO.NET、JDBC、ODBC等)均是以行集的結果集一條條進行處理的。因此爲解決這一困難,就出現ORM這一個對象和數據之間映射技術。
三、在JasperReports中使用Hibernate
Hibernate是一個開發源代碼的對象關係映射框架,它對JDBC進行了很是輕量級的對象封裝,使得Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。
Hibernate能夠應用在任何使用JDBC的場合,既能夠在Java的客戶端程序使用,也能夠在Servlet/JSP的Web應用中使用,最具革意義的是,Hibernate能夠在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。
package src;api
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;session
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(); }}}當Hibernate檢索返回集合類型的對象時,使用JRBeanCollection接口可將數據經過Hibernate的POJO(Plain Old Java Object)實例映射到報表域中,使用JRXmlLoader.load(templateName)方法加載報表模板,最後經過JasperFillManager方法將數據填入模板中。本例使用JasperExportManager.exportReportToPdfFile()方法將報表輸出爲PDF格式。JasperReports提供的net.sf.jasperreports.engine.JRExporter接口能夠方便的將報表輸出爲PDF、XLS、CSV、RTF、HTML或者XML格式,目前以PDF和EXCEL格式較爲通用。四、總結在JasperReports中使用了Hibernate之後,若是隨業務更換數據源的話,只須要更好Hibernate的映射文件,極大提升了代碼的可重用性,同時因爲Hibernate自己對於查詢的優化,也能很好的提升整個應用的效率,儘量的節省開發時間。