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用于報表產生的原始類,比如,該類實例在用于產生報表的xml文件被解析后獲得,或者不產生xml文檔而是由調用jasperreport的應用程序產生。在所給的例子中有一個(noxmldesign)就是在不產生xml文件的情況下動態生成該實例的一個例子。所有該類的實例都屬于報表的填充和產生以前產生的,所以我們稱之為原始類。
類net.sf.jasperreports.engine.design.jasperreport
該類實例表現了報表設計對象,是作為報表的編譯過程的結果而被實例化,是向報表中填充數據的準備。在報表的編譯過程中協同驗證報表元素的合法性,一致性;同時創建了臨時文件存儲報表中所有的變量,表達式。編譯過程中會先查找classpath中tools.jar或者Ant進行編譯,編譯結果以字節碼的形式存儲,并且在填充數據時用于判斷多種產生報表的形式
類net.sf.jasperreports.engine.design.JasperCompileManager
該類允許用戶從文件,流等多種形式編譯xml,允許直接傳遞JasperDesign對象并接收相應的JasperReport對象,它是將報表設計xml文件編譯為等待填充的報表文件的入口類。其他方法:驗證報表合法性,構建JasperDesign類的實例也是十分有用的,尤其是針對可視化編輯器
類net.sf.jasperreports.engine.design.JasperPrint
報表填充完畢后產生該類的實例,這個對象可以被JasperReport內置報表瀏覽工具瀏覽,或者序列化存儲、發送等。該類的實例表現了JasperReport的報表輸出;除了作為標準格式以頁面形式存儲外還可以轉化為PDF, HTML, XML等多種形式。
類net.sf.jasperreports.engine.design.JRDataSource
就報表數據來說,JasperReport是十分靈活的,提供多種數據源,針對各種數據源都有相應的編程接口,每次報表填充時,都會產生特定場景的引擎實例
net.sf.jasperreports.view.JasperViewer
此類用來預覽生成的報表(generated reports.)。
net.sf.jasperreports.view.JasperDesignViewer
此類用來預覽報表設計(view the report design)。
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類
字段(Fields): 是數據庫抽取出來的,希望在報表中出現的數據庫內容。比如一個ID的所有值。$F{filedsName}
參數(Parameters):這是你的應用需要提供給報表的入口,比如你 希望在報表被解釋的時候提供Where語句的條件值。那么就可以 使用參數$P{parameterName}
變量(Variables):這是報表只能夠一些邏輯運算的表現,比如統計值。$V{variablesName}每種對象的定義格式如每個對象的后面說明,比如定義一個變量(Variables),
那么表達式就寫成$V{ variablesName },報表中出現的就是這個變量的名稱。
JasperReport填充數據有多種方法,不過最常用的就2種:一是直接在jrxml文件里嵌入sql語句,二是創建一個自己的數據源,記得這個數據源從JRDataSource繼承而來.JRDataSource有個方法一定要實現,即next以及getFieldValue,具體參見其API
2.中文問題的解決
在JAVA中,用ireport是個不錯的報表設計工具咯,可視化操作,但也有中文問題。典型的是加入itext后,中文顯示亂碼,并且導出到PDF后也亂碼,解決方法經過探索后有如下方法解決:
1 在ireportlib目錄下,添加iText亞洲語言包(http://itext.sourceforge.net/downloads/iTextAsian.jar.),itext-1.01.jar;
2 在itext文本的屬性框中,設置字體的屬性為:
font name: SansSerif
PDF font name: STSong-Light;
pdfEncoding =UniGB-UCS2-H
將PDF embedeed encoding前的勾選上,并在下拉表中選擇UniGB-UCS2-V (Chinese Simplified)
這樣就可以解決了
a、iReport的輸出格式····
iReport的預覽輸出格式可以支持以下幾種:
PDF、HTML、CSV、JAVA2D、Excel、純文字、JRViewer,其中最常用的是PDF、JRViewer。
本文以JRViewer為例子。JRViewer是直接以C/S方式作為報表的輸出格式,在JFrame框架下輸出。Jasperreport提供默認的JRViewer輸出類。
b、報表的動態對象變量、參數、字段····
在使用iReport的過程中會碰到很多與變量(Variables)、參數(Parameters)、字段(Fields)這些有關的內容,我們要介紹這些對象的使用和意義:
·字段(Fields):是數據庫抽取出來的,希望在報表中出現的數據庫內容。
比如一個ID的所有值。$F{ filedsName }
·參數(Parameters):這是你的應用需要提供給報表的入口,
比如你希望在報表被解釋的時候提供Where語句的條件值,
那么就可以使用參數(Parameters)。$P{ parameterName }
·變量(Variables):這是報表中一些邏輯運算的表現,比如統計值。$V{ variablesName }
每種對象的定義格式如每個對象的后面說明,比如定義一個變量(Variables),
那么表達式就寫成$V{ variablesName },報表中出現的就是這個變量的名稱。
一個報表的結構大致是幾個部分:title、pageHeader、columnHeader、detial、columnFooter、pageFooter、summary、groupHeader、groupfooter。
·Title:每個報表一般會有一個名字,比如×××銷售報表,title就是擱置這個名稱的最好地方了,當然你也可以根據需要擱置在合適的地方。
·pageHeader:報表的一些公共要素,比如頁碼、創建時間、創建人等信息放置在這里是比較好的選擇。
·columnHeader:無可非議的這里是放置列的名稱,記住不是列數據。
·Detial:放置需要循環的數據,比如銷售記錄數據。
·columnFooter:放置列級別的統計計算值或是列的說明。
·pageFooter:放置頁級別的統計值或是頁的說明。
·Summary:可能需要對幾頁(你的報表可能有幾個頁組成)的統計值。比如50個銷售記錄共占用了3頁,那么放置這些統計記錄的統計值最好的地方就是summary。
·groupHeader:每個表的內容可能需要根據某個屬性進行劃分顯示內容和計算內容,比如希望以月份為單位每組分開顯示銷售記錄,那么就可以定義一個組(組的定義參考后文),groupHeader就是放置組說明或是組標志最好的地方。
·Groupfooter:放置組的統計或是說明 <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>
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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