ireport+jasperreport+jfreechart完成数据分析

最近在做报表的时候需要对数据进行分析并以饼形图,折线图等形式进行展示,为此使用jfreechart配合ireport和jasperreport配合使用,以达到生成PDF文档,并同时在文档中显示数据以及对数据进行分析后的各种图(主要为饼形图,折线图,柱状图等)的效果。jasperreport+ireport在前文已经讲述过,这里就不在多说了,重点说一下如何配合jfreechart生成分析图吧。主要思路是在jrxml文件中添加图片控件,图片空间引用变量打到将生成的图片画到pdf文件中的目的。我们需要做的步骤如下:

1.添加jar包引用,主要使用的jar如下:

ireport+jasperreport+jfreechart完成数据分析_第1张图片

2.在fontpath标签中引入上述中文包,然后在viewers标签下选择打开pdf文件的程序:

ireport+jasperreport+jfreechart完成数据分析_第2张图片

3.新增变量.如pieJfreeChart,Variable Class为net.sf.jasperreports.engine.JRRenderable,Calculation为System,Reset type为Report,Increment type 为None.

net.sf.jasperreports.engine.JRRenderable为jasperReport一个专门用来处理图表问题公共接口.

ireport+jasperreport+jfreechart完成数据分析_第3张图片

4.新增一个图片元素,并设置图片里的属性.将Image Expression设置为刚才的变量$V{jfreeChart};Expression Class为net.sf.jasperreports.engine.JRRenderable;Scale Image为Fill Frame;Horizontal Alignment为Left;Vertical Alignment为Top;Evaluation Time为Now.

ireport+jasperreport+jfreechart完成数据分析_第4张图片

5.ireport的工作基本完成,下面编写JAVA代码.新建一个类,继承JRDefaultScriptlet类,覆盖afterReportInit()方法,将画图的代码写在该方法里,并将最后的jfreeChart实体,用this.setVariableValue()方法塞到报表的变量里,以填充变量成为图形.

public class JChartReport extends JRDefaultScriptlet {

	public static JFreeChart jrchar;

	public void afterReportInit() throws JRScriptletException {
		/** 画出饼形图 **/
		createPie();

		/** 画出折线图 **/
		createZXT();
		
		/**画出柱形图**/
		createCircular();
	}

	/**
	 * 画出饼形图
	 * 
	 * @throws JRScriptletException
	 */
	private void createPie() throws JRScriptletException {
		DefaultPieDataset dateset = LineCharts.createPieDataset();
		JFreeChart freeChart = LineCharts.createPieChart("用户地区分布饼形图分析", dateset);
		PiePlot3D plot3D = (PiePlot3D) freeChart.getPlot();
		plot3D.setNoDataMessage("无数据被展示");

		// 设置$F{jfreeChart}变量的值
		this.setVariableValue("pieJfreeChart",
				new JFreeChartRenderer(freeChart));
	}

	/**
	 * 画出折线图
	 * @throws JRScriptletException
	 */
	private void createZXT() throws JRScriptletException {
		DefaultCategoryDataset dateset = new DefaultCategoryDataset();
		dateset = LineCharts.createDataset();
		JFreeChart freeChart = LineCharts.createChart("募集资金折线图分析", dateset);
		CategoryPlot cp = (CategoryPlot) freeChart.getPlot();
		cp.setNoDataMessage("无数据被展示");
		// 设置$F{jfreeChart}变量的值
		this.setVariableValue("lineJfreeChart", new JFreeChartRenderer(
				freeChart));
	}
	
	/**
	 * 画出柱状图
	 * @throws JRScriptletException 
	 */
	public void createCircular() throws JRScriptletException{
		CategoryDataset circulardataset = LineCharts.createCircularDataset();
		JFreeChart freeChart = LineCharts.createCircularChart("资金分析柱形图",circulardataset);
		CategoryPlot plot = freeChart.getCategoryPlot();//设置图的高级属性
		plot.setNoDataMessage("无数据被展示");
		// 设置$F{jfreeChart}变量的值
		this.setVariableValue("circularJfreeChart", new JFreeChartRenderer(
						freeChart));
	}
}

6.为了让图形可以在ireport的调试中显示,我们将上面这个类编译成class文件后,打包成jar包,再在ireport中将JAR包引用.工具->选项->classpath->add jar   加入我们打好的jar包,并打上勾将期引用.你的项目属性中将Scriptlet class设置成为你引用的JAR包中的class文件.Language改为java.

7.指定ScriptClass:

ireport+jasperreport+jfreechart完成数据分析_第5张图片

8.最后看一下生成效果:

ireport+jasperreport+jfreechart完成数据分析_第6张图片




你可能感兴趣的:(ireport+jasperreport+jfreechart完成数据分析)