【问题标题】:How do I set the font & font-size of the numbering in a XWPFDocument (apache poi)?如何在 XWPFDocument (apache poi) 中设置编号的字体和字体大小?
【发布时间】:2018-12-18 20:58:08
【问题描述】:

目前正在创建这样的编号:

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

这很好,因为段落的编号正确,但我在试图找到一种方法来改变数字的大小时迷失了方向。

【问题讨论】:

    标签: java apache-poi xwpf


    【解决方案1】:

    我最终能够通过结合谷歌搜索和逆向工程/比较我工作过的文档中的内容来解决这个问题。

    这是将编号字体大小设置为 18 的“a”解决方案:

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

    在我在问题中提供的代码中

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 2012-05-24
      • 2017-09-06
      • 2021-01-12
      • 2015-12-08
      • 1970-01-01
      • 2017-12-10
      • 2018-09-12
      相关资源
      最近更新 更多