0

現在、アプリケーションを Windows 環境から Redhat 環境に移行しています。このアプリケーションは JfreeChart 1.0.6 を使用しています。これは、Open-JDK6) で実行されている Redhat ヘッドレス環境の tomcat 7 にデプロイされた Web アプリです。

以下のPNGを取得します。手書きのチャートのように見え、すべてが画像の上にずれています。

誰かがすでにそのような問題に遭遇し、修正しましたか?

以下の私のチャートを見てください:

画像 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);
    }
4

1 に答える 1

0

問題の原因を見つけました:

  • JfreeChart で使用されているフォントをログに記録しました。それは SansSerif.plain でした
  • OpenJDK を調べると、ファイル fontconfig.properties で次のことがわかりました。

sansserif.plain.latin-1=DejaVu LGC Sans

filename.DejaVu_LGC_Sans=/usr/share/fonts/dejavu-lgc/DejaVuLGCSans.ttf

私のマシンにはこのフォントがインストールされていなかったので、インストールしたところ問題なく動作しました。

于 2012-08-02T14:42:02.610 に答える