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
之所以從這個類開始,是因為它的實例是jasperreport用于報表產(chǎn)生的原始類,比如,該類實例在用于產(chǎn)生報表的xml文件被解析后獲得,或者不產(chǎn)生xml文檔而是由調(diào)用jasperreport的應(yīng)用程序產(chǎn)生。在所給的例子中有一個(noxmldesign)就是在不產(chǎn)生xml文件的情況下動態(tài)生成該實例的一個例子。所有該類的實例都屬于報表的填充和產(chǎn)生以前產(chǎn)生的,所以我們稱之為原始類。
類net.sf.jasperreports.engine.design.jasperreport
該類實例表現(xiàn)了報表設(shè)計對象,是作為報表的編譯過程的結(jié)果而被實例化,是向報表中填充數(shù)據(jù)的準(zhǔn)備。在報表的編譯過程中協(xié)同驗證報表元素的合法性,一致性;同時創(chuàng)建了臨時文件存儲報表中所有的變量,表達(dá)式。編譯過程中會先查找classpath中tools.jar或者Ant進(jìn)行編譯,編譯結(jié)果以字節(jié)碼的形式存儲,并且在填充數(shù)據(jù)時用于判斷多種產(chǎn)生報表的形式
類net.sf.jasperreports.engine.design.JasperCompileManager
該類允許用戶從文件,流等多種形式編譯xml,允許直接傳遞JasperDesign對象并接收相應(yīng)的JasperReport對象,它是將報表設(shè)計xml文件編譯為等待填充的報表文件的入口類。其他方法:驗證報表合法性,構(gòu)建JasperDesign類的實例也是十分有用的,尤其是針對可視化編輯器
類net.sf.jasperreports.engine.design.JasperPrint
報表填充完畢后產(chǎn)生該類的實例,這個對象可以被JasperReport內(nèi)置報表瀏覽工具瀏覽,或者序列化存儲、發(fā)送等。該類的實例表現(xiàn)了JasperReport的報表輸出;除了作為標(biāo)準(zhǔn)格式以頁面形式存儲外還可以轉(zhuǎn)化為PDF, HTML, XML等多種形式。
類net.sf.jasperreports.engine.design.JRDataSource
就報表數(shù)據(jù)來說,JasperReport是十分靈活的,提供多種數(shù)據(jù)源,針對各種數(shù)據(jù)源都有相應(yīng)的編程接口,每次報表填充時,都會產(chǎn)生特定場景的引擎實例
net.sf.jasperreports.view.JasperViewer
此類用來預(yù)覽生成的報表(generated reports.)。
net.sf.jasperreports.view.JasperDesignViewer
此類用來預(yù)覽報表設(shè)計(view the report design)。
JasperReports做報表有一下步驟:
1、 報表設(shè)計,可以用ireport可視化工具來實現(xiàn),生成xml文件。完成后,可以直接到步驟3,直接編譯xml文件。
2、 如果已經(jīng)存在報表設(shè)計文件(xml文件),可以用 net.sf.jasperreports.engine.xml.JRXmlLoader.load()方法載入報表設(shè)計,該方法返回 JasperDesign對象,通過JasperDesign對象,可以修改報表設(shè)計,比如:添加、刪除字段,添加、刪除變量,添加、刪除分組,等等。
3、 完成報表設(shè)計后,接下來就可以編譯報設(shè)計,編譯報表設(shè)計可以用類 net.sf.jasperreports.engine.JasperCompileManager的compileReport()方法來實現(xiàn),該方法可以編譯xml文件或JasperDesign對象,產(chǎn)生JasperReport對象,JasperReport對象可序列化,能夠保存為文件(通常是.jasper文件)。類net.sf.jasperreports.engine.JasperCompileManager還可以把報表轉(zhuǎn)化為報表設(shè)計文件(xml文件)。得到JasperReport對象(可從.jasper文件實例化一個JasperReport對象)后,給報表填充數(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ù)庫抽取出來的,希望在報表中出現(xiàn)的數(shù)據(jù)庫內(nèi)容。比如一個ID的所有值。$F{filedsName}
參數(shù)(Parameters):這是你的應(yīng)用需要提供給報表的入口,比如你 希望在報表被解釋的時候提供Where語句的條件值。那么就可以 使用參數(shù)$P{parameterName}
變量(Variables):這是報表只能夠一些邏輯運(yùn)算的表現(xiàn),比如統(tǒng)計值。$V{variablesName}每種對象的定義格式如每個對象的后面說明,比如定義一個變量(Variables),
那么表達(dá)式就寫成$V{ variablesName },報表中出現(xiàn)的就是這個變量的名稱。
JasperReport填充數(shù)據(jù)有多種方法,不過最常用的就2種:一是直接在jrxml文件里嵌入sql語句,二是創(chuàng)建一個自己的數(shù)據(jù)源,記得這個數(shù)據(jù)源從JRDataSource繼承而來.JRDataSource有個方法一定要實現(xiàn),即next以及getFieldValue,具體參見其API
2.中文問題的解決
在JAVA中,用ireport是個不錯的報表設(shè)計工具咯,可視化操作,但也有中文問題。典型的是加入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方式作為報表的輸出格式,在JFrame框架下輸出。Jasperreport提供默認(rèn)的JRViewer輸出類。
b、報表的動態(tài)對象變量、參數(shù)、字段····
在使用iReport的過程中會碰到很多與變量(Variables)、參數(shù)(Parameters)、字段(Fields)這些有關(guān)的內(nèi)容,我們要介紹這些對象的使用和意義:
·字段(Fields):是數(shù)據(jù)庫抽取出來的,希望在報表中出現(xiàn)的數(shù)據(jù)庫內(nèi)容。
比如一個ID的所有值。$F{ filedsName }
·參數(shù)(Parameters):這是你的應(yīng)用需要提供給報表的入口,
比如你希望在報表被解釋的時候提供Where語句的條件值,
那么就可以使用參數(shù)(Parameters)。$P{ parameterName }
·變量(Variables):這是報表中一些邏輯運(yùn)算的表現(xiàn),比如統(tǒng)計值。$V{ variablesName }
每種對象的定義格式如每個對象的后面說明,比如定義一個變量(Variables),
那么表達(dá)式就寫成$V{ variablesName },報表中出現(xiàn)的就是這個變量的名稱。
一個報表的結(jié)構(gòu)大致是幾個部分:title、pageHeader、columnHeader、detial、columnFooter、pageFooter、summary、groupHeader、groupfooter。
·Title:每個報表一般會有一個名字,比如×××銷售報表,title就是擱置這個名稱的最好地方了,當(dāng)然你也可以根據(jù)需要擱置在合適的地方。
·pageHeader:報表的一些公共要素,比如頁碼、創(chuàng)建時間、創(chuàng)建人等信息放置在這里是比較好的選擇。
·columnHeader:無可非議的這里是放置列的名稱,記住不是列數(shù)據(jù)。
·Detial:放置需要循環(huán)的數(shù)據(jù),比如銷售記錄數(shù)據(jù)。
·columnFooter:放置列級別的統(tǒng)計計算值或是列的說明。
·pageFooter:放置頁級別的統(tǒng)計值或是頁的說明。
·Summary:可能需要對幾頁(你的報表可能有幾個頁組成)的統(tǒng)計值。比如50個銷售記錄共占用了3頁,那么放置這些統(tǒng)計記錄的統(tǒng)計值最好的地方就是summary。
·groupHeader:每個表的內(nèi)容可能需要根據(jù)某個屬性進(jìn)行劃分顯示內(nèi)容和計算內(nèi)容,比如希望以月份為單位每組分開顯示銷售記錄,那么就可以定義一個組(組的定義參考后文),groupHeader就是放置組說明或是組標(biāo)志最好的地方。
·Groupfooter:放置組的統(tǒng)計或是說明 <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
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

