報表元件_JFreeChart
JFreeChart主要是用來制作各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱線圖)、線圖、區域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。
JFreeChart代碼是開源的,但是文檔和代碼示範收費。
圖表類似于以下效果
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DO0cjMzgTN4AzMwgDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
首頁
http://www.jfree.org/jfreechart/
下載下傳
http://download.csdn.net/download/stdying/7797063
有 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
然後建立lib檔案夾,将兩個jar包導入,然後add to BuildPath
事先在G盤下建立了一個名為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;
/**
* 示範最簡單的柱狀圖生成
* */
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檔案夾下生成了一張報表圖:
效果
怎麼樣,是不是很神奇?
我們把設定Chart的屬性中的PlotOrientation.VERTICAL豎直顯示改為PlotOrientation.HORIZONTAL水準顯示,列印出的效果如下:
我們再修改成熟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;
}
}
效果:
以上就是最簡單的報表列印代碼邏輯的編寫。下次我們深入探讨,去列印一些比較複雜的報表。
轉載請注明出處:http://blog.csdn.net/acmman/article/details/52100192