2014-04-16 110 views
2

我正在使用poi生成docx file.file在open office中正確打開。但在ms word中出現錯誤「文本/ xml聲明可能只發生在輸入/word/footer1.xml「。當我提取我的生成的docx文件,我發現我用下面的代碼MS Word中的Apache POI頁腳問題

<?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> 

/word/footer1.xml我得到了在這個XML代碼生成的兩倍,這就是爲什麼微軟Word是給那個error.What我不得到什麼導致它生成兩次或如何能夠處理this.My POI代碼頁腳是如下

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); 

如果我刪除從代碼中它得到MS-Word成功打開createFooter聲明。 任何人都可以建議如何解決這個問題嗎?

+0

你確定你還沒有定義頁腳嗎? – Gagravarr

+0

是的,我是給你我的身份證,我會給你發出代碼。 – Manish

回答

2

原來這是從頭開始創建頁眉/頁腳時的一個錯誤。我遇到了同樣的問題,直至幷包括POI 3.9。它現在與3.10FINAL正常工作,我的代碼幾乎與您的代碼相同,所以我假設您將全部設置。