【问题标题】:How to add custom bullet to word document with apache poi如何使用 apache poi 将自定义项目符号添加到 word 文档
【发布时间】:2021-07-14 10:22:32
【问题描述】:

我想使用 apache poi 在我的 word 文档中添加自定义项目符号。

我可以用这个代码部分添加项目符号

    CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();
    cTAbstractNum.setAbstractNumId(BigInteger.valueOf(0));
    CTLvl cTLvl = cTAbstractNum.addNewLvl();
    cTLvl.addNewNumFmt().setVal(STNumberFormat.BULLET);
    cTLvl.addNewLvlText().setVal("•");
    XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);
    XWPFNumbering numbering = document.createNumbering();
    BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);
    BigInteger numID = numbering.addNum(abstractNumID);

但我想将项目符号格式更改为像这张照片一样

【问题讨论】:

    标签: java apache-poi


    【解决方案1】:

    cTLvl.addNewLvlText().setVal("•");
    

    设置项目符号。在这种情况下,Unicode 项目符号u\2022。因此,如果需要另一个符号,则将其设置在那里。

    Word 本身在这里使用特殊字体 Wingdings 来表示特殊符号。那里 ANSI 代码被映射到特殊字形。例如,ANSI 代码 216 (D8) 映射到显示该箭头符号的字形。但这需要CTLvl 的字体设置。

    最简单的解决方案是使用equivalent Unicode characters。 Wingdings 216 相当于 Unicode \u2B9A。所以

    cTLvl.addNewLvlText().setVal("\u2B9A");
    

    应该可以。

    如果您真的想像 Word 一样使用 Wingdings,则需要以下内容:

    cTLvl.addNewLvlText().setVal("\uF0D8");
    cTLvl.addNewRPr().addNewRFonts().setHAnsi("Wingdings");
    cTLvl.getRPr().getRFontsArray(0).setAscii("Wingdings");
    cTLvl.getRPr().getRFontsArray(0).setHint(STHint.DEFAULT);
    

    这将为cTLvl 设置字体Wingdings。

    请注意,该值设置为 \uF0D8 而不是 \u00D8。这是因为如果不能使用 Wingdings,\u00D8 会显示 Ø。这可能会导致刺激。

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 2013-05-15
      相关资源
      最近更新 更多