如何使用 Apache POI 从 docx 文件中的占位符中提取文本

问题描述 投票:0回答:1

我正在使用 Apache POI 来编辑 Word 文档。我的主要任务是从段落和表格中获取文本和占位符,它们工作正常。在我的一份客户文档中,有一个占位符,该占位符内有需要获取和替换的文本。问题是占位符内的文本无法作为段落获取,因此我无法获取和替换文本。占位符的屏幕截图附在问题中,我使用的代码如下。

XWPFDocument wordDocx = new XWPFDocument(Files.newInputStream(Paths.get(template.getAbsolutePath())));
List<IBodyElement> elements = wordDocx.getBodyElements();
Iterator<IBodyElement> bodyIterator = elements.iterator();
bodyIterator.forEachRemaining((elem) -> {   
    if(PARAGRAPH.equalsIgnoreCase(elem.getElementType().name())) { //if element is a paragraph.
        // extract the paragraph text and replace the placeholders. 
    }
    else if (TABLE.equalsIgnoreCase(elem.getElementType().name())) { //if element is a table.
        // iterate cell by cell and replace the image placeholders.
    }
});

占位符不是以段落或表格的形式出现。任何有关如何从占位符获取文本的指导将不胜感激。占位符截图如下:

Docx placeholder

我正在迭代问题中上述代码中可以看到的文档元素。但是屏幕截图中可以看到的占位符内的文本无法作为段落获取。

java apache-poi docx apache-poi-4
1个回答
0
投票

我无法为您的问题提供准确的解决方案,但一些提示可能会帮助您(我有一个非常相似的问题)。

问题是您在屏幕截图中显示的元素类型。如果你说它既不是段落也不是表格,那么它可能是一个嵌入文件?在文档中有一个获取这些的方法:

getAllEmbeddedParts()

另外,请查看我在解决一个非常相似的问题时发现的这个存储库(也许您也发现一些对您的案例有帮助的东西):

https://github.com/deividasstr/docx-word-replacer

© www.soinside.com 2019 - 2024. All rights reserved.