0

我需要在浏览器上显示从 Word 文档获取的图像。我正在使用 Apache POI 提取图像,但无法在浏览器中打开它。我正在使用下面的代码来保存图像。

 picTable = doc.getPicturesTable();
 List pictures = picTable.getAllPictures();
 if(pictures){
      println("pictures::"+pictures.size())
      Picture pic = (Picture)pictures.get(0);
      file = new File("test.gif")
      FileOutputStream out = new FileOutputStream(file)
      out.write(pic.getContent())
      out.close()
 }

我见过下面的接口方法:

在 POI api 中,`PicturesManager 接口方法 savePicture..which

存储图像(可能在磁盘上)。请注意,不同的输出格式支持不同的文件类型,因此可能需要进行图像转换。例如,HTML 浏览器通常支持 PictureType.GIF、PictureType.JPEG、PictureType.PNG、PictureType.TIFF,但很少支持 PictureType.EMF 或 PictureType.WMF。FO (Apache FOP) 至少支持 PNG 和 SVG 类型。

任何人都已经实现了这个或任何想法来在浏览器中显示这个图像。非常感谢。

4

1 回答 1

0

我有 xls 文档的示例,我的代码:

HSSFPatriarch patriarch = sheet.getDrawingPatriarch();
if (patriarch != null) {
// Loop through the objects
for (HSSFShape shape : patriarch.getChildren()) {
    if (shape instanceof HSSFPicture) {
        HSSFPicture picture = (HSSFPicture) shape;
        if (picture.getShapeType() == HSSFSimpleShape.OBJECT_TYPE_PICTURE) {
            if (picture.getImageDimension() != null) {

                    HSSFPictureData pictureData = picture.getPictureData();
                    byte[] data = pictureData.getData();
                    String fileName = PATH + picture.getFileName() + "." + pictureData.suggestFileExtension();
                    File file = new File(fileName);
                    try (FileOutputStream fop = new FileOutputStream(file)) {

                        if (!file.exists()) {
                            file.createNewFile();
                        }

                        fop.write(data);
                        fop.flush();
                        fop.close();

                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                }
            }
        }
    }
}

}

在此示例中,PATH 是服务器上文件夹的变量,例如 win 的“c:/temp/img/”或 nix 的“/www/images/”。

如果需要,您可以检查 pictureData.suggestFileExtension() 是否等于 'png'、'jpg' 等。

运行这样的代码后,您可以直接在 html 页面中使用 fileName ,或者如果您使用代理,您需要执行一些额外的操作来获取保存图片的链接。

于 2014-02-20T02:43:33.337 回答