ireport 56入门教程之柱状图的开发过程_第1页
ireport 56入门教程之柱状图的开发过程_第2页
ireport 56入门教程之柱状图的开发过程_第3页
ireport 56入门教程之柱状图的开发过程_第4页
ireport 56入门教程之柱状图的开发过程_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论