使用带有多个标头的docx4j创建docx

是否可以使用docx4j为每个不同的部分创建新的标题?

我已经看到MS Word通过使用分节符创建不同的部分来提供创建不同标题的function。 但我想使用docx4j实现此function。

例如:如果我要创建可能包含产品列表,某些条款和条件以及其他一些部分的docx文件。 并且我希望每个部分的标题都显示在页面顶部(如产品摘要:第1页,共2页,条款和条件:第3页,共3页)。

此外,我正在使用MainDocumentPart.addAltChunk()方法在文档中编写html内容以创建Document。

提前致谢。

问候,

Sanshey Sachdeva

最后我得到了解决方案

下面提到的方法创建尽可能多的标题。

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()时,我仍然无法找到如何在每个部分中引入分页 ;

最后我得到了解决方案。

下面的代码允许我处理部分:

 SectPr sectPr = null; if(isLastSection){ List 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); 

我也是为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); 

感谢方向,它工作得很好。