Docx4j 页脚未显示在 MS-Word 2016 中

Docx4j Footer not showing in MS-Word 2016

我正在 Java 中使用 DOCx4j 库创建一个 docx 文件。我创建了在 Libra Office 中完美显示但在 MS-Word 2016 中未显示的页脚。

页脚代码:

    public static Relationship createFooterPageNumPart(
                WordprocessingMLPackage wordprocessingMLPackage) throws Exception {

           FooterPart footerPart = new FooterPart();
              MainDocumentPart t = wordprocessingMLPackage.getMainDocumentPart();

            footerPart.setPackage(wordprocessingMLPackage);
        //  footerPart.setJaxbElement(createFooterWithPageNr());

            footerPart.setJaxbElement(createFooterWithPageNr(wordprocessingMLPackage,footerPart));
            return t.addTargetPart(footerPart);
        }




       public static Ftr createFooterWithPageNr(WordprocessingMLPackage wordprocessingMLPackage, Part sourcePart) throws Exception {
            Ftr ftr = objectFactory.createFtr();
            P paragraph = objectFactory.createP();
            RPr fontRPr = getRPr(objectFactory, "Frutiger LT Arabic 45 Light", "000000", "20", STHint.EAST_ASIA,
                    false, false, false, false);
            R run = objectFactory.createR();
            run.setRPr(fontRPr);
            paragraph.getContent().add(run);

            setParagraphAlign(objectFactory, paragraph, JcEnumeration.RIGHT);
            ftr.getContent().add(paragraph);
            return ftr;
        }

 public static void createFooterReference(
            WordprocessingMLPackage wordprocessingMLPackage,
            Relationship relationship)
            throws InvalidFormatException {

        List<SectionWrapper> sections = wordprocessingMLPackage
                .getDocumentModel().getSections();
        SectPr sectPr = sections.get(sections.size() - 1).getSectPr();
        // There is always a section wrapper, but it might not contain a sectPr
        if (sectPr == null) {
            sectPr = objectFactory.createSectPr();
             wordprocessingMLPackage.getMainDocumentPart().addObject(sectPr);
            sections.get(sections.size() - 1).setSectPr(sectPr);
        }
        FooterReference footerReference = objectFactory.createFooterReference();
        footerReference.setId(relationship.getId());
        footerReference.setType(HdrFtrRef.DEFAULT);
        sectPr.getEGHdrFtrReferences().add(footerReference);
    }

请帮我找出问题所在。

您的 docx 开头为:

<w:body>
    <w:sectPr>
        <w:headerReference w:type="default" r:id="rId4"/>
    </w:sectPr>

并以:

结尾
    <w:sectPr>
        <w:footerReference w:type="default" r:id="rId5"/>

尝试将 w:headerReference 从开头的 sectPr(毫无意义)移动到末尾的 sectPr。

但根据 Word 2016,您发布的 docx 已损坏,因此还有其他问题需要解决。