Apache poi项目符号和编号

问题描述:

我使用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); 
    } 

谁能告诉我,我怎么能每行数据前添加一个子弹?

已有多个示例用于创建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"); 
} 
} 

我的例子总是完整的例子。我用你的代码和我的补充标记了部分。