Java Docx4J(Android):如何读取Word文档中页眉和页脚的内容

Java Docx4J(Android):如何读取Word文档中页眉和页脚的内容,java,android,kotlin,docx4j,Java,Android,Kotlin,Docx4j,我正在尝试使用Docx4J()读入Word文件的内容。但是,使用下面的代码,我的程序只读取Word文件的正文内容(存储在文档行)(不读取页眉或页脚)。如何让程序读入文件的页眉和页脚的内容 下面是我的代码: override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if

我正在尝试使用Docx4J()读入Word文件的内容。但是,使用下面的代码,我的程序只读取Word文件的正文内容(存储在
文档行
)(不读取页眉或页脚)。如何让程序读入文件的页眉和页脚的内容

下面是我的代码:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == READ_IN_FILE) { // When a result has been received, check if it is the result for READ_IN_FILE
        if (resultCode == Activity.RESULT_OK) { // heck if the operation to retrieve the Activity's result is successful
            // Attempt to retrieve the file
            try {
                var uri = data?.data // Retrieve the file's resource locator
                var document = WordprocessingMLPackage.load(uri?.let { contentResolver.openInputStream(it) })
                var documentLines = document.mainDocumentPart.content
            } catch (e: Exception) { // If the app failed to attempt to retrieve the error file, throw an error alert
                Toast.makeText(this, "Sorry, but there was an error reading in the file", Toast.LENGTH_SHORT).show()
            }
        }
    }

要访问页眉和页脚,您需要检索部分(通过文档模型)。每个部分可以有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)");
        }
    }
}
导入java.io.File;
导入java.util.List;
导入org.docx4j.model.structure.HeaderFooterPolicy;
导入org.docx4j.model.structure.SectionWrapper;
导入org.docx4j.openpackaging.exceptions.docx4jeexception;
导入org.docx4j.openpackaging.packages.WordprocessingMLPackage;
导入org.docx4j.openpackaging.parts.WordprocessingML.FooterPart;
导入org.docx4j.openpackaging.parts.WordprocessingML.HeaderPart;
导入org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
公开课考试
{
公共静态void main(字符串[]args)抛出Docx4JException
{
WordprocessingMLPackage wordMLPackage=WordprocessingMLPackage.load(新文件(“File.docx”);
系统输出打印项次(“正文”);
processMain(wordMLPackage.getMainDocumentPart());
List sectionWrappers=wordMLPackage.getDocumentModel().getSections();
用于(sectionWrappers sw:sectionWrappers)
{
System.out.println(“\n节”);
HeaderFooterPolicy hfp=sw.getHeaderFooterPolicy();
processHeader(hfp.getFirstHeader());
processHeader(hfp.getDefaultHeader());
processHeader(hfp.getEvenHeader());
processFooter(hfp.getFirstFooter());
processFooter(hfp.getDefaultFooter());
processFooter(hfp.getEvenFooter());
}
}
静态void processMain(MainDocumentPart)
{
列表内容=part.getContent();
System.out.println(content.size()+“objects”);
}
静态void processHeader(HeaderPart部分)
{
if(part!=null)
{
列表内容=part.getContent();
System.out.println(content.size()+标题对象);
}
}
静态void进程页脚(页脚部分)
{
if(part!=null)
{
列表内容=part.getContent();
System.out.println(content.size()+页脚对象);
}
}
}

要访问页眉和页脚,您需要检索部分(通过文档模型)。每个部分可以有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)");
        }
    }
}
导入java.io.File;
导入java.util.List;
导入org.docx4j.model.structure.HeaderFooterPolicy;
导入org.docx4j.model.structure.SectionWrapper;
导入org.docx4j.openpackaging.exceptions.docx4jeexception;
导入org.docx4j.openpackaging.packages.WordprocessingMLPackage;
导入org.docx4j.openpackaging.parts.WordprocessingML.FooterPart;
导入org.docx4j.openpackaging.parts.WordprocessingML.HeaderPart;
导入org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
公开课考试
{
公共静态void main(字符串[]args)抛出Docx4JException
{
WordprocessingMLPackage wordMLPackage=WordprocessingMLPackage.load(新文件(“File.docx”);
系统输出打印项次(“正文”);
processMain(wordMLPackage.getMainDocumentPart());
List sectionWrappers=wordMLPackage.getDocumentModel().getSections();
用于(sectionWrappers sw:sectionWrappers)
{
System.out.println(“\n节”);
HeaderFooterPolicy hfp=sw.getHeaderFooterPolicy();
processHeader(hfp.getFirstHeader());
processHeader(hfp.getDefaultHeader());
processHeader(hfp.getEvenHeader());
processFooter(hfp.getFirstFooter());
processFooter(hfp.getDefaultFooter());
processFooter(hfp.getEvenFooter());
}
}
静态void processMain(MainDocumentPart)
{
列表内容=part.getContent();
System.out.println(content.size()+“objects”);
}
静态void processHeader(HeaderPart部分)
{
if(part!=null)
{
列表内容=part.getContent();
System.out.println(content.size()+标题对象);
}
}
静态void进程页脚(页脚部分)
{
if(part!=null)
{
列表内容=part.getContent();
System.out.println(content.size()+页脚对象);
}
}
}