1

我有一个允许用户导出一些数据的 JSP。您可以选择不同的格式(excel、csv)。此外,用excel导出与数据对应的图表(饼图、折线图和条形图)用户希望将图表导出为唯一的jpg文件。

我所做的是(全部在 Java 中):

  • 使用 JFreeChart 生成图表
  • 使用以下命令将图表转换为 JPG 图像:ChartUtilities.saveChartAsJPEG
  • 然后我检索图像字节:

编码:

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 时,只显示一张图像。我测试了每个图表的导出并且效果很好,但是当我放置所有图表字节时,只显示一个图像(始终是 imageBytes 数组中的第一个)

我不知道我是否必须创建某种画布,或者无法通过这种方式将 3 张或更多图像放在同一个 JPG 中。

4

1 回答 1

1

JPG 文件格式不会让您逃脱惩罚。我的建议是创建一个BufferedImage具有足够大的画布以包含所有三幅图像的新画布,以交错的 Y 轴偏移量将三幅图像渲染到其上,然后将其转储为 JPG 格式ImageIO

于 2012-08-03T14:12:41.297 回答