2016-09-15 294 views
0

我使用apache POI將word文檔轉換爲pdf。我正在用動態數據填充表格行。一切工作正常,但我想做一些增強,這是我想在每行數據之前添加一個項目符號。下面是一個for循環,我使用填寫表格的行數據:Apache poi項目符號和編號

for (String string : documentList) { 
     XWPFTableRow lnewRow = ltable.createRow(); 
     XWPFTableCell lnewCell = lnewRow.getCell(0); 
     XWPFParagraph lnewPara =lnewCell.getParagraphs().get(0); 
     XWPFRun lnewRun = lnewPara.createRun(); 
     lnewRun.setText(string); 
    } 

誰能告訴我,我怎麼能每行數據前添加一個子彈?

回答

2

已有多個示例用於創建XWPFNumbering。在我看來,他們中的大多數是不必要的複雜。所以讓我們有一個最簡單的解決方案:

import java.io.File; 
import java.io.FileOutputStream; 

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

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; 

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat; 

import java.util.ArrayList; 
import java.util.Arrays; 

import java.math.BigInteger; 

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

    XWPFDocument document = new XWPFDocument(); 

    XWPFParagraph paragraph = document.createParagraph(); 
    XWPFRun run=paragraph.createRun(); 
    run.setText("The table:"); 

    XWPFTable ltable = document.createTable(1,1); 

    ltable.getCTTbl().addNewTblGrid().addNewGridCol().setW(BigInteger.valueOf(5000)); 
    CTTblWidth tblWidth = ltable.getRow(0).getCell(0).getCTTc().addNewTcPr().addNewTcW(); 
    tblWidth.setW(BigInteger.valueOf(5000)); 
    tblWidth.setType(STTblWidth.DXA); 

    ltable.getRow(0).getCell(0).getParagraphs().get(0).createRun().setText("The list:"); 

    ArrayList<String> documentList = new ArrayList<String>(
    Arrays.asList(
    new String[] { 
    "documentList item 1", 
    "documentList item 2", 
    "documentList item 3" 
    })); 


//your code with supplements 

    CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance(); 
    //Next we set the AbstractNumId. This requires care. 
    //Since we are in a new document we can start numbering from 0. 
    //But if we have an existing document, we must determine the next free number first. 
    cTAbstractNum.setAbstractNumId(BigInteger.valueOf(0)); 

///* Bullet list 
    CTLvl cTLvl = cTAbstractNum.addNewLvl(); 
    cTLvl.addNewNumFmt().setVal(STNumberFormat.BULLET); 
    cTLvl.addNewLvlText().setVal("•"); 
//*/ 

/* Decimal list 
    CTLvl cTLvl = cTAbstractNum.addNewLvl(); 
    cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL); 
    cTLvl.addNewLvlText().setVal("%1."); 
    cTLvl.addNewStart().setVal(BigInteger.valueOf(1)); 
*/ 

    XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum); 

    XWPFNumbering numbering = document.createNumbering(); 

    BigInteger abstractNumID = numbering.addAbstractNum(abstractNum); 

    BigInteger numID = numbering.addNum(abstractNumID); 

    for (String string : documentList) { 
     XWPFTableRow lnewRow = ltable.createRow(); 
     XWPFTableCell lnewCell = lnewRow.getCell(0); 
     XWPFParagraph lnewPara =lnewCell.getParagraphs().get(0); 
     lnewPara.setNumID(numID); 
     XWPFRun lnewRun = lnewPara.createRun(); 
     lnewRun.setText(string); 
    } 

//your code end 

    paragraph = document.createParagraph(); 

    FileOutputStream out = new FileOutputStream("CreateWordTableWithBulletList.docx");  
    document.write(out); 

    System.out.println("CreateWordTableWithBulletList written successully"); 
} 
} 

我的例子總是完整的例子。我用你的代碼和我的補充標記了部分。