利用POI获取.DOCX文件中图和表的题注

来源:互联网 发布:淘宝加盟开店被骗了 编辑:程序博客网 时间:2024/05/22 01:58

POI提供了对应的API可以方便我们找到DOCX文件中的图片和表格。    但是想要找到这些表格和图片对应的题注却花了我一番心思。

拿图片为例。

XWPFDocument xwpfDoc =  new XWPFDocument(new InputStream(in));//文档的样式列表XWPFStyles xwpfStyleMap = xwpfDoc.getStyles();//文档的元素Iterator<IBodyElement> elementIter = xwpfDoc.getBodyElementsIterator();

图片和图片的注释存储在XWPFParagraph类型的IBodyElement中。那么只要确定哪些XWPFParagraph中有图片,哪些XWPFParagraph中包含Caption(题注)信息,利用XWPFParagraph间的位置关系就可以将题注和图片关联起来。

1.  确定图片:

for (XWPFRun run : xwpfParagraph.getRuns()) {if (run.getEmbeddedPictures() != null && run.getEmbeddedPictures().size() != 0) {hasPic = true;}}

通过对XWPFParagraph内每个run调用getEmbeddedPictures()方法即可判断及获得该XWPFParagraph内的图片。但有一个问题是:该方法只能获得诸如.jpg  .png这样格式的图片,诸如.emf或者是直接插入的UML识别不了。而使用xwpfDoc.getAllPictures()方法却可以获得上述提到的格式图片,但是无法得到图片的位置信息.....这个我一直没办法解决,也望高人相助.....


2. 确定caption

// 该XWPFParagraph的样式String paragraphStyle = xwpfParagraph.getStyle();//从文档的样式列表中获得这一段的具体样式名称if (paragraphStyle != null) {XWPFStyle xwpfStyle = xwpfStyleMap.getStyle(paragraphStyle);styleType = xwpfStyle.getName();}

根据styleType便可以判断出每段文本的类型。   一般图和表的题注的StyleType名称是“caption”。

这里我最初仅仅通过paragraphStyle这个String来判断各个文本的类型。 发现该变量只是文档类型的一个代号,在不同文档中这个变量的值也不同,所以行不通。   而上述提到的方法,即利用该变量从文档的样式列表中找到真正的文档类型就没问题了,在大量文件的测试中都可以准确定位到caption信息。

0 0