jfreechart生成柱状图写到jsp页面并打印

来源:互联网 发布:冰岛语消失知乎 编辑:程序博客网 时间:2024/04/29 03:44

http://shop59544428.taobao.com/

<servlet>
   <servlet-name>DisplayChart</servlet-name>
   <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>DisplayChart</servlet-name>
   <url-pattern>/DisplayChart</url-pattern>
  </servlet-mapping>
   <listener>
    <listener-class>org.jfree.chart.servlet.ChartDeleter</listener-class>
  </listener>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style type='text/css'>
 @media screen{.printhide{display:block}}
 @media print{.printhide{display:none}}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<img src="testJfreechar">
<div  class="printhide">
<a href="#" onclick="javascript:window.print();">打印本页</a>
</div>
</body>
</html>

 

/**
  * 图表数据集
  * @return
  */
 @RequestMapping("/testJfreechar")
 public void createDataset(HttpServletRequest request,ServletResponse res){
//  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
//  dataset.addValue(500, "java图书", "java开发");
//  dataset.addValue(100, "java图书", ".Net开发");
//  dataset.addValue(900, "java图书", "linux系统");
  double[][] data = new double[][] {{672, 766, 223, 540, 126}, {325, 521, 210, 340, 106}, {332, 256, 523, 240, 526}};
  String[] rowKeys = {"苹果","梨子","葡萄"};
  String[] columnKeys = {"北京","上海","广州","成都","深圳"};
  CategoryDataset dataset =DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
  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));
  //应用主题样式        
  ChartFactory.setChartTheme(standardChartTheme);

  JFreeChart chart = ChartFactory.createBarChart3D("java图书销售统计",//图表标题
    "java图书",//横轴标题
    "销量(本)",//纵轴标题
    dataset,//数据集
    PlotOrientation.VERTICAL,//图表方向
    true,//是否显示图例标识
    true,//是否显示图例
    true//是否支持超链接
    );
  CategoryPlot plot = chart.getCategoryPlot();
  CategoryAxis domainAxis = plot.getDomainAxis();
  //设置 columnKey 是否垂直显示
  //domainAxis.setVerticalCategoryLabels(true);
  //设置距离图片左端距离
  domainAxis.setLowerMargin(0.1);
  //设置距离图片右端距离
  domainAxis.setUpperMargin(0.1);
  //设置 columnKey 是否间隔显示
  //domainAxis.setSkipCategoryLabelsToFit(true);
  plot.setDomainAxis(domainAxis);
  ValueAxis rangeAxis = plot.getRangeAxis();
  //设置最高的一个柱与图片顶端的距离
  rangeAxis.setUpperMargin(0.15);
  //设置最低的一个柱与图片底端的距离
  //rangeAxis.setLowerMargin(0.15);
  plot.setRangeAxis(rangeAxis);


  BarRenderer3D renderer = new BarRenderer3D();
  renderer.setBaseOutlinePaint(Color.BLACK);
  //设置 Wall 的颜色
  renderer.setWallPaint(Color.gray);
  //设置每种水果代表的柱的颜色
  renderer.setSeriesPaint(0, new Color(0, 0, 255));
  renderer.setSeriesPaint(1, new Color(0, 100, 255));
  renderer.setSeriesPaint(2, Color.GREEN);
  //设置每种水果代表的柱的 Outline 颜色
  renderer.setSeriesOutlinePaint(0, Color.GREEN);
  renderer.setSeriesOutlinePaint(1, Color.BLACK);
  renderer.setSeriesOutlinePaint(2, Color.GREEN);
  //设置每个地区所包含的平行柱的之间距离
  renderer.setItemMargin(0.3);
  //显示每个柱的数值,并修改该数值的字体属性
  renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
  renderer.setItemLabelFont(new Font("黑体",Font.PLAIN,12));
  renderer.setItemLabelsVisible(true);
   renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
       ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
     renderer.setItemLabelAnchorOffset(10D);

  plot.setRenderer(renderer);
  //设置柱的透明度
  plot.setForegroundAlpha(0.6f);
  //设置地区、销量的显示位置
  plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
  plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);

 

 

 

 

  try {
   ChartUtilities.writeChartAsJPEG(res.getOutputStream(), chart, 500, 400);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }