gpt4 book ai didi

java - Apache POI XWPF - 检查运行是否包含图片

转载 作者:行者123 更新时间:2023-12-02 02:24:59 25 4
gpt4 key购买 nike

我的目标是使用 Apache POI 在 Java 中处理 .docx 文档。我想从文档中提取所有内容来创建一个新文档,但仅限于我可以从处理后的文档中选择的特定内容。到目前为止,这适用于表格和文本,但我在图片方面遇到问题。通常我会这样提取它们:

List<XWPFPictureData> images = r.getEmbeddedPictures();

其中 r 是从段落中提取的,并且类型为 XWPFRun。这里的一个大问题是,该解决方案仅适用于某些图像,这取决于图像在Word文档中的插入方式。

我可以访问运行的 xml 代码,并尝试找到这样的图像,它在 python 中运行良好,您可以在其中声明 xpath 查询。我在 Java 中尝试了相同的操作,但收到错误消息。

这是我的代码,用于检查运行是否包含图像:

r.getCTR().selectPath(".//w:drawing/wp:inline/a:graphic/a:graphicData/pic:pic/pic:blipFill/a:blip/@r:embed"))

它返回此异常: enter image description here

最佳答案

所有可用的引擎都是命名空间感知的引擎。因此必须声明命名空间。

import java.io.FileInputStream;

import org.apache.poi.xwpf.usermodel.*;

import org.apache.xmlbeans.XmlObject;

public class WordRunSelectPath {

public static void main(String[] args) throws Exception {

XWPFDocument document = new XWPFDocument(new FileInputStream("WordInsertPictures.docx"));
for (XWPFParagraph paragraph : document.getParagraphs()) {
for (XWPFRun run : paragraph.getRuns()) {
String declareNameSpaces = "declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'; "
+ "declare namespace wp='http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing'; "
+ "declare namespace a='http://schemas.openxmlformats.org/drawingml/2006/main'; "
+ "declare namespace pic='http://schemas.openxmlformats.org/drawingml/2006/picture'; "
+ "declare namespace r='http://schemas.openxmlformats.org/officeDocument/2006/relationships' ";

XmlObject[] selectedObjects = run.getCTR().selectPath(
declareNameSpaces
+ ".//w:drawing/wp:inline/a:graphic/a:graphicData/pic:pic/pic:blipFill/a:blip/@r:embed");
if (selectedObjects.length > 0) {
String rID = selectedObjects[0].newCursor().getTextValue();
System.out.println(rID);
}
}
}

document.close();
}
}

关于java - Apache POI XWPF - 检查运行是否包含图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47923079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com