我正在 Java 中使用 POI 3.15 来替换 .doc 模板中的一些文本。
private HWPFDocument replaceText(HWPFDocument doc, String findText, String replaceText) {
Range r = doc.getRange();
for (int i = 0; i < r.numSections(); ++i) {
Section s = r.getSection(i);
for (int j = 0; j < s.numParagraphs(); j++) {
Paragraph p = s.getParagraph(j);
for (int k = 0; k < p.numCharacterRuns(); k++) {
CharacterRun run = p.getCharacterRun(k);
String text = run.text();
if (text.contains(findText)) {
run.replaceText(findText, replaceText);
}
}
}
}
return doc;
}
保存文档后。里面的所有内容都是正确的。但文档的风格却不然。行与行之间的间距已更改。线条之间的原始间隙丢失了。所有线路都紧密地排列在一起。
为什么?如何保持模板的风格?最佳答案
HWPF 库可能不支持 doc
文件中存在的所有功能,这可能会导致格式发生更改。它还可能导致文件无法读取。
几年前,我创建了一个定制的 HWPF 库,它可以为我的一位客户正确修改和编写各种 doc 文件,并且我获得了很多有关 doc 文件格式和 HWPF 库的经验。
问题是,必须正确支持 HWPF 中的所有功能,这些功能可能存在于 doc 文件中。例如,如果文件中包含剪贴画,则会有单独的表,用于维护剪贴画的位置和属性。如果内容(文本)发生变化而没有调整其他内部表中的地址,则格式等可能会被移动、忽略或丢失。 (或者在最坏的情况下,该文档无法读取)
我现在不确定 HWPF 的状态,但我预计它不完全支持主要的相关文档文件功能。
如果您想使用 HWPF 修改/写入文档文件,您可能会成功使用具有减少“功能集”的文件。例如,没有表格、没有剪贴画、没有文本框等等。如果您需要支持用户可能提供的几乎所有文档,我建议您寻找不同的解决方案。
一种选择是使用名为 .doc
的 rtf
文件。或者使用适用于 .docx
文件的 XWPF 库。
关于java - Apache POI ReplaceText() 副作用,更改行间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56347996/