通过Apache POI从Table的Cell读取图像数据

时间:2012-04-12 08:46:20

标签: apache apache-poi

我被困在一个地方,我需要立即帮助,以下是我的问题。

实际上我正在使用Apache POI(XWPF)读取word(.docx)文档,我能够成功读取表数据,除了图像也在表格的单元格内。由于我是这个Api的新手,但根据我的理解,我认为我们也可以从单元格中读取图像字节数据。

POIXMLDocumentPart pictureData=(POIXMLDocumentPart)imageCell.getPart();

PackageRelationship packageRelationship=pictureData.getPackageRelationship();

System.out.println("Source URI:"+packageRelationship.getSourceURI());

System.out.println("Target URI:"+packageRelationship.getTargetURI());

在上面的代码中,我可以将Image URI作为Target,但我不知道如何获取Image的二进制数据。

任何想法的朋友......

谢谢, -Javed

1 个答案:

答案 0 :(得分:2)

首先,从表格单元格get the list of paragraphs。接下来,从paragraph获取list of Runs。最后,从跑步开始,get the list of pictures embedded in the run,你就在那里。

Apache Tika中的.docx文本提取器显示了如何执行所有操作,有关详细信息,请参阅the source code of it。一般来说,它就像是

for (XWPFParagraph p : cell.getParagraphs()) {
  for (XWPFRun run : p.getRuns()) {
    for (XWPFPicture pic : run.getEmbeddedPictures()) {
       byte[] pictureData = pic.getPictureData().getData();
    }
  }
}

还有一种不那么常见的将图片嵌入.docx文件的方式,这种方式更加繁琐。在XWPFDocument上,您可以使用getAllPictures()getAllPackagePictures()来跟踪其他内容,但这不会告诉您图片所属文件的位置。