Using XHTML file as header
Posted: Wed May 24, 2017 8:42 pm
I'm using 2 xhtml files for my docx file.
One is the body of the docx and the other one is udes by the header.
1st file is named c.xhtml and 2nd one is named cc.xhtml.
In order to test my file, I use a simple xhtml :
Unfortunately, it seems docx4j is taking the body file and use it in the header too (as you can see in the attached docx).
Here's the code I'm using :
EDIT :
I was wrong saying the 2nd xhtml wasn't taken.
It seems the 2 xhtml files are used in the header. So I guess the first one is declared as the first part of the header.
One is the body of the docx and the other one is udes by the header.
1st file is named c.xhtml and 2nd one is named cc.xhtml.
In order to test my file, I use a simple xhtml :
- Code: Select all
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy for Java (vers. 2009-12-01), see jtidy.sourceforge.net" />
<title></title>
</head>
<body>
<p>Hello world</p>
</body>
</html>
Unfortunately, it seems docx4j is taking the body file and use it in the header too (as you can see in the attached docx).
Here's the code I'm using :
- Code: Select all
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);
EDIT :
I was wrong saying the 2nd xhtml wasn't taken.
It seems the 2 xhtml files are used in the header. So I guess the first one is declared as the first part of the header.