JasperReports學習

最近使用了JasperReports和iReport製作了幾個報表,這片文章是我的一些總結。

JasperReports是一個開源的java報表製作引擎
http://jasperreports.sourceforge.net

iReport是JasperReports的一個GUI工具,用來生成JasperReports的jrxml文件。
http://ireport.sourceforge.net


首先使用iReport製作報表的模板(我自己起的名詞):

運行iReport,新建一個report。
在Title band中輸入報表的名稱,好象使用pageheader band也可以,目前我還沒有弄明白2者具體的差別。
在column header band中放置一些static text,做爲報表的列標題。
在detal band中放入一些textfield,顯示報表的詳細數據。
在summary band中放入類似於"合計"之類的textfield,這個band是顯示在最後一行數據的下放。
在LastPageFooter band中放入想在最後一頁顯示的信息,比如說"審閱人簽名"之類的。

這樣報表的框架就基本上搭好了,然後compile一下檢查是否有錯誤,如果沒有錯誤那麼就可以在程序中使用這個報表模板了。

JasperReports介紹:

使用JasperReports生成報表是非常簡單的,僅僅使用net.sf.jasperreports.engine包中的幾個類即可完成報表的生成、預覽、打印、導出等各個功能。

1. net.sf.jasperreports.engine.JasperCompileManager類。
使用這個類的幾個靜態方法即可完成對報表的編譯工作(具體參見api文檔)
編譯完成後可以JasperCompileManager有兩種處理方式:
1> 返回一個JasperReport對象
2> 在.jrxml文件所在的目錄生成一個.jasper文件
這兩種方式是由程序員自己選擇的。不過我比較傾向使用.jasper文件,畢竟報表的結構不是每天都在改動,所以每次重新編譯報表並不是很划算。

2. net.sf.jasperreports.engine.JasperFillManager類
這個類的作用是用數據填充報表。它可以使用JasperReport對象也可以使用。jasper文件做爲報表模板。
它同樣有2中處理方式:
1> 返回一個JsaperPrint對象。
2> 在.jasper文件所在目錄生成一個.jrprint文件
這個類使用net.sf.jasperreports.engine.JRDataSource接口的實現做爲數據源。任何實現了JRDataSource的類均可做爲數據源使用
在net.sf.jasperreports.engine.data包中定義了一些數據源,可根據自己的需要選擇。這裏我使用的是JRTableModelDataSource做爲
數據源(因爲我的報表還要顯示在Table中)。

3. net.sf.jasperreports.engine.JasperPrintManager和net.sf.jasperreports.engine.JasperExportManager
者兩個類的作用是打印、導出報表
他們使用 JasperPrint 和 .jrprint文件做爲輸入。
可以根據自己的需要使用裏面的方法。

例:
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.*;
public class CompileReport {
public static void main(String args[]) {
try {
//編譯report.jrxml並在report.jrxml所在的目錄中生成report.jasper文件
JasperCompileManager.compileReportToFile("report.jrxml");
//填充數據,這裏使用的是JREmptyDataSource
JasperFillManager.fillReportToFile("report.jasper", null, new JREmptyDataSource(50));
//預覽報表,false代表不是使用xml文件。
JasperViewer view = new JasperViewer("reports.jrprint", false);
view.pack();
view.setVisible(true);
}
catch (Exception e) {
e.printStackTrace()
}
}
}






http://www.heci.net 賀詞網!]
JasperReports學習筆記

版本:jasperreports-0.6.7
學習資料來源:http://jasperreports.sourceforge.net

一、 需求(requirements)
JasperReports要用到的工具和類
1. JDK(java開發環境)
JDK 1.2.2 or higher
2. XML
JAXP 1.1 XML Parser(XML解析器)

Jakarta Commons Digester Component (version 1.1 or later)
http://jakarta.apache.org/commons/digester/

Jakarta Commons BeanUtils Component (version 1.1 or later)
http://jakarta.apache.org/commons/beanutils/

Jakarta Commons Collections Component (version 1.0 or later)
http://jakarta.apache.org/commons/collections/

Jakarta Commons Logging Component (version 1.0 or later)
http://jakarta.apache.org/commons/logging/
3. JDBC(連接數據庫用)
JDBC 2.0 Driver

4. PDF(轉換爲PDF文件用到)
iText - Free Java-PDF library by Bruno Lowagie and Paulo Soares
(version 1.01 or later)
http://www.lowagie.com/iText/

5. XLS(轉換爲excel文件用)
Jakarta POI (version 2.0 or later)
http://jakarta.apache.org/poi/

二、快速瞭解(quick how to)
1. Main classes(主要的類)
用JasperReports 時,用到的主要類
net.sf.jasperreports.engine.JasperCompileManager
net.sf.jasperreports.engine.JasperFillManager
net.sf.jasperreports.engine.JasperPrintManager
net.sf.jasperreports.engine.JasperExportManager
這些類提供了很多靜態方法,用來編譯、填充、打印和導出報表。詳細信息請參考JasperReports的javadoc文檔。

net.sf.jasperreports.view.JasperViewer
此類用來預覽生成的報表(generated reports.)。

net.sf.jasperreports.view.JasperDesignViewer
此類用來預覽報表設計(view the report design)。

2. 編譯報表設計Compiling a report design
xml文件定義報表設計(report design)。編譯報表設計(report design)產生報表(generate reports)。網頁http://jasperreports.sourceforge.net/quick.how.to.html中 介紹用net.sf.jasperreports.engine.JasperCompileManager類的靜態方法 compileReportXXX()來編譯報表設計(report design)。但是JasperCompileManager不贊成使用此方法編譯報表設計(report design),推薦使用JasperCompileManager的方法compileReportXXX()來代替。
編譯報表設計(report design)時,jasperreports engine首先檢查模板,確定是否一致,然後轉換所有的報表表達式(report expressions),最後產生.jasper文件。 要想使編譯工作儘可能靈活,你可以實現接口net.sf.jasperreports.engine.design.JRCompiler。

3.預覽報表設計 Viewing a report design
使用net.sf.jasperreports.view.JasperDesignViewer的程序來預覽。他的main()方法接受報表設計文件名(xml)或者編譯後的.jasper文件。

4. 填充報表 Filling a report
編譯報表設計(xml文件)得到報表文件(.jasper),再調用net.sf.jasperreports.engine.JasperFillManager類的方法fillReportXXX(),可以得到報表(JasperPrint)。
5. 預覽報表 Viewing a report
Generated reports can be viewed using the net.sf.jasperreports.view.JasperViewer application.
In its main() method, it receives the name of the file which contains the report to view.
我沒有測試成功。
6. Printing a report
Generated reports can be printed using the printReport(), printPage() or printPages() static methods exposed by the net.sf.jasperreports.engine.JasperPrintManager class.

7. Exporting to PDF, HTML, XLS, CSV or XML format
填充報表文件(.jasper文件)得到報表(JasperPrint)後,可以使用 net.sf.jasperreports.engine.JasperExportManager類的方法exportReportXXX()導出爲各 種格式的文件PDF,HTML,XML。
After having filled a report, we can also export it in PDF, HTML or XML format using the exportReportXXX() methods of the net.sf.jasperreports.engine.JasperExportManager class.


三、JasperReports的工作流程:

根據上圖的流程,JasperReports做報表有一下步驟:

1、 報表設計,可以用ireport可視化工具來實現,生成xml文件。完成後,可以直接到步驟3,直接編譯xml文件。
2、 如果已經存在報表設計文件(xml文件),可以用 net.sf.jasperreports.engine.xml.JRXmlLoader.load()方法載入報表設計,該方法返回 JasperDesign對象,通過JasperDesign對象,可以修改報表設計,比如:添加、刪除字段,添加、刪除變量,添加、刪除分組,等等。
3、 完成報表設計後,接下來就可以編譯報設計,編譯報表設計可以用類 net.sf.jasperreports.engine.JasperCompileManager的compileReport()方法來實現,該方 法可以編譯xml文件或JasperDesign對象,產生JasperReport對象,JasperReport對象可序列化,能夠保存爲文件(通常 是.jasper文件)。類net.sf.jasperreports.engine.JasperCompileManager還可以把報表轉化爲報表 設計文件(xml文件)。得到JasperReport對象(可從.jasper文件實例化一個JasperReport對象)後,給報表填充數據產生 JasperPrint對象。JasperPrint對象可序列化,保存爲文件。有了JasperPrint對象後,可以打印、瀏覽、轉換爲其他格式的文 件,如:PDF,HTML,XML,XLS,CSV等等,這些操作就是我們想得到的最終結果。儘管JasperPrintManager類可以導出爲 PDF,XML文件,但是不贊成使用JasperPrintManager類來導出,建議用JasperExportManager類來導出 PDF,HTML,XML文件;要導出XLS和CSV文件,用專業的導出類 net.sf.jasperreports.engine.export.JRXlsExporter類和 net.sf.jasperreports.engine.export.JRCsvExporter類
導出爲XLS的代碼段:
JRXlsExporter exporter = new JRXlsExporter();//創建實例
//設計參數
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, strDestFile);
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
exporter.exportReport();//導出

導出爲CSV文件和XLS類似。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章