




已閱讀5頁,還剩7頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
ireport 56入門教程之柱狀圖的開發過程 ireport5.6入門教程之柱狀圖的開發過程ireport5.6入門教程之柱狀圖的開發過程下面以柱狀圖(bar3DChart)為例,詳細說明圖表的開發過程。 1.確定數據源類型和其中參數1.確定數據源類型和其中參數我選擇的是JRDataSourceProvider類型的數據源。 我也試過JDBC數據源,沒問題,只是我的應用需求是要根據用戶的選擇展示,所以用JRDataSourceProvider更靈活和方便些,不必每次選擇都去查數據庫。 用iReport開發圖表,在定義圖表屬性中的數據時,需要添加categoryseries,一個category series中包括series expression、category expression、Value expression、label expression等。 當我開始看到這些東西時,真的時搞不明白是什么意思。 試來試去,基本上弄清楚了,關鍵是前3個,Valueexpression很明白是指數據的值,category expression代表分組,seriesexpression則代表分組中的不同指標。 舉例說明我公司的一款數據產品銷往全國各地的不同電信運營商,圖表要按地區展示各運營商的產品套數,那么這里的地區就是category expression,運營商就是series expression,Valueexpression就是產品的套數了。 于是圖表數據源的參數有3個就夠了,即category、series和value。 其他一些圖表可能情況略有不同,如餅圖(piechart),xylinechart等,如要做的通用些,可再加入些其他參數。 我這里有3個足夠了。 2.開發數據源類2.開發數據源類首先定義一個用戶圖表的beanChartDataBean,包括3個成員變量及相應的getter和setter。 3個成員變量的名稱如前所述,無論圖表要顯示什么樣的數據,都按這3個變量進行對應并賦值即可。 這樣的名稱也與iReport中圖表的數據相對應,不至于搞錯。 如下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;然后定義一個ChartDataSource類,該類應用了JRDataSource接口。 該類用于在生成圖表時將數據傳入。 如下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(聯通);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(聯通);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(聯通);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()方法中加入了一些數據用于在iReport開發中測試預覽用。 實際上我認為,ChartDataSourceProvider類只是為iReport設計時從數據源中提取field信息而用的,在報表生成過程中并不會用到該類。 3.圖表設計在前面工作的基礎上,我們就可以利用iReport進行圖表開發了。 首先新建一個報表文件,文件名最好能反應報表的內容,如bar3DChart;然后定義報表數據源,在定義數據源前要先設置class path,通過菜單option-classpath,在classpath對話框中點擊Add Folder,將你前面開發數據源類的java工程中放置編譯后的.class文件的目錄添加到classpath列表中,如我的是web工程,class的目錄是D:Myprjprj1WebRootWEB-INFclasses;添加一個新數據源,通過菜單data-connection/datasource,打開connection/datasource,點擊new按鈕,在connection properties對話框中選擇JRDataSourceProvider,點擊next按鈕,在新打開的對話框中有兩個輸入項name和jasperreports datasourceprovider class。 Name可任意輸入,如ChartDataSourceProvider;jasperreports datasourceprovider class則要輸入你前面定義的ChartDataSourceProvider類,一定要輸入全路徑類名,和你在java工程中的包名類名一致如.project1.report.chart.ChartDataSourceProvider,輸入完成后可點擊test按鈕測試一下,如彈出Connection testsuessful!對話框則表明數據源類添加成功,否則要檢查一下classpath是否正確設置。 注這里有個情況說明一下,如果ChartDataSourceProvider類是在iReport打開后編譯的,那么即使classpath設置正確,類名輸入也無問題,還是測試失敗。 這時就必須將iReport關閉后再打開,測試才會成功,數據源才可用,我也不知道這是為什么。 這個問題在我剛開始用iReport時困擾了我一天,我新加了一個數據源,但怎么都連不通,反復檢查各種設置、路徑、名稱、大小寫等,就是不行,實在是莫名其妙呀!第二天上班,我開機后再試試,我什么都沒改動,還是昨天那些東西,竟然連接成功了!我就琢磨了,是不是跟機器關開了一次有關系?機器一天都是開著的,下班才關,什么都沒動,再開機問題就解決了?可也不能那么邪乎吧,什么東西做得非要重啟機器?于是經過幾次試驗我就發現數據源類在重新編譯后,必須重新啟動一次iReport。 注意要將新加的數據源設為默認。 讀取Field,菜單file-report query打開report query對話框,在DataSourceProvider屬性頁中點擊Get fieldsfrom datasource按鈕,下面的列表里會出現field的列表,有serieas、category、value和class,多了個class,不去管他;點擊ok;下面設計圖表了。 在報表title或summary band中加入一個圖表工具(chart tool),在彈出的圖表選擇對話框中選擇bar3D,并點擊ok確定。 將band和圖表調整至合適的大小;雙擊bar3D圖表,打開bar3DChart對話框,在chart屬性頁中將EvaluationTime設為report(如選其他選項會出現我不想要的效果,我還沒去仔細琢磨),然后點擊Edit chart properties按鈕,打開chart properties對話框;在chart properties對話框選擇Chart Data屬性頁,在Chart Data屬性頁中選擇Details屬性頁;點擊Add按鈕添加一個category series,在彈出的對話框的data屬性頁中有4個需要定義的表達式(expression),我們定義前3個。 如Series Expression,可以通過點擊右邊的按鈕打開表達式器,在器下邊的objects andexpression屬性頁中左邊第一個框中選Field,然后在第二個框中雙擊seriesas,在上邊的文本區中就會出現表達式$Fserieas。 點擊應用按鈕(?我的iReport中顯示的是套用,我估計英文應該是apply,按咱們的習慣還是較應用吧)。 其他兩個表達式如法炮制,結果應該是這樣的series expression$Fserieas、category expression$Fcategory、Value expression$Fvalue、label expression空白;點擊ok;然后關閉chartproperties對話框。 這時可以通過菜單build-execute report(Using activeconn.)來預覽圖表了。 至此,在iReport中的圖表設計工作完成。 圖表在web工程中的部署、載入、展現等與報表的方法是一樣的。 4.圖表部署我用的web服務器是tomcat5,假定web工程部署在webapps/myproject/中,在webapps/myproject/下新建一個目錄reports用來放置報表文件。 將前面iReport編譯生成的bar3DChart.jasper文件放在該目錄下。 .jasper文件默認生成在iReport的安裝目錄下。 部署和生成報表所需的幾個jar包也要放到myproject/WEB-INF/lib下,這些jar包有jasperreports-2.0. 4、iReport、jfreechart-1.0. 9、jmon-1.0.12等。 版本可能不太一樣。 注意的是,iReport和jasperreport的圖表功能實際上是用了jfreechart工具來實現的,所以一定要將jfreechart的jar包導入到工程中。 5.圖表的生成和展示開發servlet。 我這里以servlet方式生成圖表。 Servlet如下public classReportServlet extendsBaseHttpServlet/*/public voidservice(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletExceptionPrintWriter out=response.getWriter();tryHttpSession session=request.getSession(false);/獲得圖表數據。 圖表數據是在其他地方查表得到并生成Vector的數據列,然后保存在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();/圖表的參數,及ireport中的定義變量,如報表標題、圖表日期等,也是于他處設置保存在session中Map parameters=(Map)session.getAttribute(jasper_parameters);/這里導入圖表數據,并生成報表JasperPrint jasperPrint=JasperFillManager.fillReport(jasperReport,parameters,new ChartDataSource(dataList);/JasperPrint jasperPrint=(JasperPrint)session.getAttribute/(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE);/注以上的步驟實際上都可以在他處完成,最后將jasperPrint保存到session中,這樣在servlet中只需從session中取得jasperPrint即可(如上面注釋掉的這條語句),可以將servlet做成通用的類來展示輸出所有的報表。 /輸出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( ?單元格圖表的優勢單元格圖表的優勢圖表作為單元格元素插入到報表中,就可以通過單元格的父子關系,跟隨主格的擴展自動生成相應的圖表,而不需要對每組數據單獨制作對應的圖表。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 探秘古詩詞之美
- 四級英語全攻略
- 山西工程技術學院《機械工程英語》2023-2024學年第二學期期末試卷
- 天津音樂學院《汽車理論A》2023-2024學年第二學期期末試卷
- 南京旅游職業學院《游泳實踐教學》2023-2024學年第二學期期末試卷
- 遼寧省大連市普蘭店市第六中學2024-2025學年高三下第一次測試語文試題含解析
- 江西省豐城市第九中學2025屆初三下學期3月第二次月考生物試題含解析
- 山東省臨沂市蘭山區2025屆小學六年級數學畢業檢測指導卷含解析
- 南華縣2025屆數學四下期末監測模擬試題含解析
- 上海財經大學浙江學院《藥用輔料學》2023-2024學年第二學期期末試卷
- 防洪防汛安全教育知識培訓
- 安寧療護人文關懷護理課件
- 2025年廣東廣州中物儲國際貨運代理有限公司招聘筆試參考題庫附帶答案詳解
- 商場物業人員缺失的補充措施
- 黑龍江省齊齊哈爾市龍江縣部分學校聯考2023-2024學年八年級下學期期中考試物理試題【含答案、解析】
- 《尋常型銀屑病中西醫結合診療指南》
- 2024-2025學年成都高新區七上數學期末考試試卷【含答案】
- 區間估計教學課件
- “記憶中的人、事兒”為副標題(四川眉山原題+解題+范文+副標題作文“追求”主題)-2025年中考語文一輪復習之寫作
- 2024年企業員工研發補貼協議范本模板3篇
- 2024年河南省中職對口升學高考語文試題真題(解析版)
評論
0/150
提交評論