我正在使用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);
}
请帮助我找出问题所在。
答案 0 :(得分:1)
您的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的开头(几乎没有意义)移动到结尾的那个。
但是根据Word 2016,您发布的文档已损坏,因此还有其他问题需要解决。