如何添加换行符,例如\\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.insertBefore
和 Range.insertAfter
方法不仅需要文本,而且都是私有的并且已弃用,并且几十年来也无法正常工作。其原因可能是 Microsoft Word
HWPF
的二进制文件格式当然是所有其他可怕文件格式(如 HSSF
、HSLF
中最可怕的文件格式。那么谁愿意为此烦恼呢?
但是要回答你的问题:
在文字处理中,文本结构为包含文本 运行 的段落。默认情况下,每个段落都换行。但是存储在文本 运行 中的“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
。下一个无法解决的问题,只差一步之遥
我必须修改旧的 .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.insertBefore
和 Range.insertAfter
方法不仅需要文本,而且都是私有的并且已弃用,并且几十年来也无法正常工作。其原因可能是 Microsoft Word
HWPF
的二进制文件格式当然是所有其他可怕文件格式(如 HSSF
、HSLF
中最可怕的文件格式。那么谁愿意为此烦恼呢?
但是要回答你的问题:
在文字处理中,文本结构为包含文本 运行 的段落。默认情况下,每个段落都换行。但是存储在文本 运行 中的“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
。下一个无法解决的问题,只差一步之遥