java - 使用 Apache POI 遍历 MS Word docx 并识别表格、图像和其他元素的序列
问题描述
我正在尝试使用 Apache POI 遍历 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);
以下是我使用的输入 docx
我的结果是:
段落
段落
段落
段落
表 段落
段落 段落
找到
的
项目 9
问题是
我无法检索图片的位置,但仍然能够设法获取给定示例文件中表格的位置。(element instanceof XWPFPitureData) 或 (element instanceof XWPFPiture) 这两者都没有让我到达那里。不知何故,我的错误是我没有为我认为的图片使用正确的类型,那么我必须使用哪种类型来获取图片位置。提前致谢
解决方案
我找到了以下代码的解决方案
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());
}
}
上面的代码返回段落中的图像数量。实际上,在 XML 编码中,XWPFPiture 本身是在 XWPFParagraph 中编码的,而在这种情况下,表格不是。所以我们需要这种间接方法来查找段落是否包含图像,通过这样做我们能够识别段落是否包含图片/图像并识别图片的位置或找到图片的段落。
推荐阅读
- z3 - 如何在 Z3 中以 SMTLIB 格式表示集合成员?
- node.js - MongoDB 使用不和等于
- android - 如何在与firebase(FCM)的颤动中使用onBackgroundMessage,onBackgroundMessage没有被触发
- angular - 如何以角度更改chart.js中条形的颜色和宽度
- mysql - MySQL:引擎中不存在表“my_table”
- excel - 语法错误 CountIfs-function 多条件
- python - python函数参数中的三元运算符使用默认值
- c# - 在 azure 函数中获取队列名称或主题+订阅者名称(Azure 服务总线触发函数)
- amazon-web-services - AWS Neptune 中的元属性
- javascript - Javascript:当鼠标移过它们时突出显示所有段落,然后在鼠标经过后恢复