Как установить размер шрифта и размер шрифта нумерации в XWPFDocument (apache poi)? - PullRequest
0 голосов
/ 17 декабря 2018

В настоящее время создаем нумерацию следующим образом:

    CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();
    cTAbstractNum.setAbstractNumId(BigInteger.valueOf(0));

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

    XWPFParagraph tmpParagraph = document.createParagraph();
    tmpParagraph.setPageBreak(true);
    tmpParagraph.setNumID(numID);

Это работает нормально, поскольку абзацы получают правильную нумерацию, но я теряюсь, пытаясь найти способ изменить размер чисел.

1 Ответ

0 голосов
/ 18 декабря 2018

Мне удалось решить эту проблему, объединив поиск и обратный инжиниринг / распространение содержимого в документе, в котором я работал.

Вот решение «a», устанавливающее размер шрифта нумерации равным 18:

private String getNumberingXMLString(int fontSize) {
    return  "<w:abstractNum xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" w:abstractNumId=\"0\">"
            + "<w:multiLevelType w:val=\"hybridMultilevel\"/>"
            + "<w:lvl w:ilvl=\"0\"><w:start w:val=\"1\"/><w:numFmt w:val=\"decimal\"/><w:lvlText w:val=\"%1.\"/><w:lvlJc w:val=\"left\"/>"
            + "<w:pPr><w:ind w:left=\"720\" w:hanging=\"360\"/></w:pPr><w:rPr><w:sz w:val=\"" + fontSize*2 +"\"/><w:szCs w:val=\""+fontSize*2 +"\"/></w:rPr></w:lvl>"
            + "</w:abstractNum>";
}
...
...
...
            CTNumbering cTNumbering = CTNumbering.Factory.parse(getNumberingXMLString(18));
            CTAbstractNum cTAbstractNum = cTNumbering.getAbstractNumArray(0);
            XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);
            XWPFNumbering numbering = document.createNumbering();
            BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);
            numID = numbering.addNum(abstractNumID);

Если я предприму это правильно, это также можно решить с помощью

     cTLvl.getRPr().addNewSz().setVal(...);
     cTLvl.getRPr().addNewSzCs().setVal(...);

В коде, который я предоставил в вопросе

...