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.getAl