Java 如何使用docx4j将html文件作为头应用
我正在使用docx4j生成一个.docx文件和一个.html文件。 html文件首先使用jTidy在xhtml中转换。 这个文件是我的文档的主体 我对标题也做了同样的事情,我也有一个文件 我可以生成标题并将其添加到文档中,但只能作为纯文本,不能作为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
//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);