如何使用JavaI中的Apache PO在word的同一行中制作多色文本?

问题描述 投票:0回答:1

我需要使用 Apache POI 生成一个 Word 文档,该文档在一行中包含多种颜色的文本,然后以水平换行符结尾。就像下面的例子一样:

What I want

我尝试使用

mainText.setBorderBetween(Borders.BASIC_THIN_LINES);
来获得一条水平线,它有效,但水平线被一直向下推并且没有正确居中。我尝试使用:

mainTextRun.setColor("FFA500");
mainTextRun.setText("text 1");
mainTextRun.setColor("008000");
mainTextRun.setText("text 2");
mainTextRun.setColor("0000FF");
mainTextRun.setText("text 3");

但它没有生成所需的文本,因为它不断跳行,如下所示:

Pain.

java apache-poi docx
1个回答
1
投票

我猜你的

mainText
是一个
XWPFParagraph
,而你的
mainTextRun
是在那个
XWPFRun
中创建的多个
XWPFParagraph
。然后,下面的小最小的、可重现的示例将起作用并生成如下所示的Word文档。

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

public class CreateWordParagraphBorderAndColoredTextRuns {

 public static void main(String[] args) throws Exception {

  XWPFDocument document = new XWPFDocument();

  XWPFParagraph mainText = document.createParagraph();
  mainText.setBorderBottom(Borders.BASIC_THIN_LINES);
  
  XWPFRun mainTextRun = mainText.createRun(); 
  mainTextRun.setColor("FFA500"); mainTextRun.setText("text 1 "); 
  mainTextRun = mainText.createRun();
  mainTextRun.setColor("008000"); mainTextRun.setText("text 2 "); 
  mainTextRun = mainText.createRun();
  mainTextRun.setColor("0000FF"); mainTextRun.setText("text 3 ");

  mainText = document.createParagraph();

  FileOutputStream out = new FileOutputStream("./CreateWordParagraphBorderAndColoredTextRuns.docx");
  document.write(out);
  out.close();
  document.close();

 }
}

结果:

© www.soinside.com 2019 - 2024. All rights reserved.