jfreechart为1.0.12版本,用writeChartAsPNG、writeChartAsJPEG方法输出到浏览器,生成的图片另存为看到得都是保存为BMP格式选项,httplook工具抓取到得信息是:13746 bytes skipped. Reason: The content type is not captured(已经为writeChartAsPNG、writeChartAsJPEG的输出设置了content type :image/png 和 image/jpeg)坛子里有人曾说过设置输出的质量就可以解决,但我做的实验确都不能成功,请问是如何处理的?

解决方案 »

  1.   

    分析jfreechart的源码,发现saveChartAsPNG最终还是调用writeChartAsPNG方法来实现,因此我认为应该不是writeChartAsPNG方法本身的问题,会不会是我调用writeChartAsPNG中传入的ServletOutputStream的问题呢?
    response.reset();
    response.setHeader("Pragma","No-cache");
    response.setHeader("Cache-Control","no-cache");
    response.setDateHeader("Expires", 0);
    response.setContentType("image/png");
    ServletOutputStream output = response.getOutputStream(); 
                    ......
                    ChartUtilities.writeChartAsPNG(output , chart,   width ,  height,true,9);
      

  2.   

    问题找到了,去掉以下代码:
    response.reset(); 
    response.setHeader("Pragma","No-cache"); 
    response.setHeader("Cache-Control","no-cache"); 
    response.setDateHeader("Expires", 0); 就一切OK
    有没有达人告诉我为什么?
      

  3.   

    没遇到过这样的问题,现在已经不用jfreechart了,lz去google下open flash chart,这个比jfreechart用起来简单,又好看些,不过是flash的,不能弄成jpg的。
      

  4.   

    关键应该是response.reset(); 这句的效果。有些应用服务器需要调用这句。如果说在浏览器保存图片的时候提示格式为bmp的,多半是图片没有100%下载完成,也就可能是response出现了点问题。
      

  5.   

    我用的是websphere6.0的应用服务器,试下看看是不是response.reset(); 这句的原因。open flash chart ,以前没听说过,现在又学到了新的东西,一定去看看。