首页 > 解决方案 > 如何使用 apache poi 将自定义项目符号添加到 word 文档

问题描述

我想使用 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);

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

子弹

标签: javaapache-poi

解决方案


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

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

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

最简单的解决方案是使用等效的 Unicode 字符。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.

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


推荐阅读