是否可以使用docx4j为每个不同的部分创建新标头?
我已经看到MS Word通过使用分节符创建不同的部分来提供创建不同标题的功能。但我想使用docx4j实现此功能。
例如: 如果我要创建一个docx文件,其中可能包含产品列表,一些条款和条件,以及其他一些部分。我希望每个部分的标题都能在页面顶部显示分页(如产品摘要:第1页,共2页,条款和条件:第3页,共3页)。
此外,我正在使用MainDocumentPart.addAltChunk()方法在文档中编写html内容以创建Document。
先谢谢。
-
此致
Sanshey Sachdeva
答案 0 :(得分:1)
最后我得到了解决方案。
下面提到的方法可以创建任意数量的标题。
private static int countHeader = 0;
public static void createHeaderForSection(WordprocessingMLPackage wordprocessingMLPackage, String headerString) throws Exception {
MainDocumentPart documentPart = wordprocessingMLPackage.getMainDocumentPart();
HeaderPart headerPart = new HeaderPart(new PartName("/word/header"+ (++countHeader) +".xml"));
headerPart.setPackage(wordprocessingMLPackage);
headerPart.addAltChunk(AltChunkType.Html, headerString.getBytes("UTF-8"));
headerPart.setRelationshipType(Namespaces.HEADER);
Relationship relationship = documentPart.addTargetPart(headerPart);
SectPr sectPr = objectFactory.createSectPr();
HeaderReference headerReference = factory.createHeaderReference();
headerReference.setId(relationship.getId());
headerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(headerReference);
P p = objectFactory.createP();
PPr ppr = objectFactory.createPPr();
p.setPPr(ppr);
ppr.setSectPr(sectPr);
wordprocessingMLPackage.getMainDocumentPart().getContent().add(p);
}
但是,在使用headerPart.addAltChunk()时,我仍然无法找到如何在每个部分引入分页;
答案 1 :(得分:0)
最后我得到了解决方案。
下面的代码允许我处理部分:
SectPr sectPr = null;
if(isLastSection){
List<SectionWrapper> sections = wordprocessingMLPackage.getDocumentModel().getSections();
sectPr = sections.get(sections.size() - 1).getSectPr();
if (sectPr==null ) {
sectPr = objectFactory.createSectPr();
wordprocessingMLPackage.getMainDocumentPart().addObject(sectPr);
sections.get(sections.size() - 1).setSectPr(sectPr);
}
}
else{
sectPr = objectFactory.createSectPr();
}
此代码允许我为每个部分创建单独的标题:
HeaderPart headerPart = new HeaderPart(new PartName("/word/header"+ (countHeader++) +".xml"));
headerPart.setPackage(wordprocessingMLPackage);
headerPart.setRelationshipType(Namespaces.HEADER);
headerPart.setJaxbElement(objectFactory.createHdr());
Relationship relationship = documentPart.addTargetPart(headerPart);
HeaderReference headerReference = objectFactory.createHeaderReference();
headerReference.setId(relationship.getId());
headerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(headerReference);
这段代码允许我为每个部分创建单独的分页:
CTPageNumber ctPageNumber = objectFactory.createCTPageNumber();
ctPageNumber.setStart(BigInteger.ONE);
sectPr.setPgNumType(ctPageNumber);
答案 2 :(得分:0)
我也为Footer做了
FooterPart footerPart = new FooterPart(new PartName("/word/footer"+ (countHeader) +".xml"));
footerPart.setPackage(pkg);
footerPart.setRelationshipType(Namespaces.FOOTER);
footerPart.setJaxbElement(objectFactory.createFtr());
Relationship relationshipF = documentPart.addTargetPart(footerPart);
FooterReference footerReference = objectFactory.createFooterReference();
footerReference.setId(relationshipF.getId());
footerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(footerReference);
感谢方向,并且工作正常。