报表组件_JFreeChart


JFreeChart主要是用来制作各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱线图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。


JFreeChart代码是开源的,但是文档和代码演示收费。



图表类似于以下效果


【JFreeChart报表组件】使用JFreeChart进行图形报表打印_DefaultCategoryDatas



主页


​http://www.jfree.org/jfreechart/​



下载




JFreeCHart1.0.19.zip

解压后可以运行jfreechart-1.0.19-demo.jar,观看Demo


在lib下找到这两个jar


jcommon-1.0.23.jar
jfreechart-1.0.19.jar


我们首先创建一个java project,名为JFreeCHartTest

【JFreeChart报表组件】使用JFreeChart进行图形报表打印_图形报表_02

【JFreeChart报表组件】使用JFreeChart进行图形报表打印_DefaultCategoryDatas_03

然后创建lib文件夹,将两个jar包导入,然后add to BuildPath


【JFreeChart报表组件】使用JFreeChart进行图形报表打印_ChartFactory_04



事先在G盘下创建了一个名为Chart的文件夹,用来放置待会打印的报表文件。


【JFreeChart报表组件】使用JFreeChart进行图形报表打印_ChartFactory_05



我们下面写一个简单的示例代码


【JFreeChart报表组件】使用JFreeChart进行图形报表打印_ChartFactory_06



下面是示例代码的详细内容


package com.org.jfreechart.test;

import java.awt.Font;
import java.io.FileOutputStream;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

/**
* 演示最简单的柱状图生成
* */
public class TestJFressChart{
public static void main(String[] args) {
CategoryDataset dataset=getDataSet2();
ChartFactory.setChartTheme(applyChartTheme());//设置主题样式,不然输出不了中文
JFreeChart chart =ChartFactory.createBarChart3D(
"水果产量图", //图表标题
"水果", //目录轴的显示标签
"产量", //数值轴的显示标签
dataset,//数据集
PlotOrientation.VERTICAL,//图表方向:水平、垂直
true, //是否显示图例(对于简单的柱状图必须是true)
false,//是否生成工具
false //是否生成URL链接
);
FileOutputStream fos_jpg=null;
try {
fos_jpg=new FileOutputStream("G:\\Chart\\fruit.jpg");
//下面的参数分别是输出流、质量、图表数据、宽度、高度、备注信息
ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart,400, 300,null);
}catch (Exception e) {
e.printStackTrace();
}finally{
try {
fos_jpg.close();
} catch (Exception e) {
e.printStackTrace();
}
}

}

/**
* 获取一个演示用的简单数据集对象
* */
private static CategoryDataset getDataSet2() {
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.addValue(100, "北京", "苹果");
dataset.addValue(100, "上海", "苹果");
dataset.addValue(100, "广州", "苹果");
dataset.addValue(200, "北京", "香蕉");
dataset.addValue(200, "上海", "香蕉");
dataset.addValue(200, "广州", "香蕉");
dataset.addValue(300, "北京", "凤梨");
dataset.addValue(300, "上海", "凤梨");
dataset.addValue(300, "广州", "凤梨");
dataset.addValue(400, "北京", "葡萄");
dataset.addValue(400, "上海", "葡萄");
dataset.addValue(400, "广州", "葡萄");
dataset.addValue(500, "北京", "荔枝");
dataset.addValue(500, "上海", "荔枝");
dataset.addValue(500, "广州", "荔枝");
return dataset;
}


private static StandardChartTheme applyChartTheme() {
//创建主题样式
StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
//设置标题字体
standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
//设置图例的字体
standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));
//设置轴向的字体
standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));
return standardChartTheme;
}
}


上面的程序就是首先获取一个数据集(这个数据集的数据是自己需要打印的数据),之后这个数据集就会被用来打印报表。接下来通过图表工厂生成相应的chart对象,其中封装了要打印的其它数据信息。


最后我们创建一个输出流,使用ChartUtilities工具的writeChartAsJPEG方法,将相应的chart对象写成一个jpg格式的图片。



运行该程序,我们会发现在G盘的Chart文件夹下生成了一张报表图:


【JFreeChart报表组件】使用JFreeChart进行图形报表打印_jfreechart_07


效果


【JFreeChart报表组件】使用JFreeChart进行图形报表打印_DefaultCategoryDatas_08



怎么样,是不是很神奇?


我们把设置Chart的属性中的PlotOrientation.VERTICAL竖直显示改为PlotOrientation.HORIZONTAL水平显示,打印出的效果如下:


【JFreeChart报表组件】使用JFreeChart进行图形报表打印_DefaultCategoryDatas_09



我们再修改成熟chart的代码,去生成一个饼状图:


package com.org.jfreechart.test;

import java.awt.Font;
import java.io.FileOutputStream;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;

/**
* 演示最简单的柱状图生成
* */
public class TestJFressChart{
public static void main(String[] args) {
//获取饼状图数据
PieDataset pieDataset=getPieDataSet();
ChartFactory.setChartTheme(applyChartTheme());//设置主题样式,不然输出不了中文
JFreeChart piechart =ChartFactory.createPieChart3D(
"水果产量图", //图表标题
pieDataset,//数据集
true, //是否显示图例(对于简单的柱状图必须是true)
false,//是否生成工具
false //是否生成URL链接
);
FileOutputStream fos_jpg=null;
try {
//打印饼状图为fruit.jpg
fos_jpg=new FileOutputStream("G:\\Chart\\fruit.jpg");
//下面的参数分别是输出流、质量、图表数据、宽度、高度、备注信息
ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, piechart,400, 300,null);
}catch (Exception e) {
e.printStackTrace();
}finally{
try {
fos_jpg.close();
} catch (Exception e) {
e.printStackTrace();
}
}

}


/**
* 获取一个饼状图的简单数据集对象
* */
private static PieDataset getPieDataSet() {
DefaultPieDataset dataset=new DefaultPieDataset();
dataset.setValue("苹果",100);
dataset.setValue("香蕉",200);
dataset.setValue("凤梨",300);
dataset.setValue("葡萄",400);
dataset.setValue("荔枝",500);
return dataset;
}

private static StandardChartTheme applyChartTheme() {
//创建主题样式
StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
//设置标题字体
standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
//设置图例的字体
standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));
//设置轴向的字体
standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));
return standardChartTheme;
}
}


效果:


【JFreeChart报表组件】使用JFreeChart进行图形报表打印_ChartFactory_10



以上就是最简单的报表打印代码逻辑的编写。下次我们深入探讨,去打印一些比较复杂的报表。


​​​