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 已损坏,因此还有其他问题需要解决。
我正在 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 已损坏,因此还有其他问题需要解决。