Java Apache poi项目符号和编号
我正在使用ApachePOI将word文档转换为pdf。我正在用动态数据填充表行。一切正常,但我想做一些增强,就是在每行数据之前添加一个项目符号。下面是我用来填充表中行数据的for循环:Java Apache poi项目符号和编号,java,apache-poi,Java,Apache Poi,我正在使用ApachePOI将word文档转换为pdf。我正在用动态数据填充表行。一切正常,但我想做一些增强,就是在每行数据之前添加一个项目符号。下面是我用来填充表中行数据的for循环: for (String string : documentList) { XWPFTableRow lnewRow = ltable.createRow(); XWPFTableCell lnewCell = lnewRow.getCell(0); XWPFP
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);
}
有谁能告诉我如何在每行数据之前添加一个项目符号吗?已经有多个创建XWPF编号的示例。在我看来,大多数都是不必要的复杂。因此,让我们有一个最简单的解决方案:
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("\u2022");
//*/
/* 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 = null;
if (lnewCell.getParagraphs().size() > 0) {
lnewPara = lnewCell.getParagraphs().get(0);
} else {
lnewPara = lnewCell.addParagraph();
}
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);
out.close();
System.out.println("CreateWordTableWithBulletList written successully");
}
}
我的例子总是完整的例子。我已经用您的代码和我对它的补充标记了该部分。可能有点晚了,但我应用了Axel提出的解决方案,效果很好 只是类CTLvlText有点问题,从方法cTLvl.addNewLvlText返回的对象无法在ApachePOIjars中找到它 我不是通过引入下一个级别来处理它,而是每次创建新的段落时都将NumId设置为该段落
private void generateVarios(XWPFDocument doc1, List<VariosDTO> varios) {
CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();
cTAbstractNum.setAbstractNumId(BigInteger.valueOf(0));
CTLvl cTLvl = cTAbstractNum.addNewLvl();
cTLvl.addNewNumFmt().setVal(STNumberFormat.BULLET);
//CTLevelText a = cTLvl.addNewLvlText();
XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);
XWPFNumbering numbering = doc1.createNumbering();
BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);
BigInteger numID = numbering.addNum(abstractNumID);
for (VariosDTO item : varios){
XWPFParagraph bulletedPara = doc1.createParagraph();
XWPFRun run = bulletedPara.createRun();
run.setFontFamily(ARIAL);
run.setFontSize(10);
run.setText(item.getComentario());
bulletedPara.setNumID(numID);
}
}
希望能对别人有用