Java 使用ApachePOI遍历MS Word docx并识别表、图像和其他元素的序列

Java 使用ApachePOI遍历MS Word docx并识别表、图像和其他元素的序列,java,image,apache,ms-word,apache-poi,Java,Image,Apache,Ms Word,Apache Poi,我正在尝试使用ApachePOI遍历docx文件,请参阅以下代码 FileInputStream fis = new FileInputStream("sample1.docx"); XWPFDocument xdoc=new XWPFDocument(OPCPackage.open(fis)); Iterator<IBodyElement> iter = xdoc.getBodyElementsIterator();

我正在尝试使用ApachePOI遍历docx文件,请参阅以下代码

         FileInputStream fis = new FileInputStream("sample1.docx");
         XWPFDocument xdoc=new XWPFDocument(OPCPackage.open(fis));
         Iterator<IBodyElement> iter = xdoc.getBodyElementsIterator();
         int count=0;
         while(iter.hasNext()) {
             IBodyElement element=iter.next();
             if(element instanceof XWPFParagraph) {
                 System.out.println("Paragraph\t");
             }
             if(element instanceof XWPFPictureData) { // if(element instanceof XWPFPicture) { 
                 System.out.println("Picture");
             }if(element instanceof XWPFTable) {
                 System.out.println("Table");
             }
             count++;
         }
         System.out.println("Items Found " + count);
FileInputStream fis=newfileinputstream(“sample1.docx”);
XWPFDocument xdoc=新的XWPFDocument(OPCPackage.open(fis));
迭代器iter=xdoc.getBodyElementsIterator();
整数计数=0;
while(iter.hasNext()){
IBodyElement元素=iter.next();
if(XWPFParagraph的元素实例){
System.out.println(“段落\t”);
}
if(XWPFPictureData的元素实例){//if(XWPFPicture的元素实例){
System.out.println(“图片”);
}if(XWPFTable的元素实例){
系统输出打印项次(“表格”);
}
计数++;
}
System.out.println(“找到的项目”+计数);
下面是我使用的输入docx

我的结果是:

段落
段落
段落
段落
段落
桌子 段落
段落
段落
发现的物品9

问题是

我无法检索图片的位置,但仍然能够获取给定示例文件中表的位置。 (XWPFPictureData的元素实例)或(XWPFPicture的元素实例) 这两个都不能让我达到目的。 不知何故,我的错误是我没有为我认为的图片使用正确的类型,那么我必须使用哪种类型来获得图片位置。
提前感谢

我用以下代码找到了解决方案

         FileInputStream fis = new FileInputStream("sample1.docx");
         XWPFDocument xdoc=new XWPFDocument(OPCPackage.open(fis));
         List<XWPFParagraph> paragraphs=xdoc.getParagraphs();
         for(XWPFParagraph para : paragraphs) {         
             for(XWPFRun run : para.getRuns()) {
                 System.out.println(run.getEmbeddedPictures().size());
             }
         }
FileInputStream fis=newfileinputstream(“sample1.docx”);
XWPFDocument xdoc=新的XWPFDocument(OPCPackage.open(fis));
列出段落=xdoc.getparations();
(XWPFParagraph段:段落){
对于(XWPFRun:para.getRuns()){
System.out.println(run.getEmbeddedPictures().size());
}
}
上面的代码返回段落中的图像数量。实际上,在XML编码中,XWPFPicture本身是在XWPFParagraph中编码的,在这种情况下,表不是。因此我们需要这种间接方法来确定段落是否包含图像,通过这样做,我们能够识别段落是否包含图像标记图片/图像,并确定图片或找到图片的段落的位置