Для доступа к верхним и нижним колонтитулам необходимо получить разделы (через модель документа). Каждый раздел может иметь 3 заголовка (первый, по умолчанию, четный) и 3 нижних колонтитула (первый, по умолчанию, четный).
Вот пример Java, который отображает количество объектов, найденных в теле, и заголовки / нижние колонтитулы:
import java.io.File;
import java.util.List;
import org.docx4j.model.structure.HeaderFooterPolicy;
import org.docx4j.model.structure.SectionWrapper;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.FooterPart;
import org.docx4j.openpackaging.parts.WordprocessingML.HeaderPart;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
public class Test
{
public static void main(String[] args) throws Docx4JException
{
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File("File.docx"));
System.out.println("Body");
processMain(wordMLPackage.getMainDocumentPart());
List<SectionWrapper> sectionWrappers = wordMLPackage.getDocumentModel().getSections();
for(SectionWrapper sw : sectionWrappers)
{
System.out.println("\nSection");
HeaderFooterPolicy hfp = sw.getHeaderFooterPolicy();
processHeader(hfp.getFirstHeader());
processHeader(hfp.getDefaultHeader());
processHeader(hfp.getEvenHeader());
processFooter(hfp.getFirstFooter());
processFooter(hfp.getDefaultFooter());
processFooter(hfp.getEvenFooter());
}
}
static void processMain(MainDocumentPart part)
{
List<Object> content = part.getContent();
System.out.println(content.size()+" objects");
}
static void processHeader(HeaderPart part)
{
if(part!=null)
{
List<Object> content = part.getContent();
System.out.println(content.size()+" header object(s)");
}
}
static void processFooter(FooterPart part)
{
if(part!=null)
{
List<Object> content = part.getContent();
System.out.println(content.size()+" footer object(s)");
}
}
}