如何添加换行符,例如\\n 在 Apache POI HWPF 文档中

How do I add line breaks e.g. \\n in a Apache POI HWPF Document

我必须修改旧的 .doc 格式的 Word 文档。将 Apache POI 与文档的 HWPF 表示结合使用。我努力将换行符插入任何 table 单元格。在修改后的文档中,换行符看起来像空框。

table cell with added line break

我选择特定单元格后为此使用的代码:

cell.insertBefore("Test "+System.lineSeparator()+" Test");

以下也不起作用:

cell.insertBefore("Test "+System.getProperty("line.seperator")+" Test"); 
cell.insertBefore("Test \n Test");
cell.insertBefore("Test \r\n Test");

我尝试的一切都变成了盒子。

我还尝试将文档写入临时文件,然后将占位符替换为 HWPF -> empty boxes.Does 有人知道解决方案吗? 提前致谢。

忘记 apache poi HWPF。它处于暂存状态,几十年来没有任何进展。并且没有可用的方法来插入或创建新段落。所有 Range.insertBeforeRange.insertAfter 方法不仅需要文本,而且都是私有的并且已弃用,并且几十年来也无法正常工作。其原因可能是 Microsoft Word HWPF 的二进制文件格式当然是所有其他可怕文件格式(如 HSSFHSLF 中最可怕的文件格式。那么谁愿意为此烦恼呢?

但是要回答你的问题:

在文字处理中,文本结构为包含文本 运行 的段落。默认情况下,每个段落都换行。但是存储在文本 运行 中的“Text\nText”或“Text\rText”或“Text\r\nText”只会标记该文本 运行 中的换行符,而不是新段落。会...,因为当然 Microsoft Word 有它自己的规则。 \u000B 标记文本 运行.

中的换行符

所以你可以做的是:

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.hwpf.*;
import org.apache.poi.hwpf.usermodel.*;

public class ReadAndWriteDOCTable {

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

  HWPFDocument document = new HWPFDocument(new FileInputStream("TemplateDOC.doc"));

  Range bodyRange = document.getRange();
  System.out.println(bodyRange);
  
  TableIterator tableIterator = new TableIterator(bodyRange);
  while (tableIterator.hasNext()) {
   Table table = tableIterator.next();
   System.out.println(table);
   TableCell cell = table.getRow(0).getCell(0); // first cell in table
   System.out.println(cell);
   Paragraph paragraph = cell.getParagraph(0); // first paragraph in cell
   System.out.println(paragraph); 
   CharacterRun run = paragraph.insertBefore("Test\u000BTest");
   System.out.println(run); 
  }
  
  FileOutputStream out = new FileOutputStream("ResultDOC.doc");
  document.write(out);
  out.close();
  document.close();
  
 }
}

这会将文本 运行“Test\u000BTest”放在文档中每个 table 的第一个单元格的第一段之前。 \u000B 标记该文本中的换行符 运行.

也许这就是您想要实现的目标?但是,如前所述,忘记 apache poi HWPF。下一个无法解决的问题,只差一步之遥