针对页眉字符串, “\u0013 REF _Ref177548603 \h \u0014"第五节施工总体部署思路\u0015\r”, 为什么通过getParagraphs()之后, getRuns, "第五节施工总体部署思路"这几个字没在一个run中, 而是分布在不同的run中, 关键是这一串文字中, 无任何样式的差别.
有没有其它的更好的方式, 提取出 "第五节施工总体部署思路"这几个字?
针对页眉字符串, “\u0013 REF _Ref177548603 \h \u0014"第五节施工总体部署思路\u0015\r”, 为什么通过getParagraphs()之后, getRuns, "第五节施工总体部署思路"这几个字没在一个run中, 而是分布在不同的run中, 关键是这一串文字中, 无任何样式的差别.
有没有其它的更好的方式, 提取出 "第五节施工总体部署思路"这几个字?
除了上述描述的问题之外, 页脚还解析出来了一个 "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());
以下链接可能有用: