You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java POI为空格字符串设置下划线?

解决XWPFRun.setUnderline对空格字符串失效的问题

问题原因

Word对普通空格(U+0020)的渲染逻辑特殊,连续普通空格可能被自动压缩或不触发下划线样式的渲染,导致setUnderline设置失效。

解决方案

将普通空格替换为非断行空格(Unicode U+00A0),非断行空格会被Word视为常规可显示字符,下划线样式能正常生效。同时调整属性设置顺序,确保样式优先应用。

修改后的代码如下:

public static void setFilingParagraph(XWPFDocument doc, String beforeStr,String afterStr) {
    XWPFParagraph p = doc.createParagraph();
    p.setAlignment(ParagraphAlignment.LEFT);
    p.setSpacingBeforeLines(50);
    p.setSpacingAfterLines(50);
    XWPFRun r = p.createRun();
    r.setBold(false);
    r.setText(beforeStr);
    r.setColor("000000");
    r.setFontSize(14);
    if (afterStr != null) {
        XWPFRun run = p.createRun();
        // 先设置样式,再设置文本
        run.setColor("000000");
        run.setUnderline(UnderlinePatterns.SINGLE);
        run.setFontSize(14);
        // 将普通空格替换为非断行空格
        run.setText(afterStr.replace(" ", "\u00A0"));
    }
}

补充说明

如果需要保留普通空格的排版特性,也可以通过设置段落的"允许西文在单词中间换行"等属性,但替换为非断行空格是最直接有效的方式,能确保下划线在空格上正常显示。

内容的提问来源于stack exchange,提问作者zxy243153431

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:32:09