Apache пои Java. Я пытаюсь добавить нумерацию upper_letter, однако в результате все разделы получают нумерацию A - PullRequest
0 голосов
/ 21 марта 2020

приведенный ниже код позволяет мне добавить верхнюю букву, он добавляет букву A. к первому разделу, но для оставшихся разделов он сохраняет ту же букву A. Он не создает непрерывную нумерацию списка. Я получаю следующее:

A. Это первая секция

A. Это второй раздел

Что мне нужно получить:

A. Это первая секция

B. Это второй раздел

есть идеи, как этого добиться?

Список списков = document.getParagraphs ();

CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();
CTLvl cTLvl = cTAbstractNum.addNewLvl();
cTLvl.addNewNumFmt().setVal(STNumberFormat.UPPER_LETTER);
cTLvl.addNewLvlText().setVal("A.");
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 (XWPFParagraph paragraph : list) {

    if (paragraph.getText().trim().contains("This is section number one")|| 
            paragraph.getText().trim().contains("This is section number two") ){

        System.out.println(paragraph.getText() + " " + list.indexOf(paragraph));
        paragraph.setNumID(numID);


    }

}

}

1 Ответ

2 голосов
/ 21 марта 2020

В Привет, как я могу возобновить нумерацию в java word apache poi? Я предоставил метод BigInteger getNewDecimalNumberingId(XWPFDocument document, BigInteger abstractNumID). В этом методе

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

означает следующее: добавьте первый уровень к абстрактной нумерации с десятичным форматом числа и текстом уровня шаблона %1., начиная с первого доступного числа.

Там %1. - это шаблон . не означает 1., но %1 = следующий доступный номер для уровня 1, за которым следует точка .. Если бы было больше уровней, то на уровне 2 lvlText мог бы иметь val="%1.%2.". Это будет означать %1 = текущий номер для уровня 1, за которым следует точка ., затем %2 = следующий доступный номер для уровня 2, за которым следует точка ..

Соответствующий метод для нумерация заглавных букв будет:

 BigInteger getNewUpperLetterNumberingId(XWPFDocument document, BigInteger abstractNumID) {
  CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();
  cTAbstractNum.setAbstractNumId(abstractNumID);

  CTLvl cTLvl = cTAbstractNum.addNewLvl();
  cTLvl.addNewNumFmt().setVal(STNumberFormat.UPPER_LETTER);
  cTLvl.addNewLvlText().setVal("%1:");
  cTLvl.addNewStart().setVal(BigInteger.valueOf(1));

  XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);

  XWPFNumbering numbering = document.createNumbering();

  abstractNumID = numbering.addAbstractNum(abstractNum);

  BigInteger numID = numbering.addNum(abstractNumID);

  return numID;
 }

Вы видите, только cTLvl.addNewNumFmt().setVal(STNumberFormat.UPPER_LETTER); изменилось. %1: снова шаблон. Теперь это означает %1 = следующая доступная буква для уровня 1, за которой следует двоеточие :.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...