mysql> CREATE TABLE `mysqlcode` (
-> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
-> `content` VARCHAR( 255 ) NOT NULL
-> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
CREATE TABLE admin (
admin_name char(20) NOT NULL,
admin_password char(20) NOT NULL
) TYPE=MyISAM,
default character set gbk;
類net.sf.jasperreports.engine.design.JasperDesign
之所以從這個(gè)類開始,是因?yàn)樗膶?shí)例是jasperreport用于報(bào)表產(chǎn)生的原始類,比如,該類實(shí)例在用于產(chǎn)生報(bào)表的xml文件被解析后獲得,或者不產(chǎn)生xml文檔而是由調(diào)用jasperreport的應(yīng)用程序產(chǎn)生。在所給的例子中有一個(gè)(noxmldesign)就是在不產(chǎn)生xml文件的情況下動(dòng)態(tài)生成該實(shí)例的一個(gè)例子。所有該類的實(shí)例都屬于報(bào)表的填充和產(chǎn)生以前產(chǎn)生的,所以我們稱之為原始類。
類net.sf.jasperreports.engine.design.jasperreport
該類實(shí)例表現(xiàn)了報(bào)表設(shè)計(jì)對象,是作為報(bào)表的編譯過程的結(jié)果而被實(shí)例化,是向報(bào)表中填充數(shù)據(jù)的準(zhǔn)備。在報(bào)表的編譯過程中協(xié)同驗(yàn)證報(bào)表元素的合法性,一致性;同時(shí)創(chuàng)建了臨時(shí)文件存儲(chǔ)報(bào)表中所有的變量,表達(dá)式。編譯過程中會(huì)先查找classpath中tools.jar或者Ant進(jìn)行編譯,編譯結(jié)果以字節(jié)碼的形式存儲(chǔ),并且在填充數(shù)據(jù)時(shí)用于判斷多種產(chǎn)生報(bào)表的形式
類net.sf.jasperreports.engine.design.JasperCompileManager
該類允許用戶從文件,流等多種形式編譯xml,允許直接傳遞JasperDesign對象并接收相應(yīng)的JasperReport對象,它是將報(bào)表設(shè)計(jì)xml文件編譯為等待填充的報(bào)表文件的入口類。其他方法:驗(yàn)證報(bào)表合法性,構(gòu)建JasperDesign類的實(shí)例也是十分有用的,尤其是針對可視化編輯器
類net.sf.jasperreports.engine.design.JasperPrint
報(bào)表填充完畢后產(chǎn)生該類的實(shí)例,這個(gè)對象可以被JasperReport內(nèi)置報(bào)表瀏覽工具瀏覽,或者序列化存儲(chǔ)、發(fā)送等。該類的實(shí)例表現(xiàn)了JasperReport的報(bào)表輸出;除了作為標(biāo)準(zhǔn)格式以頁面形式存儲(chǔ)外還可以轉(zhuǎn)化為PDF, HTML, XML等多種形式。
類net.sf.jasperreports.engine.design.JRDataSource
就報(bào)表數(shù)據(jù)來說,JasperReport是十分靈活的,提供多種數(shù)據(jù)源,針對各種數(shù)據(jù)源都有相應(yīng)的編程接口,每次報(bào)表填充時(shí),都會(huì)產(chǎn)生特定場景的引擎實(shí)例
net.sf.jasperreports.view.JasperViewer
此類用來預(yù)覽生成的報(bào)表(generated reports.)。
net.sf.jasperreports.view.JasperDesignViewer
此類用來預(yù)覽報(bào)表設(shè)計(jì)(view the report design)。
JasperReports做報(bào)表有一下步驟:
1、 報(bào)表設(shè)計(jì),可以用ireport可視化工具來實(shí)現(xiàn),生成xml文件。完成后,可以直接到步驟3,直接編譯xml文件。
2、 如果已經(jīng)存在報(bào)表設(shè)計(jì)文件(xml文件),可以用 net.sf.jasperreports.engine.xml.JRXmlLoader.load()方法載入報(bào)表設(shè)計(jì),該方法返回 JasperDesign對象,通過JasperDesign對象,可以修改報(bào)表設(shè)計(jì),比如:添加、刪除字段,添加、刪除變量,添加、刪除分組,等等。
3、 完成報(bào)表設(shè)計(jì)后,接下來就可以編譯報(bào)設(shè)計(jì),編譯報(bào)表設(shè)計(jì)可以用類 net.sf.jasperreports.engine.JasperCompileManager的compileReport()方法來實(shí)現(xiàn),該方法可以編譯xml文件或JasperDesign對象,產(chǎn)生JasperReport對象,JasperReport對象可序列化,能夠保存為文件(通常是.jasper文件)。類net.sf.jasperreports.engine.JasperCompileManager還可以把報(bào)表轉(zhuǎn)化為報(bào)表設(shè)計(jì)文件(xml文件)。得到JasperReport對象(可從.jasper文件實(shí)例化一個(gè)JasperReport對象)后,給報(bào)表填充數(shù)據(jù)產(chǎn)生 JasperPrint對象。JasperPrint對象可序列化,保存為文件。有了JasperPrint對象后,可以打印、瀏覽、轉(zhuǎn)換為其他格式的文件,如:PDF,HTML,XML,XLS,CSV等等,這些操作就是我們想得到的最終結(jié)果。盡管JasperPrintManager類可以導(dǎo)出為 PDF,XML文件,但是不贊成使用JasperPrintManager類來導(dǎo)出,建議用JasperExportManager類來導(dǎo)出PDF, HTML,XML文件;要導(dǎo)出XLS和CSV文件,用專業(yè)的導(dǎo)出類 net.sf.jasperreports.engine.export.JRXlsExporter類和 net.sf.jasperreports.engine.export.JRCsvExporter類
字段(Fields): 是數(shù)據(jù)庫抽取出來的,希望在報(bào)表中出現(xiàn)的數(shù)據(jù)庫內(nèi)容。比如一個(gè)ID的所有值。$F{filedsName}
參數(shù)(Parameters):這是你的應(yīng)用需要提供給報(bào)表的入口,比如你 希望在報(bào)表被解釋的時(shí)候提供Where語句的條件值。那么就可以 使用參數(shù)$P{parameterName}
變量(Variables):這是報(bào)表只能夠一些邏輯運(yùn)算的表現(xiàn),比如統(tǒng)計(jì)值。$V{variablesName}每種對象的定義格式如每個(gè)對象的后面說明,比如定義一個(gè)變量(Variables),
那么表達(dá)式就寫成$V{ variablesName },報(bào)表中出現(xiàn)的就是這個(gè)變量的名稱。
JasperReport填充數(shù)據(jù)有多種方法,不過最常用的就2種:一是直接在jrxml文件里嵌入sql語句,二是創(chuàng)建一個(gè)自己的數(shù)據(jù)源,記得這個(gè)數(shù)據(jù)源從JRDataSource繼承而來.JRDataSource有個(gè)方法一定要實(shí)現(xiàn),即next以及getFieldValue,具體參見其API
2.中文問題的解決
在JAVA中,用ireport是個(gè)不錯(cuò)的報(bào)表設(shè)計(jì)工具咯,可視化操作,但也有中文問題。典型的是加入itext后,中文顯示亂碼,并且導(dǎo)出到PDF后也亂碼,解決方法經(jīng)過探索后有如下方法解決:
1 在ireportlib目錄下,添加iText亞洲語言包(http://itext.sourceforge.net/downloads/iTextAsian.jar.),itext-1.01.jar;
2 在itext文本的屬性框中,設(shè)置字體的屬性為:
font name: SansSerif
PDF font name: STSong-Light;
pdfEncoding =UniGB-UCS2-H
將PDF embedeed encoding前的勾選上,并在下拉表中選擇UniGB-UCS2-V (Chinese Simplified)
這樣就可以解決了
a、iReport的輸出格式····
iReport的預(yù)覽輸出格式可以支持以下幾種:
PDF、HTML、CSV、JAVA2D、Excel、純文字、JRViewer,其中最常用的是PDF、JRViewer。
本文以JRViewer為例子。JRViewer是直接以C/S方式作為報(bào)表的輸出格式,在JFrame框架下輸出。Jasperreport提供默認(rèn)的JRViewer輸出類。
b、報(bào)表的動(dòng)態(tài)對象變量、參數(shù)、字段····
在使用iReport的過程中會(huì)碰到很多與變量(Variables)、參數(shù)(Parameters)、字段(Fields)這些有關(guān)的內(nèi)容,我們要介紹這些對象的使用和意義:
·字段(Fields):是數(shù)據(jù)庫抽取出來的,希望在報(bào)表中出現(xiàn)的數(shù)據(jù)庫內(nèi)容。
比如一個(gè)ID的所有值。$F{ filedsName }
·參數(shù)(Parameters):這是你的應(yīng)用需要提供給報(bào)表的入口,
比如你希望在報(bào)表被解釋的時(shí)候提供Where語句的條件值,
那么就可以使用參數(shù)(Parameters)。$P{ parameterName }
·變量(Variables):這是報(bào)表中一些邏輯運(yùn)算的表現(xiàn),比如統(tǒng)計(jì)值。$V{ variablesName }
每種對象的定義格式如每個(gè)對象的后面說明,比如定義一個(gè)變量(Variables),
那么表達(dá)式就寫成$V{ variablesName },報(bào)表中出現(xiàn)的就是這個(gè)變量的名稱。
一個(gè)報(bào)表的結(jié)構(gòu)大致是幾個(gè)部分:title、pageHeader、columnHeader、detial、columnFooter、pageFooter、summary、groupHeader、groupfooter。
·Title:每個(gè)報(bào)表一般會(huì)有一個(gè)名字,比如×××銷售報(bào)表,title就是擱置這個(gè)名稱的最好地方了,當(dāng)然你也可以根據(jù)需要擱置在合適的地方。
·pageHeader:報(bào)表的一些公共要素,比如頁碼、創(chuàng)建時(shí)間、創(chuàng)建人等信息放置在這里是比較好的選擇。
·columnHeader:無可非議的這里是放置列的名稱,記住不是列數(shù)據(jù)。
·Detial:放置需要循環(huán)的數(shù)據(jù),比如銷售記錄數(shù)據(jù)。
·columnFooter:放置列級別的統(tǒng)計(jì)計(jì)算值或是列的說明。
·pageFooter:放置頁級別的統(tǒng)計(jì)值或是頁的說明。
·Summary:可能需要對幾頁(你的報(bào)表可能有幾個(gè)頁組成)的統(tǒng)計(jì)值。比如50個(gè)銷售記錄共占用了3頁,那么放置這些統(tǒng)計(jì)記錄的統(tǒng)計(jì)值最好的地方就是summary。
·groupHeader:每個(gè)表的內(nèi)容可能需要根據(jù)某個(gè)屬性進(jìn)行劃分顯示內(nèi)容和計(jì)算內(nèi)容,比如希望以月份為單位每組分開顯示銷售記錄,那么就可以定義一個(gè)組(組的定義參考后文),groupHeader就是放置組說明或是組標(biāo)志最好的地方。
·Groupfooter:放置組的統(tǒng)計(jì)或是說明 <iframe width="490" scrolling="no" height="150" frameborder="0" align="middle" style="width: 490px; height: 150px;" src="http://www.blogbao.com/script.aspx?userid=45735&AdType=0&AdstyleID=49847&Direction=1" marginheight="0" marginwidth="0"> </iframe>
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
