Paragraph中, Run的组合混乱

针对页眉字符串, “\u0013 REF _Ref177548603 \h \u0014"第五节施工总体部署思路\u0015\r”, 为什么通过getParagraphs()之后, getRuns, "第五节施工总体部署思路"这几个字没在一个run中, 而是分布在不同的run中, 关键是这一串文字中, 无任何样式的差别.

有没有其它的更好的方式, 提取出 "第五节施工总体部署思路"这几个字?

@zchong

请您提供更多信息,例如您使用的代码示例,以及您希望提取文本的具体方式。

技术标-目录及技术标准3-目录在段落中间.docx (34.6 KB)

除了上述描述的问题之外, 页脚还解析出来了一个 "6"是什么意思? 文档中没有这个页脚值

@zchong 您的文档中有很多隐藏书签,这导致标题名称被多次分割。您可以使用字段值获取标题的全文。另外,您的文档有多个页眉和页脚(奇数和偶数),因此您有 “6 ”值,它与偶数页脚有关。
对于页眉和页脚,您可以执行以下代码作为示例:

Document doc = new Document("input.docx");

if (!doc.getFirstSection().getPageSetup().getOddAndEvenPagesHeaderFooter())
{
    HeaderFooterCollection headerFooters = doc.getFirstSection().getHeadersFooters();
    for (HeaderFooter headerFooter : headerFooters) {
        int headerFooterType = headerFooter.getHeaderFooterType();
        if (headerFooterType == HeaderFooterType.HEADER_EVEN || headerFooterType == HeaderFooterType.FOOTER_EVEN) {
            headerFooter.remove();
        }
    }
}

FieldCollection fields = doc.getFirstSection().getRange().getFields();
for (Field field : fields) {
    System.out.println(field.getDisplayResult());
}

如果您需要获取运行段落,但不想使用字段,可以使用以下代码:

Document doc = new Document("input.docx");

doc.getFirstSection().getRange().getBookmarks().clear();
HeaderFooter footer = doc.getFirstSection().getHeadersFooters().getByHeaderFooterType(HeaderFooterType.FOOTER_PRIMARY);

Paragraph para = footer.getFirstParagraph();
para.joinRunsWithSameFormatting();

System.out.println(para.getRuns().get(1).getText());

以下链接可能有用: