Apache poi 项目符号和编号 [英] Apache poi bullets and numbering

查看:82
本文介绍了Apache poi 项目符号和编号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 apache POI 将 word 文档转换为 pdf.我正在用动态数据填充表格行.一切正常,但我想做一些增强,即我想在每行数据之前添加一个项目符号.这是我用来填充表中行数据的 for 循环:

I am using apache POI for converting a word document into pdf. I am filling the table rows with dynamic data. Everything is working fine, but i want to do some enhancement that is i want to add a bullet before each row data. Here is a for loop i am using to fill the row data in the table:

  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); 
  }

谁能告诉我如何在每行数据前添加项目符号?

Can anyone please tell me how can i add a bullet before each row data?

推荐答案

已有多个创建 XWPFNumbering 的示例.在我看来,它们中的大多数都是不必要的复杂.所以让我们有一个最简单的解决方案:

There are multiple examples for creating XWPFNumbering already. Most of them are unnecessary complex in my opinion. So let's have a simplest solution:

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.setIlvl(BigInteger.valueOf(0)); // set indent level 0
  cTLvl.addNewNumFmt().setVal(STNumberFormat.BULLET);
  cTLvl.addNewLvlText().setVal("\u2022");
//*/

/* Decimal list
  CTLvl cTLvl = cTAbstractNum.addNewLvl();
  cTLvl.setIlvl(BigInteger.valueOf(0)); // set indent level 0
  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");
 }
}

我的例子总是完整的例子.我已经用你的代码和我对它的补充标记了这个部分.

My examples are always complete examples. I have marked the part with your code and my supplements to it.

这篇关于Apache poi 项目符号和编号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆