【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


然后创建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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值