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

如何用Java的Apache POI在Word同一行实现多色文本并添加水平线?

解决Apache POI生成Word多色文本与水平线问题

1. 同一行多色文本实现

问题根源是复用了同一个XWPFRun对象,重复调用setText会导致格式异常或自动换行。正确做法是为每个不同颜色的文本段创建独立的XWPFRun,示例代码如下:

XWPFDocument document = new XWPFDocument();
// 创建段落
XWPFParagraph paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER); // 可选:设置文本居中

// 橙色文本段
XWPFRun run1 = paragraph.createRun();
run1.setColor("FFA500");
run1.setText("text 1");

// 绿色文本段
XWPFRun run2 = paragraph.createRun();
run2.setColor("008000");
run2.setText("text 2");

// 蓝色文本段
XWPFRun run3 = paragraph.createRun();
run3.setColor("0000FF");
run3.setText("text 3");

同一段落内的多个XWPFRun会自动在同一行排列,不会触发换行。

2. 正确添加水平线(底部边框)

setBorderBetween是用于段落之间的分隔线,不适合作为文本行的末尾水平线。应该使用段落的底部边框,并调整间距让线条位置更合理:

// 设置段落底部为细实线边框
paragraph.setBorderBottom(Borders.BASIC_THIN_LINES);
// 可选:设置边框颜色(默认黑色)
paragraph.setBorderBottomColor("000000");
// 调整段落与线条的间距,避免位置偏下
paragraph.setSpacingAfter(5); // 段落后间距5磅
paragraph.setLineSpacing(1.2); // 行间距1.2倍,让文本与线条更贴近

完整可运行代码

import org.apache.poi.xwpf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;

public class WordMultiColorDemo {
    public static void main(String[] args) throws IOException {
        XWPFDocument document = new XWPFDocument();
        
        // 创建目标段落
        XWPFParagraph paragraph = document.createParagraph();
        paragraph.setAlignment(ParagraphAlignment.CENTER);
        paragraph.setLineSpacing(1.2);
        paragraph.setSpacingAfter(5);
        paragraph.setSpacingBefore(5);

        // 添加多色文本
        XWPFRun run1 = paragraph.createRun();
        run1.setColor("FFA500");
        run1.setText("text 1");

        XWPFRun run2 = paragraph.createRun();
        run2.setColor("008000");
        run2.setText("text 2");

        XWPFRun run3 = paragraph.createRun();
        run3.setColor("0000FF");
        run3.setText("text 3");

        // 添加底部水平线
        paragraph.setBorderBottom(Borders.BASIC_THIN_LINES);
        paragraph.setBorderBottomColor("000000");

        // 写入文件
        try (FileOutputStream out = new FileOutputStream("multiColorText.docx")) {
            document.write(out);
        }
        document.close();
    }
}

关键说明

  • 多色文本:每个颜色段必须用独立的XWPFRun,同一段落内的Run会自动在一行显示。
  • 水平线:用setBorderBottom替代setBorderBetween,通过调整段落间距和行间距控制线条位置,避免偏移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:55:05