私はdocx4jを使用して.htmlファイルで.docxファイルを生成しています。 htmlファイルは、最初にjTidyを使用してxhtmlで変換されます。 このファイルは私の文書の本文です。docx4jでヘッダーとしてhtmlファイルを適用する方法
私はヘッダーと同じことをやっていますが、私はこれもファイルがあります。
ヘッダを生成してドキュメントに追加できますが、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
XHTMLコンテンツは、 "myFileContentInString" です。
私はこれについて何かを見つけることができなかったので、もし誰かが何か考えがあれば?
EDIT:あなたの答えの後、私はこのように自分のコードを更新しました(ここでは完全なコードがある):
String inputfilepath = "Offers/" + param.getKey1() + "_" + param.getKey2() + "/c.xhtml";
String inputfilepath2 = "Offers/" + param.getKey1() + "_" + param.getKey2() + "/cc.xhtml";
// Create an empty docx package
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
ObjectFactory objectFactory = Context.getWmlObjectFactory();
NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.unmarshalDefaultNumbering();
XHTMLImporterImpl xHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
xHTMLImporter.setHyperlinkStyle("Hyperlink");
wordMLPackage.getMainDocumentPart().getContent().addAll(xHTMLImporter.convert(new File(inputfilepath), null));
//Header Part start
HeaderPart headerPart = new HeaderPart();
Relationship rel = wordMLPackage.getMainDocumentPart().addTargetPart(headerPart);
Hdr hdr = Context.getWmlObjectFactory().createHdr();
hdr.getContent().addAll(xHTMLImporter.convert(new File(inputfilepath2), null));
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);
// Saving file
wordMLPackage.save(new java.io.File("Offers/" + param.getKey1() + "_" + param.getKey2() + "/html_output.docx"));
は "inputfilepath2は" 私のヘッダのXHTMLファイルFOパスが含まれています。 ヘッダーに単純なHello Worldを挿入しようとしましたが、本文とヘッダーの "inputfilepath"を取っているようです。
私が持つにもかかわらず、それが働いていたが、ヘッダを作るために撮影したファイルは、本体1と同じであるようだと思いました良い人は宣言した。 –
あなたが何を意味するのかを明確にしてください。更新されたコードは何ですか? – JasonPlutext
編集したコードをメインメッセージに追加しました –