1

ユーザーが一部のデータをエクスポートできる JSP があります。さまざまな形式 (excel、csv) を選択できます。また、Excel を使用すると、データに対応するグラフ (円グラフ、折れ線グラフ、棒グラフ) がエクスポートされます。ユーザーは、グラフを一意の jpg ファイルにエクスポートしたいと考えています。

私がしたことは(すべてJavaで)です:

  • JFreeChart を使用してチャートを生成する
  • ChartUtilities.saveChartAsJPEG を使用してチャートを JPG 画像に変換します。
  • 次に、画像バイトを取得します。

コード:

InputStream is = null;
try {
   is = new FileInputStream(image);
}catch (FileNotFoundException e) {
   e.printStackTrace();
}
byte[] bytes = null;
try {
   bytes = IOUtils.toByteArray(is);
}catch (IOException e) {
   e.printStackTrace();
}

これはうまく機能しています。各チャートのバイトがあります。次に、各チャートのバイトをバイト配列に入れます。

byte[] imageBytes = getImageAsBytes(chart1,chart2,chart3);
res.setContentType("image/jpg");
res.setHeader("Content-Disposition", "attachment; filename=" + "MyCharts" + ".jpg");
res.setContentLength(imageBytes.length);
try{
    OutputStream output = res.getOutputStream();
    output.write(imageBytes);
    output.flush();   
    output.close();  
} catch (IOException e) {
    e.printStackTrace();
}

問題は、JPG を開くと、画像が 1 つしか表示されないことです。各グラフのエクスポートをテストし、うまく動作しましたが、すべてのグラフ バイトを配置すると、1 つの画像 (常に imageBytes 配列の最初) のみが表示されます。

ある種のキャンバスを作成する必要があるのか​​ 、それともこの方法で同じJPGに3つ以上の画像を配置できないのかわかりません。

4

1 に答える 1

1

JPG ファイル形式では、それを回避することはできません。私の提案は、BufferedImage3つの画像すべてを含むのに十分な大きさのキャンバスで新しいキャンバスを作成し、3つの画像をずらしたY軸オフセットでレンダリングしてから、ImageIO.

于 2012-08-03T14:12:41.297 に答える