【发布时间】:2016-10-25 13:14:21
【问题描述】:
我准备了一个代码,它从数据库字段中获取字节,将图像存储为 BLOB,并使用 apache poi 3.9 版
将其插入到 excel 文件中此代码运行良好,并且在大多数情况下,图像被拉出并锚定到指定的列和行。
代码如下:
Blob img = ads.getPhoto();
byte[] imageByte = ads.getPhoto().getBytes(1, (int) img.length());
if (imageByte.length > 10) {
try {
int picId = workbook.addPicture(imageByte, workbook.PICTURE_TYPE_JPEG);
CreationHelper helper = workbook.getCreationHelper();
Drawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();
anchor.setCol1(2);
anchor.setCol2(3);
anchor.setRow1(rowId);
anchor.setRow2(rowId + 1);
Picture pict = drawing.createPicture(anchor, picId);
System.out.println("TEST PRINT");
} catch (Exception ex) {
ex.printStackTrace();
}
现在我已将范围缩小到导致问题的一张图片。对我来说,blob 看起来不错。但是,当插入所有图像以及该特定图像时,所有图像都会被删除,并且 excel 打开并显示错误消息:“文件错误:数据可能已丢失”
Drawing Patriarch 中的所有图像均未显示在 excel 中。 如果我跳过这个特定的行,图像在 excel 中显示得很好。它只是与这个特定的图像。
任何人都可以帮助我检查其中一个图纸是否有错误,如果发现则跳过它,以便保留其余图像并且仅删除此图像。
任何与此相关的建议都会有很大帮助。 提前致谢。
【问题讨论】:
-
尝试升级到最新版本的 Apache POI?
-
升级到 poi-3.14。结果是一样的。我相信问题不在于代码,而在于插入的图像。有没有提前知道这样的问题并避免这样的图像。
-
Workbook.addPicture不会检查字节数组是否包含有效的图片数据。它只是将给定的字节写入 Excel 文件。似乎 Excel 在将字节呈现为 PICTURE_TYPE_JPEG 时出现问题。也许你可以先检查一下:stackoverflow.com/questions/4550296/… -
我在最终放弃并在这里询问之前已经验证了相同的内容。字节以 FFD8 开始,以 FFD9 结束。与数据库中的其他图像非常相似。此外,该图像正在由 HTML 呈现,但在 excel 中出现问题。
-
此外,如果我从字节下载 jpeg 并将其保存在本地,则可以查看图像但是在手动尝试使用 Insert>Picture from file excel 将其插入 excel 时会出错。所以我认为该特定文件的字节应该存在一些基本问题。
标签: java apache-poi