已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
ireport 56入門教程之柱狀圖的開發(fā)過程 ireport5.6入門教程之柱狀圖的開發(fā)過程ireport5.6入門教程之柱狀圖的開發(fā)過程下面以柱狀圖(bar3DChart)為例,詳細(xì)說明圖表的開發(fā)過程。 1.確定數(shù)據(jù)源類型和其中參數(shù)1.確定數(shù)據(jù)源類型和其中參數(shù)我選擇的是JRDataSourceProvider類型的數(shù)據(jù)源。 我也試過JDBC數(shù)據(jù)源,沒問題,只是我的應(yīng)用需求是要根據(jù)用戶的選擇展示,所以用JRDataSourceProvider更靈活和方便些,不必每次選擇都去查數(shù)據(jù)庫。 用iReport開發(fā)圖表,在定義圖表屬性中的數(shù)據(jù)時(shí),需要添加categoryseries,一個(gè)category series中包括series expression、category expression、Value expression、label expression等。 當(dāng)我開始看到這些東西時(shí),真的時(shí)搞不明白是什么意思。 試來試去,基本上弄清楚了,關(guān)鍵是前3個(gè),Valueexpression很明白是指數(shù)據(jù)的值,category expression代表分組,seriesexpression則代表分組中的不同指標(biāo)。 舉例說明我公司的一款數(shù)據(jù)產(chǎn)品銷往全國各地的不同電信運(yùn)營商,圖表要按地區(qū)展示各運(yùn)營商的產(chǎn)品套數(shù),那么這里的地區(qū)就是category expression,運(yùn)營商就是series expression,Valueexpression就是產(chǎn)品的套數(shù)了。 于是圖表數(shù)據(jù)源的參數(shù)有3個(gè)就夠了,即category、series和value。 其他一些圖表可能情況略有不同,如餅圖(piechart),xylinechart等,如要做的通用些,可再加入些其他參數(shù)。 我這里有3個(gè)足夠了。 2.開發(fā)數(shù)據(jù)源類2.開發(fā)數(shù)據(jù)源類首先定義一個(gè)用戶圖表的beanChartDataBean,包括3個(gè)成員變量及相應(yīng)的getter和setter。 3個(gè)成員變量的名稱如前所述,無論圖表要顯示什么樣的數(shù)據(jù),都按這3個(gè)變量進(jìn)行對應(yīng)并賦值即可。 這樣的名稱也與iReport中圖表的數(shù)據(jù)相對應(yīng),不至于搞錯。 如下public classChartDataBeanString serieas;String category;floatvalue;public StringgetCategory()return category;public voidsetCategory(String category)this.category=category;public StringgetSerieas()return serieas;public voidsetSerieas(String serieas)this.serieas=serieas;public floatgetValue()return value;public voidsetValue(float value)this.value=value;然后定義一個(gè)ChartDataSource類,該類應(yīng)用了JRDataSource接口。 該類用于在生成圖表時(shí)將數(shù)據(jù)傳入。 如下public classChartDataSource implementsJRDataSourceprivate intm_nldx;private Vectorv;public ChartDataSource()this(new Vector();public ChartDataSource(Vectorv)this.m_nldx=-1;this.v=v;public ObjectgetFieldValue(JRField arg0)throws JRExceptionObject o=null;String sName=arg0.getName();ChartDataBean resultset=v.elementAt(m_nldx);if(resultset=null)return null;if(sName.equals(serieas)o=resultset.getSerieas();else if(sName.equals(category)o=resultset.getCategory();else if(sName.equals(value)o=resultset.getValue();return o;public booleannext()throws JRException/TODO Auto-generated methodstubm_nldx+;return(m_nldxgetQueryResult()Vectorvector=newVector();ChartDataBean result=new ChartDataBean();result.setCategory(北京);result.setSerieas(聯(lián)通);result.setValue (1500);vector.addElement(result);result=new ChartDataBean();result.setCategory(北京);result.setSerieas(電信);result.setValue (1600);vector.addElement(result);result=new ChartDataBean();result.setCategory(北京);result.setSerieas(移動);result.setValue (2000);vector.addElement(result);result=new ChartDataBean();result.setCategory(上海);result.setSerieas(聯(lián)通);result.setValue (1900);vector.addElement(result);result=new ChartDataBean();result.setCategory(上海);result.setSerieas(電信);result.setValue (600);vector.addElement(result);result=new ChartDataBean();result.setCategory(上海);result.setSerieas(移動);result.setValue (1200);vector.addElement(result);result=new ChartDataBean();result.setCategory(天津);result.setSerieas(聯(lián)通);result.setValue (900);vector.addElement(result);result=new ChartDataBean();result.setCategory(天津);result.setSerieas(電信);result.setValue (800);vector.addElement(result);result=new ChartDataBean();result.setCategory(天津);result.setSerieas(移動);result.setValue (1400);vector.addElement(result);return vector;以上getQueryResult()方法中加入了一些數(shù)據(jù)用于在iReport開發(fā)中測試預(yù)覽用。 實(shí)際上我認(rèn)為,ChartDataSourceProvider類只是為iReport設(shè)計(jì)時(shí)從數(shù)據(jù)源中提取field信息而用的,在報(bào)表生成過程中并不會用到該類。 3.圖表設(shè)計(jì)在前面工作的基礎(chǔ)上,我們就可以利用iReport進(jìn)行圖表開發(fā)了。 首先新建一個(gè)報(bào)表文件,文件名最好能反應(yīng)報(bào)表的內(nèi)容,如bar3DChart;然后定義報(bào)表數(shù)據(jù)源,在定義數(shù)據(jù)源前要先設(shè)置class path,通過菜單option-classpath,在classpath對話框中點(diǎn)擊Add Folder,將你前面開發(fā)數(shù)據(jù)源類的java工程中放置編譯后的.class文件的目錄添加到classpath列表中,如我的是web工程,class的目錄是D:Myprjprj1WebRootWEB-INFclasses;添加一個(gè)新數(shù)據(jù)源,通過菜單data-connection/datasource,打開connection/datasource,點(diǎn)擊new按鈕,在connection properties對話框中選擇JRDataSourceProvider,點(diǎn)擊next按鈕,在新打開的對話框中有兩個(gè)輸入項(xiàng)name和jasperreports datasourceprovider class。 Name可任意輸入,如ChartDataSourceProvider;jasperreports datasourceprovider class則要輸入你前面定義的ChartDataSourceProvider類,一定要輸入全路徑類名,和你在java工程中的包名類名一致如.project1.report.chart.ChartDataSourceProvider,輸入完成后可點(diǎn)擊test按鈕測試一下,如彈出Connection testsuessful!對話框則表明數(shù)據(jù)源類添加成功,否則要檢查一下classpath是否正確設(shè)置。 注這里有個(gè)情況說明一下,如果ChartDataSourceProvider類是在iReport打開后編譯的,那么即使classpath設(shè)置正確,類名輸入也無問題,還是測試失敗。 這時(shí)就必須將iReport關(guān)閉后再打開,測試才會成功,數(shù)據(jù)源才可用,我也不知道這是為什么。 這個(gè)問題在我剛開始用iReport時(shí)困擾了我一天,我新加了一個(gè)數(shù)據(jù)源,但怎么都連不通,反復(fù)檢查各種設(shè)置、路徑、名稱、大小寫等,就是不行,實(shí)在是莫名其妙呀!第二天上班,我開機(jī)后再試試,我什么都沒改動,還是昨天那些東西,竟然連接成功了!我就琢磨了,是不是跟機(jī)器關(guān)開了一次有關(guān)系?機(jī)器一天都是開著的,下班才關(guān),什么都沒動,再開機(jī)問題就解決了?可也不能那么邪乎吧,什么東西做得非要重啟機(jī)器?于是經(jīng)過幾次試驗(yàn)我就發(fā)現(xiàn)數(shù)據(jù)源類在重新編譯后,必須重新啟動一次iReport。 注意要將新加的數(shù)據(jù)源設(shè)為默認(rèn)。 讀取Field,菜單file-report query打開report query對話框,在DataSourceProvider屬性頁中點(diǎn)擊Get fieldsfrom datasource按鈕,下面的列表里會出現(xiàn)field的列表,有serieas、category、value和class,多了個(gè)class,不去管他;點(diǎn)擊ok;下面設(shè)計(jì)圖表了。 在報(bào)表title或summary band中加入一個(gè)圖表工具(chart tool),在彈出的圖表選擇對話框中選擇bar3D,并點(diǎn)擊ok確定。 將band和圖表調(diào)整至合適的大?。浑p擊bar3D圖表,打開bar3DChart對話框,在chart屬性頁中將EvaluationTime設(shè)為report(如選其他選項(xiàng)會出現(xiàn)我不想要的效果,我還沒去仔細(xì)琢磨),然后點(diǎn)擊Edit chart properties按鈕,打開chart properties對話框;在chart properties對話框選擇Chart Data屬性頁,在Chart Data屬性頁中選擇Details屬性頁;點(diǎn)擊Add按鈕添加一個(gè)category series,在彈出的對話框的data屬性頁中有4個(gè)需要定義的表達(dá)式(expression),我們定義前3個(gè)。 如Series Expression,可以通過點(diǎn)擊右邊的按鈕打開表達(dá)式器,在器下邊的objects andexpression屬性頁中左邊第一個(gè)框中選Field,然后在第二個(gè)框中雙擊seriesas,在上邊的文本區(qū)中就會出現(xiàn)表達(dá)式$Fserieas。 點(diǎn)擊應(yīng)用按鈕(?我的iReport中顯示的是套用,我估計(jì)英文應(yīng)該是apply,按咱們的習(xí)慣還是較應(yīng)用吧)。 其他兩個(gè)表達(dá)式如法炮制,結(jié)果應(yīng)該是這樣的series expression$Fserieas、category expression$Fcategory、Value expression$Fvalue、label expression空白;點(diǎn)擊ok;然后關(guān)閉chartproperties對話框。 這時(shí)可以通過菜單build-execute report(Using activeconn.)來預(yù)覽圖表了。 至此,在iReport中的圖表設(shè)計(jì)工作完成。 圖表在web工程中的部署、載入、展現(xiàn)等與報(bào)表的方法是一樣的。 4.圖表部署我用的web服務(wù)器是tomcat5,假定web工程部署在webapps/myproject/中,在webapps/myproject/下新建一個(gè)目錄reports用來放置報(bào)表文件。 將前面iReport編譯生成的bar3DChart.jasper文件放在該目錄下。 .jasper文件默認(rèn)生成在iReport的安裝目錄下。 部署和生成報(bào)表所需的幾個(gè)jar包也要放到myproject/WEB-INF/lib下,這些jar包有jasperreports-2.0. 4、iReport、jfreechart-1.0. 9、jmon-1.0.12等。 版本可能不太一樣。 注意的是,iReport和jasperreport的圖表功能實(shí)際上是用了jfreechart工具來實(shí)現(xiàn)的,所以一定要將jfreechart的jar包導(dǎo)入到工程中。 5.圖表的生成和展示開發(fā)servlet。 我這里以servlet方式生成圖表。 Servlet如下public classReportServlet extendsBaseHttpServlet/*/public voidservice(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletExceptionPrintWriter out=response.getWriter();tryHttpSession session=request.getSession(false);/獲得圖表數(shù)據(jù)。 圖表數(shù)據(jù)是在其他地方查表得到并生成Vector的數(shù)據(jù)列,然后保存在session中傳遞到servlet。 Vector dataList=(Vector)session.getAttribute(storedDataList);/載入圖表,一定要指對路徑和文件名File reportFile=new File(context.getRealPath(/reports/bar3DChart.jasper);if(!reportFile.exists()throw newJRRuntimeException(FileWebappReport.jasper notfound.The reportdesign mustbe piledfirst.);JasperReport jasperReport=(JasperReport)JRLoader.loadObject(reportFile.getPath();/圖表的參數(shù),及ireport中的定義變量,如報(bào)表標(biāo)題、圖表日期等,也是于他處設(shè)置保存在session中Map parameters=(Map)session.getAttribute(jasper_parameters);/這里導(dǎo)入圖表數(shù)據(jù),并生成報(bào)表JasperPrint jasperPrint=JasperFillManager.fillReport(jasperReport,parameters,new ChartDataSource(dataList);/JasperPrint jasperPrint=(JasperPrint)session.getAttribute/(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE);/注以上的步驟實(shí)際上都可以在他處完成,最后將jasperPrint保存到session中,這樣在servlet中只需從session中取得jasperPrint即可(如上面注釋掉的這條語句),可以將servlet做成通用的類來展示輸出所有的報(bào)表。 /輸出html用JRHtmlExporterJRHtmlExporter exporter=new JRHtmlExporter();Map imagesMap=new HashMap();response.setContentType(text/html);request.getSession().setAttribute(IMAGES_MAP,imagesMap);request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,jasperPrint);exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);exporter.setParameter(JRExporterParameter.OUTPUT_WRITER,out);exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP,imagesMap);exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,image?image=);exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML,);exporter.exportReport();catch(JRException e)out.println();out.println();out.println( JasperReports-Web ApplicationSample );out.println( );out.println();out.println();out.println(JasperReportsencountered thiserror:);out.println( ?單元格圖表的優(yōu)勢單元格圖表的優(yōu)勢圖表作為單元格元素插入到報(bào)表中,就可以通過單元格的父子關(guān)系,跟隨主格的擴(kuò)展自動生成相應(yīng)的圖表,而不需要對每組數(shù)據(jù)單獨(dú)制作對應(yīng)的圖表。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 節(jié)能工程合同管理考核試卷
- 工程施工的重點(diǎn)和難點(diǎn)及保證措施
- 古建筑修繕工程施工進(jìn)度計(jì)劃及保證措施
- 建筑施工企業(yè)專職安全生產(chǎn)管理人員安全職責(zé)
- 施工降噪音措施
- 3.確保文明施工的技術(shù)措施及環(huán)境保護(hù)措施
- 有限責(zé)任公司出資合同
- 裝修工程施工合同(網(wǎng)點(diǎn)裝修工程)
- 福州市買賣合同
- 戶外音樂會演出合同
- 礦大畢業(yè)設(shè)計(jì)-固定式帶式輸送機(jī)設(shè)計(jì)
- 《膽囊結(jié)石的護(hù)理》PPT
- 安徽云帆藥業(yè)有限公司原料藥生產(chǎn)項(xiàng)目環(huán)境影響報(bào)告
- 藥品質(zhì)量受權(quán)人管理規(guī)程
- 校本課程之《紅樓夢詩詞曲賞析》教案
- 熱動復(fù)習(xí)題材料熱力學(xué)與動力學(xué)
- 馬工程-公共財(cái)政概論-課程教案
- GB/T 38058-2019民用多旋翼無人機(jī)系統(tǒng)試驗(yàn)方法
- GB/T 30902-2014無機(jī)化工產(chǎn)品雜質(zhì)元素的測定電感耦合等離子體發(fā)射光譜法(ICP-OES)
- GB/T 22638.2-2016鋁箔試驗(yàn)方法第2部分:針孔的檢測
- GB/T 13275-1991一般用途離心通風(fēng)機(jī)技術(shù)條件
評論
0/150
提交評論