No pains, No gain
          走過、路過、千萬別錯過
          posts - 23,comments - 1,trackbacks - 0

          JasperReport?用戶指南(轉(zhuǎn)貼)?

          一.????JasperReports簡介
          JasperReports是一個強力的報表產(chǎn)生工具,他有能力描述豐富內(nèi)容到屏幕上、到打印機或到PDF,?HTML,?XLS,?CSV和XML文件。它完全用Java編寫的,并可在各種Java應(yīng)用(包括J2EE或WEB應(yīng)用)中用來產(chǎn)生動態(tài)內(nèi)容。它的主要目的是以一種簡單而靈活的方式來幫助創(chuàng)建導(dǎo)向的頁面。
          JasperReports組織根據(jù)在一個XML文件中定義的報表設(shè)計通過JDBC來接受來自一個關(guān)系數(shù)據(jù)庫中的數(shù)據(jù).?為了以數(shù)據(jù)來填充報表,報表設(shè)計必須首先被編譯。
          描述報表設(shè)計的XML文件的編譯通過執(zhí)行dori.jasper.engine.JasperManager?類暴露的compileReport()方法。
          通過編譯,報表設(shè)計被裝載入一個報表設(shè)計對象中,然后系列化并存儲在磁盤上(dori.jasper.engine.JasperReport)。當(dāng)應(yīng)用程序想以數(shù)據(jù)來填充特定的報表設(shè)計時會使用這個已系列化的對象。事實上,報表設(shè)計的編譯意指描述報表設(shè)計的XML文件中定義的所有Java表達式的編譯。為了檢查報表設(shè)計的一致性,在編譯時做各種檢驗。結(jié)果被準備用來填?充報表設(shè)計,然后被用來以不同的數(shù)據(jù)集來產(chǎn)生文檔?。
          為了填充一個報表設(shè)計,可使用由dori.jasper.engine.JasperManager類暴露的?fillReportXXX()方法。這些方法接受作為參數(shù)的報表設(shè)計對象,或描述特定報表設(shè)計對象的文件,?在一個系列化的格式中,和一個從其中接受數(shù)據(jù)填?充報表的數(shù)據(jù)庫JDBC鏈接。
          結(jié)果是一個描述準備用來打印文檔的對象(dori.jasper.engine.JasperPrint)并可被以一個系列化格式存儲在磁盤上。?為以后使用,或可被分發(fā)到打印機,到屏幕或可被轉(zhuǎn)換到一個PDF,?HTML,?XLS,?CSV?或XML文檔。
          二.????JasperReports快速使用流程
          1.????主要類
          運行JasperReports?時使用的主要類
          dori.jasper.engine.JasperCompileManager
          dori.jasper.engine.JasperFillManager
          dori.jasper.engine.JasperPrintManager
          dori.jasper.engine.JasperExportManager
          這些類表現(xiàn)JasperReports引擎的正面(fa?ade),?他們有各種靜態(tài)方法簡化API功能的訪問并用來編譯一個XML報表設(shè)計、填充報表、打印它或輸出到PDF,?HTML和?XML文件。
          dori.jasper.view.JasperViewer
          這個可用來觀察產(chǎn)生的報表。
          dori.jasper.view.JasperDesignViewer
          這個可用來觀察報表設(shè)計。
          2.?編譯報表設(shè)計
          報表設(shè)計由一個具有在jasperreport.dtd?文件中定義的結(jié)構(gòu)的XML文件來表現(xiàn)。為了根據(jù)這樣的報表設(shè)計來產(chǎn)生報表,需要編譯它。
          編譯可通過使用由dori.jasper.engine.JasperCompileManager?類暴露的compileReportXXX()方法來完成。
          當(dāng)編譯一個報表設(shè)計時,引擎會創(chuàng)建一個包括所有報表表示式的Java類文件,這個類是使用Java編譯器編譯并在結(jié)果.jasper文件中存儲字節(jié)碼。?
          默認情況下,JasperReports使用目前JVM類路徑來編譯報表文件(java.class.path系統(tǒng)屬性)并以目前工作目錄作為產(chǎn)生文件的臨時存放位置。
          為了定制報表編譯過程,JasperReports充許通過提供一個值給系統(tǒng)屬性jasper.reports.compile.class.path來覆蓋默認行為,這將被用報表類編譯的類路徑,賦一個值給系統(tǒng)屬性jasper.reports.compile.temp,這個將被用作臨時目錄?
          XML驗證默認是打開的,可通過設(shè)定系統(tǒng)屬性jasper.reports.compilation.xml.validation?為false來關(guān)閉。
          如果你想使用一個不同的Java編譯器,如jikes,你可以使用jasper.reports.compiler系統(tǒng)屬性來提供編譯器程序的名字。在你使用jikes情況下,請確信你將rt.jar文件加入到類路徑中,可通過上面提及的系統(tǒng)屬性?jasper.reports.compile.class.path。?
          You?can?see?some?of?those?in?action?in?the?supplied?"webapp"?samples.?Check?the?jsp/compile.jsp?and?WEB-INF/classes/servlets/CompileServlet.java?files.
          3.?觀察報表設(shè)計?
          報表設(shè)計可通過使用dori.jasper.view.JasperDesignViewer應(yīng)用程序來察看。在其main()方法中,它接收那些包括報表設(shè)計的文件的名字來觀看。這可以是XML文件或編譯過的報表設(shè)計。?
          4.?填充報表?
          一個編譯過的報表設(shè)計可通過調(diào)用dori.jasper.engine.JasperFillManager?類的fillReportXXX()方法來產(chǎn)生報表。
          5.?觀看報表?
          產(chǎn)生的報表可通使用dori.jasper.view.JasperViewer應(yīng)用來觀看。在其main()方法中它接受包括報表的文件的名字來觀看。
          6.?打印報表
          產(chǎn)生的報表可使用doriJasper.engine.JasperPrintManager?類暴露的靜態(tài)方法printReport(),?printPage()或printPages()來打印。
          7.導(dǎo)出到PDF,?HTML?或XML格式
          在已經(jīng)填充一個報表后,我們也可以通過使用dori.jasper.engine.JasperExportManager類的exportReportXXX()方法來以?PDF,?HTML或XML格式導(dǎo)出它。
          三.????技術(shù)指南簡述
          1.報表設(shè)計
          一個報表設(shè)計描述一個被JasperReports引擎用來分發(fā)動態(tài)內(nèi)容到打印機,到屏幕或到WEB的模板。存儲在數(shù)據(jù)庫中的數(shù)據(jù)根據(jù)報表設(shè)計被組織達到準備到打印,頁面導(dǎo)向文檔。
          報表設(shè)計是在XML文件中定義并且必有一個特別的結(jié)構(gòu)。此結(jié)構(gòu)是在一個由JasperReports?引擎一起提供的DTD文件中聲明的(XML類型定義文件jasperreport.dtd)。然后編譯XML文件,為了在后面的報表填充操作中使用他們。
          為了創(chuàng)建一個簡單的報表設(shè)計,我們不得不編輯一個有以下結(jié)構(gòu)的XML文件:
          <?xml?version="1.0"?>?
          <!DOCTYPE?jasperReport?PUBLIC?"-//JasperReports//DTD?Report?Design//EN"?
          "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">?
          <jasperReport?name="name_of_the_report"?...?>?
          ...?
          </jasperReport>
          2.參數(shù)
          參數(shù)是傳入到報表填充操作的對象引用
          參數(shù)可的構(gòu)造SQL查詢
          3.數(shù)據(jù)源?
          JasperReports使用一個叫JRDataSource的接口來支持各種類型的數(shù)據(jù)源
          4.字段
          報表字段代表從數(shù)據(jù)源映射數(shù)據(jù)到報表產(chǎn)生程序的唯一途徑
          5.表達式
          表達式是JasperReports的強大特點,它們可被聲明的報表變量使用來執(zhí)行各種計算。
          6.變量
          報表變量是才一個表達式開始時建立的特殊的對象。
          變量可以在相應(yīng)的表達式中執(zhí)行內(nèi)置類型的計算,如:count,sum,average,lowest,highest等
          7.報表區(qū)
          當(dāng)我們建立一個報表設(shè)計時,我們需要定義報表區(qū)的內(nèi)容和布局。報表設(shè)計的整個結(jié)構(gòu)基于以下報表區(qū)<title>,?<pageHeader>,?<columnHeader>,?<groupHeader>,?<detail>,?<groupFooter>,?<columnFoter>,?<pageFooter>,?<summary>.
          8.組
          組代表了在報表上組織數(shù)據(jù)的一個靈活的方式,當(dāng)我們填充一個報表時,JasperReports引擎可字段檢測組表達式<groupFooter>?和?<groupHeader>等是否完整。
          9.字體和Unicode支持
          你可以用任何語言來創(chuàng)建你的報表。
          10.?Scriptlets
          Scriptlets是java代碼序列,在每次報表事件發(fā)生時被執(zhí)行。通過?scriptlets,用戶可以影響被報表變量存儲的值。
          當(dāng)我們創(chuàng)建一個JasperReports?scriptlet類時,開發(fā)者要實現(xiàn)或重載幾個方法,象:beforeReportInit(),?afterReportInit(),?beforePageInit(),?afterPageInit(),?beforeGroupInit(),?afterGroupInit()等,這些方法當(dāng)填充報表時在適當(dāng)?shù)臅r候被報表引擎調(diào)用。
          11.子報表
          子報表是報表產(chǎn)生工具的重要特征,它允許更復(fù)雜報表的創(chuàng)建并簡化設(shè)計工作。
          子報表在創(chuàng)建主從報表時非常有用。

          1??首先看看
          ???http://plateau.sicool.com/main.html上的三篇
          ???iReport和Jasperreport整合開發(fā)報表向?qū)Вㄒ唬ǘㄈ?br />???看完理解并自己運行一下,OK,你入門了
          2??去找一份TheJasperReportsUltimateGuide.1.0.pdf,看完之后你就能
          ???了解JasperReport生成的基本過程及原理
          3??當(dāng)然是Java研究的這個論壇
          ???http://www.javaresearch.org/forum/forum.jsp?column=316&start=0&thRange=15
          ???多往后翻翻看看帖子,很多你要問的問題都能找到答案,還有好幾篇前輩的理會等等?
          ???都是寶貴的經(jīng)驗
          4??JasperReport最好的資料是什么??
          ???解壓jasperreports-0.5.0-project.zip?后
          ???目錄jasperreports\demo\samples下的例子,看看這些例子是你關(guān)于這個報表工具提升?
          ???能力的最好最快的方式,下面我簡要說一下各個例子說的是什么以及有什么用
          ????alterdesign?該例子演示了報表編譯后,在報表展現(xiàn)的時候如何動態(tài)的控制其中的元素
          ????????????????比如讓某一個矩形變色或其他
          ????antcompile??演示如何讓?ant?來編譯
          ????chart???????演示了如何在報表中添加圖像,JasperReport是用Scriptlet的方式
          ????????????????往報表中添加圖像,而Scriptlet是調(diào)用也是開源的jfreechart的Api來
          ????????????????生成圖形,去jfreechart看一下,該工具能的圖形生成能力也很強
          ????datasource??演示了如何在報表中使用各種數(shù)據(jù)源,能夠使用beanarray
          ????????????????beancollection,也可以用自定義的數(shù)據(jù)源,只要繼承了JRDataSource的
          ????????????????兩個接口,這個能給用戶提供非常大的靈活性,報表的數(shù)據(jù)不用局限于一
          ????????????????條Sql語句,也可以使用存儲過程,對生成報表中的數(shù)據(jù)也可以排序,二
          ????????????????次檢索,等等
          ????fonts???????各種字體的演示
          ????horizontal??演示了水平分欄的報表,演示報表中分了三欄,其中還用到了
          ????????????????textFieldExpression,就像if語句的效果來選擇輸出的內(nèi)容
          ????hyperlink???演示了各種樣式的鏈接
          ????images??????演示了如何在報表中加入圖像以及圖像的顯示方式
          ????jasper??????演示了分組分欄的報表,演示中用了2次group
          ????jcharts?????演示了調(diào)用另一個開源的API?jcharts來往報表中加入分析圖形,原理同
          ????????????????上chart,如果jfreechart都還不能滿足你分析圖形的要求,那到j(luò)charts
          ????????????????里找找看吧,說不定有
          ????landscape???演示橫向的報表
          ????nopagebreak?演示比如在IE中不分頁的方式打印出報表的內(nèi)容,通過這個演示也可以
          ????????????????了解報表輸出如何配置參數(shù)
          ????noreport????演示了如何直接通過java程序生成JasperPrint對象來輸出
          ????noxmldesign?演示了如何直接通過java程序生成JasperDesign對象來動態(tài)的生成報
          ????????????????表,根據(jù)這個例子,用戶可以作出自定義選列的報表,當(dāng)然比較麻煩,
          ????????????????而且肯定自己要補充他的API庫
          ????????????????(JasperReport真是強大啊,呵呵)????
          ????pdfencrypt??演示了pdf的輸出方式,可以給pdf文件加密碼,其實就是pdf輸出方式的
          ????????????????參數(shù)配置,具體有那些參數(shù)可配置,去看看API吧
          ????printservice演示了如何直接打印報表
          ????query???????演示了如何讓查詢的sql動態(tài)起來,比如你可以通過一個Jsp頁面?zhèn)?br />????????????????報表的sql的where條件,order條件,甚至整個sql語句
          ????rotation????演示了文字縱向顯示的報表
          ????scriptlet???演示了如何繼承JRDefaultScriptlet,并加入自己的處理語句,這個功能
          ????????????????可是很強大的哦,看看這些接口
          ????????????????beforeReportInit()??afterReportInit()??beforePageInit()
          ????????????????afterPageInit()??beforeColumnInit()??afterColumnInit()?
          ????????????????beforeGroupInit(String?groupName)
          ????????????????afterGroupInit(String?groupName)??
          ????????????????看看這些名字就知道你能完成那些功能,比如顯示一列數(shù)據(jù)后,馬上跟
          ????????????????上該列數(shù)據(jù)的分析圖形,當(dāng)然你也可以加上自己的方法并在報表中調(diào)用
          ????shapes??????演示了JasperReport中自帶的圖形,及能配置的參數(shù)
          ????????????????當(dāng)然你也能繼承或者覆寫JasperReport中的Api生成你要的圖形,
          ????stretch?????演示了如何處理報表中數(shù)據(jù)拉伸以及帶來周圍的線及框的拉伸,
          ????????????????你能了解到雖然黑框式表格不是JasperReport中缺省的展現(xiàn)方式,
          ????????????????但在JasperReport中不難實現(xiàn)
          ????subreport???演示了子報表,還告訴你一個報表中可以有n個子報表,子報表中還可以
          ????????????????嵌套子報表
          ????tableofcontents??演示了如何生成一個有目錄的,復(fù)雜的報表
          ????unicode?????演示了各種?字符編碼
          ????webapp??????演示了如何把報表放到一個JavaWeb項目中,可以用Jsp?Servlet
          ????????????????applet,筆者做了一個
          ????????????????有參數(shù)頁面,可以選擇html?pdf?applet輸出方式的報表,有興趣的?
          ????????????????我可以在后面放上代碼
          5??比上面更好的資料是什么,就是JasperReport的源代碼,看懂源代碼,JasperReport
          ???就是在你腦子里的了,你想干什么都行了,優(yōu)化代碼,覆寫,繼承他的類,實現(xiàn)個性
          ???化的功能,甚至你可以參考他的思想,升華一下,做一個你自己的報表







          ?

          posted on 2006-09-12 11:45 一縷青煙 閱讀(495) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 武陟县| 互助| 嵊州市| 万山特区| 来宾市| 蛟河市| 长沙市| 桃园市| 和硕县| 星座| 海安县| 齐齐哈尔市| 哈尔滨市| 德惠市| 报价| 崇州市| 平阳县| 田林县| 新昌县| 金川县| 莱西市| 连山| 肥城市| 和龙市| 江达县| 冷水江市| 讷河市| 屏南县| 洛南县| 固阳县| 桐乡市| 蒙阴县| 百色市| 易门县| 鹿泉市| 根河市| 延庆县| 庆阳市| 大兴区| 敦煌市| 九龙县|