天天看點

【JFreeChart報表元件】使用JFreeChart進行圖形報表列印

報表元件_JFreeChart

JFreeChart主要是用來制作各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱線圖)、線圖、區域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。

JFreeChart代碼是開源的,但是文檔和代碼示範收費。

圖表類似于以下效果

【JFreeChart報表元件】使用JFreeChart進行圖形報表列印

首頁

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

【JFreeChart報表元件】使用JFreeChart進行圖形報表列印
【JFreeChart報表元件】使用JFreeChart進行圖形報表列印

然後建立lib檔案夾,将兩個jar包導入,然後add to BuildPath

【JFreeChart報表元件】使用JFreeChart進行圖形報表列印

事先在G盤下建立了一個名為Chart的檔案夾,用來放置待會列印的報表檔案。

【JFreeChart報表元件】使用JFreeChart進行圖形報表列印

我們下面寫一個簡單的示例代碼

【JFreeChart報表元件】使用JFreeChart進行圖形報表列印

下面是示例代碼的詳細内容

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報表元件】使用JFreeChart進行圖形報表列印

怎麼樣,是不是很神奇?

我們把設定Chart的屬性中的PlotOrientation.VERTICAL豎直顯示改為PlotOrientation.HORIZONTAL水準顯示,列印出的效果如下:

【JFreeChart報表元件】使用JFreeChart進行圖形報表列印

我們再修改成熟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進行圖形報表列印

以上就是最簡單的報表列印代碼邏輯的編寫。下次我們深入探讨,去列印一些比較複雜的報表。

轉載請注明出處:http://blog.csdn.net/acmman/article/details/52100192

繼續閱讀