MS Word中的Apache POI页脚问题

时间:2014-04-16 12:38:02

标签: apache-poi docx

我正在使用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中成功打开。 有人可以建议如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

事实证明,从头开始创建页眉/页脚是一个错误。我遇到了同样的问题,包括POI 3.9。它现在与3.10FINAL正常工作,我的代码几乎与你的代码相同,所以我假设你将全部设置。