java - 如何使用 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);
但我想将项目符号格式更改为像这张照片一样
解决方案
这
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 会显示 Ø。这可能会导致刺激。
推荐阅读
- azure - 如何在 Azure 负载均衡器入站 NAT 规则上替换目标 VM 和 NIC
- javascript - 创建 NavBar 以执行操作
- validation - 如何仅使用请求在没有插件的情况下验证 AWS 无服务器架构
- python - 如何使用 pymongo 按 13 位 NumberLong 时间字段进行搜索
- r - 如何在 i 中使用 data.table 的 .N?
- django - 如何使用 django-ratelimit 或节流设置多个速率限制,每 10 秒,每 10 分钟,每 1 天?
- javascript - 如何在javascript中计算字符串中的数字?
- mysql - mysql变量作为SQL脚本中的表名
- rust - 如何为 32 位 little-endian PowerPC 处理器编译 rustc?
- python - 构建一个函数以根据截止值删除数据集中的最小值和最大值?