1、import java.util.Map;import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.plot.PiePlot3D;import org.jfree.data.general.DefaultPieDataset;import mon.util.SpringContextUtils;import com.achievo.module.training.domain.AdminDistrict;import com.achievo.module.traini
2、ng.service.IAdminDistrictService;import net.sf.jasperreports.engine.JRDataSource;import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;import net.sf.jasperreports.renderers.JFreeChartRenderer;public class ReportTestAction extends ReportSupport IAdminDistrictService adminDistrictService=
3、(IAdminDistrictService)SpringContextUtils.getBean(adminDistrictService); Override public void addSubReport(JasperReportDataSourceAdapter jrda) /初始化数据 public JRDataSource initJRDataSource() /取业务数据 List reportRows = adminDistrictService.getAll(); if (null = reportRows) reportRows = new ArrayList(); JR
4、BeanCollectionDataSource dataSource = new JRBeanCollectionDataSource( reportRows); return dataSource; public void prepareParam(Map param) reportName = report_test; ReportTestAction继承于ReportSupport,ReportSupport封装了公用的功能,代码如下:import java.awt.Graphics2D;import java.awt.geom.Rectangle2D;import java.io.F
5、ile;import java.io.FileOutputStream;import java.io.IOException;import java.util.HashMap;import org.jfree.chart.plot.PlotOrientation;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.data.xy.XYSeriesCollection;import mon.util.Struts2Utils;import com.achievo.framework.server.web.a
6、ction.AbstractBaseAction;public abstract class ReportSupport extends AbstractBaseAction String reportName; String path; public static final String REPORT_PATH = com/achievo/module/training/action public String getPath() return path; public void setPath(String path) this.path = path; public String ge
7、tReportName() return reportName; public void setReportName(String reportName) this.reportName = reportName; public abstract void prepareParam(Map param); public abstract void addSubReport(JasperReportDataSourceAdapter jrda); /生成报表文件到前台 public String showPdfReport() path = this.getClass().getClassLoa
8、der().getResource( REPORT_PATH).getPath(); /* Parameters */ Map params = new HashMap(); params.put(sub_dir, path); prepareParam(params); ReportDataSource rds = new ReportDataSource(); / Template file path rds.setReportTemplatePath(path + /+ reportName + .jrxml / Compiled file path rds.setJasperRepor
9、tPath(path + + reportName.jasper / Parameters rds.setParams(params); / JRDataSource rds.setJRDataSource(initJRDataSource(); / OutPutFile name rds.setOutPutFileName(reportName + .pdf / Compile and fill value to the report JasperReportDataSourceAdapter jrda = new JasperReportDataSourceAdapter( rds); /
10、 Export report constructor Report report = new JasperReportObject(); try /添加子报表(如果有) addSubReport(jrda); /以PDF方式导出 report.export(Struts2Utils.getRequest(), Struts2Utils.getResponse(), jrda.getJaspertPrint(), Struts2Utils.getResponse().getOutputStream(), Report.REPORT_EXPORT_PDF, rds.getOutPutFileNam
11、e(); catch (ReportException e) e.printStackTrace(); catch (IOException e) return null; public abstract JRDataSource initJRDataSource(); BufferedImage extractImage(JFreeChart chart, int width, int height) BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2
12、= img.createGraphics(); chart.draw(g2, new Rectangle2D.Double(0, 0, width, height); g2.dispose(); return img; JFreeChart createChart(XYSeriesCollection dataSet) JFreeChart jfreechart = ChartFactory.createXYBarChart(null, , false, , dataSet, PlotOrientation.HORIZONTAL, false, false, false); return jf
13、reechart;ReportSupport的实现需要用到下列类:JasperReportDataSourceAdapter,JasperReportObject,Report,ReportDataSource,ReportException。map为提供给报表的参数,如日期范围等。struts.xml配置如下: 三、利用iReport开发报表1. 新建数据源打开iReport,点击下图像插头一样的Report Datasources,弹出对象框中New,选择JavaBeans set datasource后Next,输入Name为demo后Save,如下两图:2. 增加类路径点击“工具”“选
14、项”,选择classpath标签页,点击Add Folder,将项目类路径加入,如下图路径为:C:UserslinliDocumentsworkspaceJSReportDemobuildclasses3. 新建报表点击 create a new reportOpen this Template后,输入报表名这里是demoReport后下一步,继续完成。4. 读取bean属性点击Preview字样右边的按钮设置数据源,在弹出框中选择JavaBean Datasource标签页,在Class name中输入类名,点击Read attributes会列出类中所有属性。选中所需的属性,点击对话框中间
15、的Add selected field(s)增加到报表字段中。6. 设计报表将左侧Report Inspector中Fields下刚加入的字段托到报表设计器中,设计完的报表如下图:7. 运行报表将demoReport.jxml文件复制到项目,启动容器,浏览器下查看报表如下:四,利用JFreeChart画图方式一,利用IReport的chart tool控件:将chart拖到报表中,选择类型,如pie:点击右键,选择Chart Data菜单,需要设置Key expression,Value expression,Label expression,其中$FdisId,$Fname均来自于数据源,效
16、果如下:方式二,利用Scriptlet,创建一个Java类,如JChartReportDemo,继承于JRDefaultScriptlet,重写afterReportInit,代码如下:import net.sf.jasperreports.engine.JRDefaultScriptlet;import net.sf.jasperreports.engine.JRScriptletException;public class JChartReportDemo extends JRDefaultScriptlet public void afterReportInit() throws JRS
17、criptletException /create pie chart dataset DefaultPieDataset dateset = new DefaultPieDataset(); /set dataset value dateset.setValue(Chinese, 108);Math, 110);English, 74);Science Department, 226); /*/* * create jfreeChart object * the first parameter is pie chart title * the secend parameter is data
18、set of pie chart * the three parameter is boolean value,create chart note * the four parameter is boolean value,its a tooltip of move mouse on * configure chart to generate URLs,Its get a PiePlot3D object * */ JFreeChart freeChart = ChartFactory.createPieChart3D(Report Pie Chart, dateset, true, true
19、, false); PiePlot3D plot3D = (PiePlot3D) freeChart.getPlot(); plot3D.setNoDataMessage(No data to display / set variable jfreeChart value this.setVariableValue(, new JFreeChartRenderer(freeChart);将该Scriptlet加入报表,方法如下:在Scriptlets中添加刚才编写的JChartReportDemo;在报表加入一个Image控件,设置它的属性:其中Image Expression设置为$VjfreeChart,Expression Class设为net.sf.jasperreports.engine.JRRenderable。保存报表,运行效果如下:方式三,利用参数或JavaBean属性传递数据在参数中加入如下代码:Override DefaultPieDataset dateset = new DefaultPieDataset(); param.put(pfreeChart将报表Image控件的Image Expression设为$PpfreeChart。运行效果如下:
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2