JAVA_将JFreeChart图片导出到Excel

来源:互联网 发布:久米田康治 知乎 编辑:程序博客网 时间:2024/04/27 21:30
 

package jfreechart;

import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.ServletActionContext;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class testBarChart2 extends ActionSupport{
 JFreeChart chart;
 HttpSession session;
 HttpServletRequest request;
 
 @Override
 public String execute() throws Exception {
  request=ServletActionContext.getRequest();
  session=request.getSession();
 
  DefaultCategoryDataset dataset=new DefaultCategoryDataset();
  dataset.addValue(1000,"广州","猪肉");
  dataset.addValue(220,"广州","牛肉");
  dataset.addValue(530,"广州","鸡肉");
  dataset.addValue(340,"广州","鱼肉");
 
  chart=ChartFactory.createBarChart3D("肉类销量统计图","肉类","销

量",dataset,PlotOrientation.VERTICAL,false,false,false);
 
  Font font=new Font("宋体",Font.BOLD,20);
  CategoryPlot plot=(CategoryPlot)chart.getPlot();
  TextTitle textTitle=chart.getTitle();
  textTitle.setFont(font);//设置标题的字体
  CategoryAxis domainAxis=plot.getDomainAxis();//柱状图的x轴
  domainAxis.setTickLabelFont(font);//设置x轴坐标上的字体
  domainAxis.setLabelFont(font);//设置x轴上的标题的字体
  ValueAxis valueAxis=plot.getRangeAxis();//柱状图的y轴
  valueAxis.setTickLabelFont(font);//设置y轴坐标上的字体
  valueAxis.setLabelFont(font);//设置y轴坐标上的标题的字体
 
  /**添加上下面的语句会在临时文件夹下面生成图片,去掉就不会有了*/
  String filename="E:/tomcat/basicsms/apache-tomcat-

6.0.18/temp/"+ServletUtilities.saveChartAsPNG(chart,500,300,null,session);
 
 
  FileOutputStream fileOut = null;
  BufferedImage bufferImg = null;
 
  try {

   // 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
   ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
  
   bufferImg = ImageIO.read(new File(filename));
   ImageIO.write(bufferImg, "png", byteArrayOut);
  
   // 创建一个工作薄
   HSSFWorkbook wb = new HSSFWorkbook();
   HSSFSheet sheet1 = wb.createSheet("new sheet");
   HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
   HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 512, 255,
     (short) 1, 1, (short) 10, 20);
  
   anchor.setAnchorType(2);
   // 插入图片
   patriarch.createPicture(anchor, wb.addPicture(byteArrayOut
     .toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)).resize(0.8);

   fileOut = new FileOutputStream("d:/workbook.xls");
   // 写入excel文件
   wb.write(fileOut);
   fileOut.close();

  } catch (IOException io) {
   io.printStackTrace();
   System.out.println("io erorr : " + io.getMessage());
  } finally {
   if (fileOut != null) {
    try {
     fileOut.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 
  return SUCCESS;
 }
 
 public JFreeChart getChart() {
  return chart;
 }
}
当执行action的时候,图片会在页面显示,也会导入到workbook.xls中,这个例子其实是我在网上找的,

然后拼写成的,希望对你有帮助,我目前也在研究当中,也可以共同讨论


 

原创粉丝点击