JFreeChart奇怪的渲染(无头红帽)

问题描述:

我目前正在将应用程序从Windows环境迁移到Redhat。此应用程序正在使用JfreeChart 1.0.6。它是一个在Open-JDK6上运行的Redhat无头环境中的tomcat 7中部署的Web应用程序)。JFreeChart奇怪的渲染(无头红帽)

我获得以下PNG。它看起来像手写的图表,一切都朝向图像的顶部。

有人已经遇到这样的问题,并得到了解决?

查看我的见下表:

image http://img194.imageshack.us/img194/4489/graph20120801105017.png

参见一段代码生成下面的图表:

FacesContext facesContext = FacesContext.getCurrentInstance(); 
    ServletContext servlet = (ServletContext)facesContext.getExternalContext().getContext(); 
    HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
    String path = null; 

    if (null != servlet.getRealPath("/")) 
    { 
     path = servlet.getRealPath("/"); 
    } 
    else 
    { 
     path = servlet.getResource("/").getPath(); 
    } 

    File stockageImg = new File(path+Constants.CHEMIN_GRAPH+CM50Util.dateHeureJour()+Constants.EXTENSION_GRAPH); 

    ChartRenderingInfo info = new ChartRenderingInfo (new StandardEntityCollection()); 
    DefaultXYDataset dataset = new DefaultXYDataset(); 
    XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true, false); 

    try 
    { 
     dataset.addSeries("CM moyen Annuel", courbeRef); 
     dataset.addSeries("CM non dépassé plus de 5% du temps", courbe95); 

     //creation du graphique 
     JFreeChart chart = ChartFactory.createXYLineChart(
      "Courbes de décroissance", 
      "Distance en m\u00E8tre", 
      "Champ", 
      dataset, 
      PlotOrientation.VERTICAL, 
      true, 
      false, 
      false); 

     XYPlot plot = (XYPlot) chart.getPlot(); 
     plot.setRenderer(renderer); 

     IntervalMarker intervalIncertitude = new IntervalMarker(Double.parseDouble(resultDistanceMin.replace(Constants.UNITE_DISTANCE, "")), Double.parseDouble(resultDistanceMax.replace(Constants.UNITE_DISTANCE, ""))); 
     intervalIncertitude.setPaint(new Color(222, 222, 255, 128)); 
     plot.addDomainMarker(intervalIncertitude, Layer.BACKGROUND); 

     Marker distanceTiers = new ValueMarker(Double.parseDouble(resultDistance.replace(Constants.UNITE_DISTANCE, ""))); 
     distanceTiers.setPaint(Color.BLACK); 
     plot.addDomainMarker(distanceTiers); 

     renderer.setSeriesPaint(0, Color.GREEN); 
     renderer.setSeriesPaint(1, Color.BLUE); 

     ChartUtilities.saveChartAsPNG(stockageImg, chart, 800, 400, info); 

    } catch (Exception e) { 
      log.error("erreur generation graphique ",e); 
    } 
+0

字体替换可能发生了。请编辑您的问题以包含生成所示图表的[sscce](http://sscce.org/)。 – trashgod 2012-08-01 20:15:43

我发现这个问题的原因:

  • 我记录了JfreeChart使用的字体:它是SansSerif.plain
  • 展望OpenJDK的,在文件fontconfig.properties,我发现:

sansserif.plain.latin-1 = dejavu的LGC三世

filename.DejaVu_LGC_Sans =的/ usr /共享/字体/ DEJAVU -lgc/DejaVuLGCSans.ttf

我没有在我的机器上安装这种字体,所以我安装它,它很好。