2013-05-28 50 views
0

我一直在試圖創建表格並使其在底部邊框和表格之後留下一些空格(通常是文本) 。如何在docx文檔中的表格之後設置空格(使用apache poi)

據我通過ooxml規範爬行我明白,我需要添加到表中這個元素鏈tblPr(表屬性) - > tblpPr(表位置屬性),並將屬性bottomFromText設置爲特定的數量我想要的表和下一個元素之間的空間,還有vertAnchor屬性(現在我用「text」值配置它),最後是tblpY屬性。

的我在做什麼問答& d片段是這樣的(Java和Apache POI):

XWPFTable table = document.createTable(); 
CTTblPr _cttblpr = table.getCTTbl().addNewTblPr(); 

_cttblpr.addNewTblpPr().setBottomFromText(BigInteger.valueOf(284)); 
_cttblpr.getTblpPr().setVertAnchor(STVAnchor.TEXT); 
_cttblpr.getTblpPr().setTblpY(BigInteger.valueOf(1)); 

我主要參考了this。此外,我一直在創建(使用LibreOffice編寫器和Microsoft Office 2007)簡單的文檔,只需要一個表格和我想要的空間,然後提取其中的文件(專門用word/document.xml)以查看這個文件。我現在所做的一切努力都沒有成功。

你知道這裏有什麼問題嗎?我堅信我已經錯過了概念......

在此先感謝您。

回答

1

你說的沒錯,你需要寬:bottomFromText,例如:

  <w:tbl> 
       <w:tblPr> 
        <w:tblpPr w:leftFromText="187" w:rightFromText="187" w:bottomFromText="4320" w:vertAnchor="text" w:tblpY="1"/> 
        <w:tblOverlap w:val="never"/> 
       </w:tblPr> 

基於以上,你的代碼看起來似是而非。

爲了便於比較,如果您使用的是docx4j,您可以通過2種方法之一來創建該功能。

第一種方式是顯式使用JAXB對象工廠:

org.docx4j.wml.ObjectFactory wmlObjectFactory =新org.docx4j.wml.ObjectFactory();

Tbl tbl = wmlObjectFactory.createTbl(); 
JAXBElement<org.docx4j.wml.Tbl> tblWrapped = wmlObjectFactory.createBodyTbl(tbl); 
    // Create object for tblPr 
    TblPr tblpr = wmlObjectFactory.createTblPr(); 
    tbl.setTblPr(tblpr); 
     // Create object for tblpPr 
     CTTblPPr tblppr = wmlObjectFactory.createCTTblPPr(); 
     tblpr.setTblpPr(tblppr); 
      tblppr.setLeftFromText(BigInteger.valueOf(187)); 
      tblppr.setRightFromText(BigInteger.valueOf(187)); 
      tblppr.setBottomFromText(BigInteger.valueOf(4320)); 
      tblppr.setVertAnchor(org.docx4j.wml.STVAnchor.TEXT); 
      tblppr.setTblpY(BigInteger.valueOf(1)); 
     // Create object for tblOverlap 
     CTTblOverlap tbloverlap = wmlObjectFactory.createCTTblOverlap(); 
     tblpr.setTblOverlap(tbloverlap); 
      tbloverlap.setVal(org.docx4j.wml.STTblOverlap.NEVER); 

二是要解組字符串:

String openXML = "<w:tbl xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"> 
         + "<w:tblPr> 
          + "<w:tblpPr w:bottomFromText=\"4320\" w:leftFromText=\"187\" w:rightFromText=\"187\" w:tblpY=\"1\" w:vertAnchor=\"text\"/>" 
           + "<w:tblOverlap w:val=\"never\"/>" 
          +"</w:tblPr>" 
etc  
       +"</w:tbl>"; 
    Tbl tbl = (Tbl)XmlUtils.unmarshalString(openXML); 
+0

首先我要感謝你的答案。第一種方法或多或少是我正在做的,第二種方法是非常骯髒的,我儘量不要在代碼中硬編碼,這應該是可維護的xD – Ole

相關問題