2017-11-03 15 views
0

tblPr 요소와 그 속성 tblpX 및 tblpY를 사용하여 테이블을 배치하려고합니다. 내 문제는 .docx 파일을 열 때 테이블이 페이지 왼쪽 상단에 있고 tblpX 및 tblPY 값을 무시한다는 것입니다. .docx 테이블의 위치는 here 또는 here입니다. 이 같은 보일 것입니다 :Apache POI, 테이블 위치 지정이 무시되고 있습니다 (.docx, xwpf)

<w:tbl> 
    <w:tblPr> 
    <w:tblpPr w:vertAnchor="text" w:tblpY="200" /> 
    </w:tblPr> 
    … 
</w:tbl> 

아파치 POI는 "tblpY"와 "tblpX"속성을 제공하지 않습니다, 그래서이 속성을 추가 생각할 수있는 유일한 방법은 수동이다. 여기 내 코드는 이렇게하는 :

public static XWPFTable createTable(XWPFDocument doc) { 

    //CTTbl ctTable = CTTbl.Factory.newInstance(); 
    XWPFTable table = doc.createTable();//new XWPFTable(ctTable, doc, 0, 0); 

    XmlObject x = (XmlObject) table.getCTTbl().getTblPr(); 
    XmlCursor c = x.newCursor(); // Create a cursor at the element 
    c.toNextToken();    // Move cursor after the tblPr tag 
    c.insertElement("tblPr", "http://schemas.openxmlformats.org/wordprocessingml/2006/main"); 

    c.toPrevSibling(); //Now go to the tblPr 
    XmlObject x2 = c.getObject(); //Get the tblPr object 
    c.dispose(); 
    c = x2.newCursor(); //Now our cursor is inside the second tblPr 
    c.toNextToken(); 
    c.insertAttributeWithValue("tblpX", "http://schemas.openxmlformats.org/wordprocessingml/2006/main", "500"); 
    c.insertAttributeWithValue("tblpY", "http://schemas.openxmlformats.org/wordprocessingml/2006/main", "500"); 
    c.dispose(); 

    XWPFTableRow tr = table.getRow(0); 
    XWPFTableCell cell = tr.getCell(0); 
    cell.setText("some text"); 

    return table; 

} 

내가 .DOCX을 열고 확인한 다음 내가 잘못하고있는 중이 야 무엇 document.xml 그래서

<w:tbl> 
    <w:tblPr> 
    <w:tblPr w:tblpX="500" w:tblpY="500"/> 
    <w:tblW w:w="0" w:type="auto"/> 
    <w:tblBorders> 
     <w:top w:val="single"/> 
     <w:left w:val="single"/> 
     <w:bottom w:val="single"/> 
     <w:right w:val="single"/> 
     <w:insideH w:val="single"/> 
     <w:insideV w:val="single"/> 
    </w:tblBorders> 
    </w:tblPr> 
    <w:tr> 
    <w:tc> 
     <w:p> 
     <w:r> 
      <w:t>some text</w:t> 
     </w:r> 
     </w:p> 
    </w:tc> 
    </w:tr> 
</w:tbl> 

의 내부에 있다고? 테이블이 왜 맨 위 왼쪽에 있습니까? Microsoft tblpX 및 tblpY 값을 무시하는 이유는 무엇입니까?

+0

오 !!! 해결책을 찾았습니다! –

답변

1

tblPr의 하위 노드는 다음과 같아야합니다. tblpPr NOT tblPr!

"p"의 구문에서 한 가지 차이점이 나를 쫓아 냈습니다.

어쨌든 누구든지이 사실을 알 수 있기를 바랍니다. 예 : 이미 테이블을 배치하기 위해 Apache POI를 사용하는 방법에 대한 StackOverflow 솔루션이 없었습니다 ... 지금까지 mwahahaha