So after more investigation, I added to an existing bug report regarding the same issue:
https://issues.apache.org/bugzilla/show_bug.cgi?id=53009 Mike On Fri, Jan 11, 2013 at 12:38 PM, Mike McCullough <[email protected] > wrote: > Hello- > > I've been encountering problems trying to create a footer or header for > the DOCX format. Most of the examples that I have seen (including the > example ones from Apache POI) use the idea of a template file--however, > either there's not a way to copy only the XWPFHeaderFooterPolicy or I would > have to remove what's existing in the document template so that I'm able to > utilize headers this way. I will say that this method works, but is not, at > least in my opinion, the optimal way to create a header or footer. > > So for the method for creating the HeaderFooterPolicy for the non-template > route: > > -- > > XWPFHeaderFooterPolicy headerFooterPolicy = > document.getHeaderFooterPolicy(); > if (headerFooterPolicy == null) { > > CTBody body = document.getDocument().getBody(); > > CTSectPr sectPr = body.getSectPr(); > > if (sectPr == null) { > > sectPr = body.addNewSectPr(); > > } > > headerFooterPolicy = new XWPFHeaderFooterPolicy(document, sectPr); > > } > > -- > > I noticed that unless I did the above to create a SectPr, using the > XWPFHeaderFooterPolicy(XWPFDocument document) constructor would throw a > NullPointerException since the constructor just always assumes there's a > SectPr. This could provide a bug fix to other folks who may have > encountered this problem. > > Now that I have a working XWPFHeaderFooterPolicy, theoretically speaking I > should be able to just call > headerFooterPolicy.createFooter(XWPFHeaderFooterPolicy.DEFAULT, new > XWPFParagraph[]{...}) function to create a default footer (likewise for a > default header). However, when I take this approach, I'm encountering the > following problem when opening the docx file with Microsoft Word: > > "A text/xml declaration may occur only at the very beginning of input. > > Location: Part: /word/footer1.xml, Line: 2, Column: 192" > > Upon inspection of this XML file, I see that the following problem: > > -- > > <?xml version="1.0" encoding="UTF-8"?> > <w:ftr xmlns:w=" > http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:p><w:r><w:t>Test > Footer</w:t></w:r></w:p></w:ftr><?xml version="1.0" encoding="UTF-8"?> > <w:ftr xmlns:w=" > http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:p><w:r><w:t>Test > Footer</w:t></w:r></w:p></w:ftr> > > -- > > Which shows that POI is producing malformed XML (two lines of the same > thing), but I have not encountered why this is the case. > > My code that produces the XWPFFooter is shown below: > > -- > > CTP ctP1 = CTP.Factory.newInstance(); > CTR ctR1 = ctP1.addNewR(); > CTText text = ctR1.addNewT(); > text.setStringValue("Test Footer); > XWPFParagraph paragraph= new XWPFParagraph(ctP1, document); > > XWPFFooter footer = > headerFooterPolicy.createFooter(XWPFHeaderFooterPolicy.DEFAULT, new > XWPFParagraph[]{paragraph}); > > -- > > If there's anyone who's able to help with this particular problem, please > let me know. I am not necessarily interested in using the template approach > because I really believe that it's a bad solution, and would like to > understand either what I'm missing or shortcomings of the library which > will resort to me using the template approach. > > Thanks, > Mike >
