如何用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
相关产品推荐
相关产品推荐

