我有一个允许用户导出一些数据的JSP。您可以选择不同的格式(excel,csv)。此外,使用excel导出对应于数据的图表(饼图,折线图和条形图)用户希望将图表导出为唯一的jpg文件。
我所做的是(全部使用Java):
代码:
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数组中的第一个)
我不知道是否需要创建某种画布,或者只是不可能通过这种方式在同一JPG中放置3张或更多图像。
答案 0 :(得分:1)
JPG文件格式不会让你逃脱。我的建议是创建一个新的BufferedImage
,其中包含足够大的画布以包含所有三个图像,在交错的Y轴偏移处将三个图像渲染到其上,然后使用ImageIO
将其转储到JPG。