Java 如何使用docx4j将html文件作为头应用

Java 如何使用docx4j将html文件作为头应用,java,html,docx4j,Java,Html,Docx4j,我正在使用docx4j生成一个.docx文件和一个.html文件。 html文件首先使用jTidy在xhtml中转换。 这个文件是我的文档的主体 我对标题也做了同样的事情,我也有一个文件 我可以生成标题并将其添加到文档中,但只能作为纯文本,不能作为html 下面是我的标题代码: //Header Part start HeaderPart headerPart = new HeaderPart(); Relationship rel = wordMLPackage.get

我正在使用docx4j生成一个.docx文件和一个.html文件。 html文件首先使用jTidy在xhtml中转换。 这个文件是我的文档的主体

我对标题也做了同样的事情,我也有一个文件

我可以生成标题并将其添加到文档中,但只能作为纯文本,不能作为html

下面是我的标题代码:

    //Header Part start
    HeaderPart headerPart = new HeaderPart();
    Relationship rel = wordMLPackage.getMainDocumentPart().addTargetPart(headerPart);
    String hdrXml = "<w:hdr xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">"
            + "<w:p>"
            + "<w:pPr>"
            //+ "<w:pStyle w:val=\"Header\"/>"
            + "<w:jc w:val=\"center\"/>"
            + "</w:pPr>"
            + "<w:r>"
            + "<w:t xml:space=\"preserve\">" + myFileContentInString + "</w:t>"
            + "</w:r>"
            //  + "<w:fldSimple w:instr=\" PAGE \\* MERGEFORMAT \">"
            // + "<w:r>"
            //  + "<w:rPr>"
            //  + "<w:noProof/>"
            //  + "</w:rPr>"
            // + "</w:r>"
            // + "</w:fldSimple>"
            + "</w:p>"
            + "</w:hdr>";

    Hdr hdr = (Hdr) XmlUtils.unmarshalString(hdrXml);
    wordMLPackage.getDocumentModel().getSections().get(0).getHeaderFooterPolicy().getFirstHeader();
    headerPart.setJaxbElement(hdr);

    List<SectionWrapper> sections = wordMLPackage.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();
        wordMLPackage.getMainDocumentPart().addObject(sectPr);
        sections.get(sections.size() - 1).setSectPr(sectPr);
    }

    HeaderReference headerReference = objectFactory.createHeaderReference();
    headerReference.setId(rel.getId());
    headerReference.setType(HdrFtrRef.DEFAULT);
    sectPr.getEGHdrFtrReferences().add(headerReference);

    //Header Part End
//标题部分开始
HeaderPart HeaderPart=新HeaderPart();
关系rel=wordMLPackage.getMainDocumentPart().addTargetPart(headerPart);
字符串hdrXml=“”
+ ""
+ ""
//+ ""
+ ""
+ ""
+ ""
+“”+myFileContentInString+“”
+ ""
//  + ""
// + ""
//  + ""
//  + ""
//  + ""
// + ""
// + ""
+ ""
+ "";
Hdr Hdr=(Hdr)XmlUtils.unmarshalString(hdrXml);
wordMLPackage.getDocumentModel().getSections().get(0.getHeaderFooterPolicy().getFirstHeader();
校长职位设置(hdr);
List sections=wordMLPackage.getDocumentModel().getSections();
SectPr SectPr=sections.get(sections.size()-1.getSectPr();
//始终有一个节包装器,但它可能不包含sectPr
if(sectPr==null){
sectPr=objectFactory.createSectPr();
wordMLPackage.getMainDocumentPart().addObject(sectPr);
sections.get(sections.size()-1).setSectPr(sectPr);
}
HeaderReference HeaderReference=objectFactory.createHeaderReference();
headerReference.setId(rel.getId());
headerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(headerReference);
//收割台部件端部
xhtml内容位于“myFileContentInString”中

我找不到这方面的线索,所以如果有人知道

编辑:在您回答之后,我以这种方式更新了我的代码(以下是完整代码):

String inputfilepath=“Offers/”+param.getKey1()+““+param.getKey2()+”/c.xhtml”;
字符串inputfilepath2=“提供/”+param.getKey1()+““+param.getKey2()+”/cc.xhtml”;
//创建一个空的docx包
WordprocessingMLPackage wordMLPackage=WordprocessingMLPackage.createPackage();
ObjectFactory ObjectFactory=Context.getWmlObjectFactory();
NumberingDefinitionsPart ndp=新的NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.UnmarshalDefaultNumber();
XHTMLPorterImpl XHTMLPorter=新的XHTMLPorterImpl(wordMLPackage);
setHyperlinkStyle(“超链接”);
wordMLPackage.getMainDocumentPart().getContent().addAll(xhtmlPorter.convert(新文件(inputfilepath),null));
//标题部分开始
HeaderPart HeaderPart=新HeaderPart();
关系rel=wordMLPackage.getMainDocumentPart().addTargetPart(headerPart);
Hdr Hdr=Context.getWmlObjectFactory().createHdr();
hdr.getContent().addAll(xhtmliporter.convert(新文件(inputfilepath2),null));
wordMLPackage.getDocumentModel().getSections().get(0.getHeaderFooterPolicy().getFirstHeader();
校长职位设置(hdr);
List sections=wordMLPackage.getDocumentModel().getSections();
SectPr SectPr=sections.get(sections.size()-1.getSectPr();
//始终有一个节包装器,但它可能不包含sectPr
if(sectPr==null){
sectPr=objectFactory.createSectPr();
wordMLPackage.getMainDocumentPart().addObject(sectPr);
sections.get(sections.size()-1).setSectPr(sectPr);
}
HeaderReference HeaderReference=objectFactory.createHeaderReference();
headerReference.setId(rel.getId());
headerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(headerReference);
//保存文件
wordMLPackage.save(新的java.io.File(“提供/”+param.getKey1()+“\u2”+param.getKey2()+“/html\u output.docx”);
“inputfilepath2”包含我的头xhtml文件的路径。
我试图在我的标题中插入一个简单的Hello World,但它似乎采用了正文和标题的“inputfilepath”。

假设您引用了正确的标题部分,例如:

    Hdr hdr = Context.getWmlObjectFactory().createHdr();
    hdr.getContent().addAll( 
            XHTMLImporter.convert( /* fill this in */ );
    headerPart.setJaxbElement(hdr);

我认为这是工作,但似乎采取的文件,使头是一样的身体之一,尽管有良好的声明。请澄清你的意思。你的更新代码是什么?
    Hdr hdr = Context.getWmlObjectFactory().createHdr();
    hdr.getContent().addAll( 
            XHTMLImporter.convert( /* fill this in */ );
    headerPart.setJaxbElement(hdr);