使用Apache POI设置Word字体颜色异常,请求技术支持
问题解决:Apache POI 设置Word文本颜色失效
问题根源
你始终使用同一个XWPFRun对象添加所有文本,而XWPFRun代表Word段落中的连续文本块,它的样式是全局生效的。即使中途修改颜色,整个Run内的所有文本最终会统一应用最后一次设置的样式(Word解析时会强制统一Run的样式),导致所有文本颜色一致。
修正方案
为每个不同样式的文本段创建独立的XWPFRun实例,每个Run的样式仅作用于自身包含的文本。
修正后的代码
public class WordAutomation { public static String projectpath = System.getProperty("user.dir"); public static FileOutputStream out; public static String ScreenshotPath = projectpath + "\\Screenshots\\"; public static XWPFDocument docx; public static XWPFParagraph paragraph; public static String wordFile; public static void main(String[] args) throws IOException { docx = new XWPFDocument(); paragraph = docx.createParagraph(); // 初始化段落 wordFile = ScreenshotPath + "ScreenshotFile.docx"; out = new FileOutputStream(wordFile); // 黑色文本:Test Started XWPFRun run = paragraph.createRun(); run.setText("Test Started"); run.addBreak(); // 黑色文本:Pass场景 run = paragraph.createRun(); run.setText("Its a Pass scenario"); run.addBreak(); // 红色文本:Fail场景 run = paragraph.createRun(); run.setColor("ff0000"); run.setText("Its a Fail scenario"); run.addBreak(); // 黑色文本:Pass场景 run = paragraph.createRun(); run.setColor("000000"); run.setText("Its a Pass scenario"); docx.write(out); out.flush(); out.close(); docx.close(); } }
说明
- 一个Word段落可以包含多个
XWPFRun,每个Run拥有独立的样式属性(颜色、字体、字号等)。 - 每次需要切换文本样式时,调用
paragraph.createRun()创建新的Run对象,即可保证当前样式仅作用于后续添加的文本。
内容的提问来源于stack exchange,提问作者Enock Prince
相关产品推荐
相关产品推荐

