`
wangrusheng5200
  • 浏览: 302551 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jreechart生成图片路径

阅读更多

本文介绍jfreechart在web中怎样确定图片生成的位置

并且包含了一个jfreechart样式工具类。

webfreechar2.rar对折线图做了更新

http://www.jfree.org/

 

1、项目结构

项目结构

2、ChartUtil.java

package com.jfreechart.util;

/**
 * <br>
 * 功能描述:  <br>
 * 版权所有: victor <br>
 * 日期:2009
 * 
 * @author 金鳞
 * @version 1.0
 */
import java.awt.Color;
import java.awt.Font;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.TextAnchor;

public class ChartUtil {
	/*
	 * 报表字体
	 */
	private static final Font CHART_FONT = new Font("宋体", 12, 12);
	// 配置字体
	private static final Font titlefont = new Font("隶书", Font.BOLD, 24);// 图片标题字体大小,样式
	private static final Font xfont = new Font("宋体", Font.PLAIN, 18);// X轴字体大小,样式
	private static final Font yfont = new Font("宋体", Font.PLAIN, 18);// y轴字体大小,样式
	private static final Font illustrationfont = new Font("宋体", Font.PLAIN, 18);// 底部字体大小,样式

	/**
	 * 获得一个时间轴报表图(暂时不使用)
	 * 
	 * @param title
	 *            标题
	 * @param xSubject
	 *            X轴标题
	 * @param ySubject
	 *            Y轴标题
	 * @param dataset
	 *            数据源
	 * @return 报表
	 */
	public static JFreeChart getTimeSeriesChart(String title, String xSubject,
			String ySubject, XYDataset dataset) {
		JFreeChart chart = ChartFactory.createTimeSeriesChart(title, xSubject,
				ySubject, dataset, true, true, false);

		chart.setBackgroundPaint(new Color(230, 239, 248));

		XYPlot plot = (XYPlot) chart.getPlot();
		plot.setBackgroundPaint(Color.lightGray);
		plot.setDomainGridlinePaint(Color.white);
		plot.setRangeGridlinePaint(Color.white);
		plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
		plot.setDomainCrosshairVisible(true);
		plot.setRangeCrosshairVisible(true);

		XYItemRenderer r = plot.getRenderer();
		if (r instanceof XYLineAndShapeRenderer) {
			XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r;
			renderer.setBaseShapesVisible(true);
			renderer.setBaseShapesFilled(true);
			renderer.setDrawSeriesLineAsPath(true);
		}

		// DateAxis axis = plot.getDomainAxis();
		// axis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));
		plot.setNoDataMessage("没有数据显示");

		// 设置字体,解决中文乱码问题
		chart.getTitle().setFont(CHART_FONT);
		chart.getLegend().setItemFont(CHART_FONT);
		// plot.getRangeAxis().setLabelFont(CHART_FONT);
		plot.getDomainAxis().setLabelFont(new Font("宋体", 12, 24));
		return chart;
	}

	/**
	 * <br>
	 * 方法说明:设置柱状图样式 <br>
	 * 输入参数: <br>
	 * 返回类型:
	 */
	public static void barStyle(JFreeChart chart) {
		CategoryPlot plot = chart.getCategoryPlot();// 图表的绘制结构对象
		// 设置图表标题字体
		chart.setTitle(new TextTitle(chart.getTitle().getText(), titlefont));
		// X轴
		CategoryAxis domainAxis = plot.getDomainAxis();
		domainAxis.setLabelFont(xfont);// 设置X轴标签字体大小
		domainAxis.setLabelPaint(Color.BLUE); // 设置X轴标签字体颜色
		domainAxis.setTickLabelFont(xfont);// 设置X轴数值的字体大小
		domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);// 横轴上的标签字体的显示样式,比如说:正斜体,反斜体,标准等等,
		// Y轴
		ValueAxis rangeAxis = plot.getRangeAxis();
		rangeAxis.setLabelFont(yfont);// 设置Y轴标签字体的大小,样式
		rangeAxis.setLabelPaint(Color.BLUE);// 设置Y轴标签字体颜色
		rangeAxis.setTickLabelFont(yfont);// 设置Y轴上的数字的字体大小
		// 如果存在图例信息,设置图例字体
		if (chart.getLegend() != null) {
			chart.getLegend().setItemFont(illustrationfont);
		}
		// 图表其他特性
		BarRenderer3D renderer = new BarRenderer3D();
		// 显示每个柱的数值,并修改该数值的字体属性
		renderer
				.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));
		renderer.setItemLabelsVisible(true);
		plot.setRenderer(renderer);

	}

	/**
	 * <br>
	 * 方法说明:设置饼图样式 <br>
	 * 输入参数: <br>
	 * 返回类型:
	 */
	public static void pieStyle(JFreeChart chart) {
		// 设置图表标题字体
		chart.setTitle(new TextTitle(chart.getTitle().getText(), titlefont));
		PiePlot3D plot = (PiePlot3D) chart.getPlot();
		// 设置饼图的图例标签的字体样式
		chart.getLegend().setItemFont(illustrationfont);
		// 指定饼图轮廓线的颜色
		plot.setBaseSectionOutlinePaint(Color.BLACK);
		// 设置无数据时的信息
		plot.setNoDataMessage("无对应的数据,请重新查询。");
		// 设置无数据时的信息显示颜色
		plot.setNoDataMessagePaint(Color.red);
		// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
		plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
				"{0}={1}({2})", NumberFormat.getNumberInstance(),
				new DecimalFormat("0.00%")));
		// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
		// plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
		// "{0}={1}({2})"));
		plot.setLabelFont(new Font("SansSerif", Font.TRUETYPE_FONT, 12));
		// // 设置分饼颜色
		// plot.setSectionPaint(pieKeys[0], new Color(244, 194, 144));
		// plot.setSectionPaint(pieKeys[1], new Color(144, 233, 144));

	}

	/**
	 * <br>
	 * 方法说明:设置曲线图样式 <br>
	 * 输入参数: <br>
	 * 返回类型:
	 */
	public static void timeSeriesStyle(JFreeChart chart) {
		// 设置图表标题字体
		chart.setTitle(new TextTitle(chart.getTitle().getText(), titlefont));
		// 设置折线图的图例标签的字体样式
		chart.getLegend().setItemFont(illustrationfont);
		CategoryPlot plot = (CategoryPlot) chart.getPlot();
		// x轴 // 分类轴网格是否可见
		plot.setDomainGridlinesVisible(true);
		// y轴 //数据轴网格是否可见
		plot.setRangeGridlinesVisible(true);

		CategoryAxis domainAxis = plot.getDomainAxis();
		domainAxis.setLabelFont(xfont);// X 轴标题
		domainAxis.setTickLabelFont(xfont);// x 轴数值

		domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的
		ValueAxis rangeAxis = plot.getRangeAxis();
		rangeAxis.setLabelFont(yfont);// 设置Y轴字体的大小,样式
		rangeAxis.setLabelPaint(Color.BLUE);// 设置Y轴标签字体颜色
		rangeAxis.setTickLabelFont(yfont);// 设置Y轴上的数字的字体大小
		// 获得renderer
		LineAndShapeRenderer renderer = new LineAndShapeRenderer();

		renderer.setBaseShapesVisible(true); // series 点(即数据点)可见
		renderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见
		renderer.setBaseItemLabelsVisible(true);
		renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
				ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
		renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		renderer.setBaseItemLabelFont(new Font("Dialog", 1, 12));
		plot.setRenderer(renderer);
	}
}

 3、ChartServlet.java

package com.victor.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

import com.jfreechart.util.ChartUtil;

public class ChartServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		 String path = getPath() + "fruit.jpg";
		File file = new File(path);
		System.out.print(path);
		if (!file.exists()){
			System.out.print(path);
			getBarChart(path);
		}
		response.sendRedirect("chart.jsp");
	}

	private String getPath() {
		// 获得当前class文件路径
		String path = this.getClass().getClassLoader().getResource("")
				.getPath();

		path = path.substring(1, path.length()-16);
		return path;
	}

	public static void getBarChart(String path) throws IOException {
		CategoryDataset dataset = getDataSet2();
		// 获取柱状图
		JFreeChart chart = ChartFactory.createBarChart3D("水果产量"// 图表标题
				, "水果"// X轴标题
				, "产量"// Y轴标题
				, dataset// 数据集
				, PlotOrientation.VERTICAL// 图表方向:水平、垂直
				, false// 是否显示图例(对于简单的柱状图必须是false)
				, true// 是否生成工具
				, false// 是否生成URL链接
				);
		// 设置图表样式
		ChartUtil.barStyle(chart);
		FileOutputStream fos_jpg = null;
		try {
			fos_jpg = new FileOutputStream(path);

			ChartUtilities.writeChartAsJPEG(fos_jpg, 0.9f// 分辨率
					, chart, 650, 300, null);

		} finally {
			try {
				fos_jpg.close();
			} catch (Exception e) {
			}
		}
	}

	/**
	 * 获取一个演示用的组合数据集对象
	 * 
	 * @return
	 */
	public 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;
	}

}

 4、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>ChartServlet</servlet-name>
    <servlet-class>com.victor.servlet.ChartServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ChartServlet</servlet-name>
    <url-pattern>/ChartServlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 5、效果

 

  • 大小: 8.9 KB
  • 大小: 67.6 KB
1
0
分享到:
评论

相关推荐

    jreechart

    - **`setBackgroundImageAlignment(int alignment)`**:设置背景图片的对齐方式,`alignment`参数取值来自`org.jfree.ui.Align`类的常量,如`Align.LEFT`、`Align.CENTER`等。 - **`setBackgroundImageAlpha(float ...

    jreechart.jar

    jreechart的jar包,可以绘制各种图表,java工具包,导入即可使用。

    jreechart官网

    标题"jreechart官网"指的是JFreeChart项目的官方网站,可能是提供下载、文档、示例和更新信息的地方。 描述中提到的"最新的是1.0.19,但是这是常用的版本,最新的不一定是最好的哦",意味着当前JFreeChart的稳定版本...

    jreechart jar包

    在使用“jreechart jar包”时,通常需要将其添加到项目的类路径中,以便程序能正确地找到并加载这个库。对于基于Maven或Gradle的项目,可以通过配置依赖来自动管理jar包。对于传统的Java项目,可以直接将jar包复制到...

    jreechart v1.0.6 Installation Guide

    使用 `javadoc` 工具生成 API 文档,便于开发者参考。 #### 四、JFreeChart 开发者指南 - **概述**:提供了一个全面的指南,帮助开发者深入了解 JFreeChart 的使用方法。 - **指南内容**:覆盖了从基本概念到高级...

    jreechart-sources

    jreechart-sources包,java开发图表使用,java工具包。

    jreechart-jar(new).zip

    提供了较新的jar包,关于java使用JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的...

    JFreeChar安装指南

    使用Javadoc工具生成JFreeChart的API文档。 #### 四、JFreeChart开发者指南 **4.1 概览** JFreeChart开发者指南为开发者提供详细的使用指导。 **4.2 指南内容** 包括但不限于: - 如何使用JFreeChart创建图表。 -...

    FJreeChart_A3:jfreechart的持续集成

    JFreeChart 是一个广泛使用的开源 Java 图形库,它提供了丰富的图表类型,包括柱状图、饼图、线图、散点图等,使得开发者能够在 Java 应用程序、Swing 组件、Web 应用以及服务器端生成高质量的图表。"FJreeChart_A3...

    JFreeChart入门_-_使用JFreeChart开发Pie(饼状图)

    JFreeChart 是一个开源的 Java 图形库,用于生成高质量的图表,包括饼状图、柱状图、线形图等多种类型。在本教程中,我们将深入探讨如何使用 JFreeChart 创建饼状图(Pie Chart),这是一个常用于展示数据部分比例的...

    struts 生成图表

    在这个小实验中,我们将探讨如何利用Struts2和JFreeChart库在JSP页面上生成饼图。 **1. Struts2基础** Struts2的核心是Action类,它是业务逻辑的载体。Action类处理用户请求,执行相应的业务逻辑,并将结果转发给视...

    漏鱼之网的图形组件,支持jfreechart fusionchart

    支持jreechart、fusionchart的图形组件jar包 接口统一,使用简便

    Struts2+Ibatis+Spring3.0完整项目(直接运行)

    耗时3天,对Struts2+Ibatis+Spring3.0+JreeChart进行了完整整合 包括Spring3.0的事务配置 OSCache二级缓存的配置 log4j实现输出Sql到控制台 JfreeChart与Struts2,Spring3.0的整合 对一个简单的表实现查询,批量删除...

    JFreeChart

    这个库广泛应用于数据分析、报表生成以及可视化展示,尤其在 Java 企业级应用和 Web 应用中非常常见。 **一、JFreeChart 的基本概念与功能** 1. **图表类型**:JFreeChart 支持多种图表类型,如线形图(LineChart...

    JFreeChartDeveloperGuid

    在Servlet或JSP中,JFreeChart可以与JavaServer Pages (JSP) 或者 JavaServer Faces (JSF) 结合,通过ByteArrayOutputStream将图表转换成JPEG或PNG图片,然后以HTTP响应的方式发送给浏览器。 **五、JFreeChart的...

    JFreeChart1.0.9 lib

    这个库在1.0.9版本中提供了丰富的功能,适合用于商业应用、数据分析以及报告生成等多个领域。JFreeChart 的核心设计目标是易用性和灵活性,使得开发者能够方便地定制图表的每一个细节。 **1. JFreeChart 库的基本...

Global site tag (gtag.js) - Google Analytics