ireport 56入門教程之柱狀圖的開(kāi)發(fā)過(guò)程_第1頁(yè)
ireport 56入門教程之柱狀圖的開(kāi)發(fā)過(guò)程_第2頁(yè)
ireport 56入門教程之柱狀圖的開(kāi)發(fā)過(guò)程_第3頁(yè)
ireport 56入門教程之柱狀圖的開(kāi)發(fā)過(guò)程_第4頁(yè)
ireport 56入門教程之柱狀圖的開(kāi)發(fā)過(guò)程_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

ireport 56入門教程之柱狀圖的開(kāi)發(fā)過(guò)程 ireport5.6入門教程之柱狀圖的開(kāi)發(fā)過(guò)程ireport5.6入門教程之柱狀圖的開(kāi)發(fā)過(guò)程下面以柱狀圖(bar3DChart)為例,詳細(xì)說(shuō)明圖表的開(kāi)發(fā)過(guò)程。 1.確定數(shù)據(jù)源類型和其中參數(shù)1.確定數(shù)據(jù)源類型和其中參數(shù)我選擇的是JRDataSourceProvider類型的數(shù)據(jù)源。 我也試過(guò)JDBC數(shù)據(jù)源,沒(méi)問(wèn)題,只是我的應(yīng)用需求是要根據(jù)用戶的選擇展示,所以用JRDataSourceProvider更靈活和方便些,不必每次選擇都去查數(shù)據(jù)庫(kù)。 用iReport開(kāi)發(fā)圖表,在定義圖表屬性中的數(shù)據(jù)時(shí),需要添加categoryseries,一個(gè)category series中包括series expression、category expression、Value expression、label expression等。 當(dāng)我開(kāi)始看到這些東西時(shí),真的時(shí)搞不明白是什么意思。 試來(lái)試去,基本上弄清楚了,關(guān)鍵是前3個(gè),Valueexpression很明白是指數(shù)據(jù)的值,category expression代表分組,seriesexpression則代表分組中的不同指標(biāo)。 舉例說(shuō)明我公司的一款數(shù)據(jù)產(chǎn)品銷往全國(guó)各地的不同電信運(yùn)營(yíng)商,圖表要按地區(qū)展示各運(yùn)營(yíng)商的產(chǎn)品套數(shù),那么這里的地區(qū)就是category expression,運(yùn)營(yíng)商就是series expression,Valueexpression就是產(chǎn)品的套數(shù)了。 于是圖表數(shù)據(jù)源的參數(shù)有3個(gè)就夠了,即category、series和value。 其他一些圖表可能情況略有不同,如餅圖(piechart),xylinechart等,如要做的通用些,可再加入些其他參數(shù)。 我這里有3個(gè)足夠了。 2.開(kāi)發(fā)數(shù)據(jù)源類2.開(kāi)發(fā)數(shù)據(jù)源類首先定義一個(gè)用戶圖表的beanChartDataBean,包括3個(gè)成員變量及相應(yīng)的getter和setter。 3個(gè)成員變量的名稱如前所述,無(wú)論圖表要顯示什么樣的數(shù)據(jù),都按這3個(gè)變量進(jìn)行對(duì)應(yīng)并賦值即可。 這樣的名稱也與iReport中圖表的數(shù)據(jù)相對(duì)應(yīng),不至于搞錯(cuò)。 如下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(移動(dòng));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(移動(dòng));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(移動(dòng));result.setValue (1400);vector.addElement(result);return vector;以上getQueryResult()方法中加入了一些數(shù)據(jù)用于在iReport開(kāi)發(fā)中測(cè)試預(yù)覽用。 實(shí)際上我認(rèn)為,ChartDataSourceProvider類只是為iReport設(shè)計(jì)時(shí)從數(shù)據(jù)源中提取field信息而用的,在報(bào)表生成過(guò)程中并不會(huì)用到該類。 3.圖表設(shè)計(jì)在前面工作的基礎(chǔ)上,我們就可以利用iReport進(jìn)行圖表開(kāi)發(fā)了。 首先新建一個(gè)報(bào)表文件,文件名最好能反應(yīng)報(bào)表的內(nèi)容,如bar3DChart;然后定義報(bào)表數(shù)據(jù)源,在定義數(shù)據(jù)源前要先設(shè)置class path,通過(guò)菜單option-classpath,在classpath對(duì)話框中點(diǎn)擊Add Folder,將你前面開(kāi)發(fā)數(shù)據(jù)源類的java工程中放置編譯后的.class文件的目錄添加到classpath列表中,如我的是web工程,class的目錄是D:Myprjprj1WebRootWEB-INFclasses;添加一個(gè)新數(shù)據(jù)源,通過(guò)菜單data-connection/datasource,打開(kāi)connection/datasource,點(diǎn)擊new按鈕,在connection properties對(duì)話框中選擇JRDataSourceProvider,點(diǎn)擊next按鈕,在新打開(kāi)的對(duì)話框中有兩個(gè)輸入項(xiàng)name和jasperreports datasourceprovider class。 Name可任意輸入,如ChartDataSourceProvider;jasperreports datasourceprovider class則要輸入你前面定義的ChartDataSourceProvider類,一定要輸入全路徑類名,和你在java工程中的包名類名一致如.project1.report.chart.ChartDataSourceProvider,輸入完成后可點(diǎn)擊test按鈕測(cè)試一下,如彈出Connection testsuessful!對(duì)話框則表明數(shù)據(jù)源類添加成功,否則要檢查一下classpath是否正確設(shè)置。 注這里有個(gè)情況說(shuō)明一下,如果ChartDataSourceProvider類是在iReport打開(kāi)后編譯的,那么即使classpath設(shè)置正確,類名輸入也無(wú)問(wèn)題,還是測(cè)試失敗。 這時(shí)就必須將iReport關(guān)閉后再打開(kāi),測(cè)試才會(huì)成功,數(shù)據(jù)源才可用,我也不知道這是為什么。 這個(gè)問(wèn)題在我剛開(kāi)始用iReport時(shí)困擾了我一天,我新加了一個(gè)數(shù)據(jù)源,但怎么都連不通,反復(fù)檢查各種設(shè)置、路徑、名稱、大小寫等,就是不行,實(shí)在是莫名其妙呀!第二天上班,我開(kāi)機(jī)后再試試,我什么都沒(méi)改動(dòng),還是昨天那些東西,竟然連接成功了!我就琢磨了,是不是跟機(jī)器關(guān)開(kāi)了一次有關(guān)系?機(jī)器一天都是開(kāi)著的,下班才關(guān),什么都沒(méi)動(dòng),再開(kāi)機(jī)問(wèn)題就解決了?可也不能那么邪乎吧,什么東西做得非要重啟機(jī)器?于是經(jīng)過(guò)幾次試驗(yàn)我就發(fā)現(xiàn)數(shù)據(jù)源類在重新編譯后,必須重新啟動(dòng)一次iReport。 注意要將新加的數(shù)據(jù)源設(shè)為默認(rèn)。 讀取Field,菜單file-report query打開(kāi)report query對(duì)話框,在DataSourceProvider屬性頁(yè)中點(diǎn)擊Get fieldsfrom datasource按鈕,下面的列表里會(huì)出現(xiàn)field的列表,有serieas、category、value和class,多了個(gè)class,不去管他;點(diǎn)擊ok;下面設(shè)計(jì)圖表了。 在報(bào)表title或summary band中加入一個(gè)圖表工具(chart tool),在彈出的圖表選擇對(duì)話框中選擇bar3D,并點(diǎn)擊ok確定。 將band和圖表調(diào)整至合適的大??;雙擊bar3D圖表,打開(kāi)bar3DChart對(duì)話框,在chart屬性頁(yè)中將EvaluationTime設(shè)為report(如選其他選項(xiàng)會(huì)出現(xiàn)我不想要的效果,我還沒(méi)去仔細(xì)琢磨),然后點(diǎn)擊Edit chart properties按鈕,打開(kāi)chart properties對(duì)話框;在chart properties對(duì)話框選擇Chart Data屬性頁(yè),在Chart Data屬性頁(yè)中選擇Details屬性頁(yè);點(diǎn)擊Add按鈕添加一個(gè)category series,在彈出的對(duì)話框的data屬性頁(yè)中有4個(gè)需要定義的表達(dá)式(expression),我們定義前3個(gè)。 如Series Expression,可以通過(guò)點(diǎn)擊右邊的按鈕打開(kāi)表達(dá)式器,在器下邊的objects andexpression屬性頁(yè)中左邊第一個(gè)框中選Field,然后在第二個(gè)框中雙擊seriesas,在上邊的文本區(qū)中就會(huì)出現(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對(duì)話框。 這時(shí)可以通過(guò)菜單build-execute report(Using activeconn.)來(lái)預(yù)覽圖表了。 至此,在iReport中的圖表設(shè)計(jì)工作完成。 圖表在web工程中的部署、載入、展現(xiàn)等與報(bào)表的方法是一樣的。 4.圖表部署我用的web服務(wù)器是tomcat5,假定web工程部署在webapps/myproject/中,在webapps/myproject/下新建一個(gè)目錄reports用來(lái)放置報(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工具來(lái)實(shí)現(xiàn)的,所以一定要將jfreechart的jar包導(dǎo)入到工程中。 5.圖表的生成和展示開(kāi)發(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);/載入圖表,一定要指對(duì)路徑和文件名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即可(如上面注釋掉的這條語(yǔ)句),可以將servlet做成通用的類來(lái)展示輸出所有的報(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)勢(shì)單元格圖表的優(yōu)勢(shì)圖表作為單元格元素插入到報(bào)表中,就可以通過(guò)單元格的父子關(guān)系,跟隨主格的擴(kuò)展自動(dòng)生成相應(yīng)的圖表,而不需要對(duì)每組數(shù)據(jù)單獨(dú)制作對(duì)應(yīng)的圖表。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論