我正在使用poi生成docx file.file正在打开办公室正确打开。但在ms中我得到错误“text / xml声明可能只发生在/ word / footer1输入的最开头。 XML”。当我提取生成的docx文件时,我发现我的/word/footer1.xml包含以下代码
<?xml version="1.0" encoding="UTF-8"?>
<w:ftr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:p>
<w:r>
<w:rPr>
<w:color w:val="D3D3D3"/>
</w:rPr>
<w:t>
Section 1Page1
</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:rPr>
<w:color w:val="D3D3D3"/>
</w:rPr>
<w:t>
Section 1Page1
</w:t>
</w:r>
</w:p>
</w:ftr>
我得到的是xml代码生成两次,这就是Ms word给出错误的原因。我没有得到导致它生成两次的原因或者我如何处理这个问题。我的Poi代码为脚注如下< / p>
CTP ctp = CTP.Factory.newInstance();
CTR ctr = ctp.addNewR();
CTRPr rpr = ctr.addNewRPr();
rpr.setColor( CTColor.Factory.newInstance() );
style = new WordStyle();
style.setColor( "D3D3D3" );
ctr.getRPr().getColor().setVal( style.getColor() );
CTText text = ctr.addNewT();
text.setStringValue( parentLevelTitle+" Page 1" );
XWPFParagraph codePara = new XWPFParagraph( ctp, document );
XWPFParagraph[] newparagraphs = new XWPFParagraph[1];
newparagraphs[0] = codePara;
CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
CTPageMar ctPageMar = sectPr.addNewPgMar();
ctPageMar.setLeft( BigInteger.valueOf( 720L ) );
ctPageMar.setTop( BigInteger.valueOf( 1440L ) );
ctPageMar.setRight( BigInteger.valueOf( 720L ) );
ctPageMar.setBottom( BigInteger.valueOf( 1440L ) );
XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy( document, sectPr );
headerFooterPolicy.createFooter( STHdrFtr.DEFAULT, newparagraphs );
如果我从代码中删除了createFooter语句它在ms-word中成功打开。 有人可以建议如何解决这个问题吗?
答案 0 :(得分:2)
事实证明,从头开始创建页眉/页脚是一个错误。我遇到了同样的问题,包括POI 3.9。它现在与3.10FINAL正常工作,我的代码几乎与你的代码相同,所以我假设你将全部设置。