2016-08-06 9 views
1

私はApache poi word 3.8を使って、ペルシア語/アラビア語の単語文書を作成しようとしています。Apache word poi(XWPF)でテーブルの方向を変更する方法は?

私の質問は、文書内のテーブルの向きを変更する方法ですか?これは、表内の列の順序を意味します(表のセル内のテキストの方向ではありません)。

例:MSワードで

rtl table vs lrt table direction

我々は、使用してテーブルのプロパティを変更することができます:

this option

+4

可能な重複http://stackoverflow.com/questions/38802115/how-change-text-directionnot -paragraph-align-in-document-in-apache-poi-wor) – Deduplicator

答えて

3

テーブル全体が双方向でなければならない場合は、org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPrbidiVisualセットが含まれている必要がありますON

import java.io.FileOutputStream; 

import org.apache.poi.xwpf.usermodel.*; 

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; 

import java.math.BigInteger; 

public class CreateWordRTLTable { 

public static void main(String[] args) throws Exception { 

    XWPFDocument doc= new XWPFDocument(); 

    XWPFParagraph paragraph = doc.createParagraph(); 
    XWPFRun run = paragraph.createRun(); 
    run.setText("Paragraph 1 LTR"); 

    paragraph = doc.createParagraph(); 

    //create table: 
    XWPFTable table = doc.createTable(); 
    //set the table itself to bidi visual 
    if (table.getCTTbl().getTblPr() == null) { 
    table.getCTTbl().addNewTblPr().addNewBidiVisual().setVal(STOnOff.ON); 
    } else { 
    table.getCTTbl().getTblPr().addNewBidiVisual().setVal(STOnOff.ON); 
    } 
    //create first row 
    XWPFTableRow tableRow = table.getRow(0); 
    tableRow.getCell(0).setText("first cell"); 
    tableRow.addNewTableCell().setText("السلام عليكم"); 
    tableRow.addNewTableCell().setText("third cell"); 
    //Each cell contains at least a paragraph. Those can be set to support bidi. 
    for (int col = 0 ; col < 3; col++) { 
    paragraph = tableRow.getCell(col).getParagraphs().get(0); 
    CTP ctp = paragraph.getCTP(); 
    CTPPr ctppr = ctp.getPPr(); 
    if (ctppr == null) ctppr = ctp.addNewPPr(); 
    ctppr.addNewBidi().setVal(STOnOff.ON); 
    } 

    //create CTTblGrid for this table with widths of the 3 columns. 
    //necessary for Libreoffice/Openoffice to accept the column widths. 
    //values are in unit twentieths of a point (1/1440 of an inch) 
    table.getCTTbl().addNewTblGrid().addNewGridCol().setW(BigInteger.valueOf(2*1440)); 
    for (int col = 1 ; col < 3; col++) { 
    table.getCTTbl().getTblGrid().addNewGridCol().setW(BigInteger.valueOf(2*1440)); 
    } 

    //create and set column widths for all columns in all rows 
    //most examples don't set the type of the CTTblWidth but this 
    //is necessary for working in all office versions 
    //values are in unit twentieths of a point (1/1440 of an inch) 
    for (int col = 0; col < 3; col++) { 
    CTTblWidth tblWidth = CTTblWidth.Factory.newInstance(); 
    tblWidth.setW(BigInteger.valueOf(2*1440)); 
    tblWidth.setType(STTblWidth.DXA); 
    for (int row = 0; row < 1; row++) { 
    CTTcPr cttcpr = table.getRow(row).getCell(col).getCTTc().getTcPr(); 
    if (cttcpr != null) { 
    cttcpr.setTcW(tblWidth); 
    } else { 
    cttcpr = CTTcPr.Factory.newInstance(); 
    cttcpr.setTcW(tblWidth); 
    table.getRow(row).getCell(col).getCTTc().setTcPr(cttcpr); 
    } 
    } 
    } 

    paragraph = doc.createParagraph(); 

    doc.write(new FileOutputStream("WordDocument.docx")); 

} 
} 
[Apacheのポイワードで文書内のテキストの方向(ない段落の配置を)どのように変化するか?(XWPF)](の
関連する問題