Java Apache POI replaceText()的副作用,更改行空间

Java Apache POI replaceText()的副作用,更改行空间,java,apache-poi,hwpf,Java,Apache Poi,Hwpf,我正在使用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);

我正在使用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;
}
专用HWPDocument replaceText(HWPDocument文档,字符串findText,字符串replaceText){
Range r=doc.getRange();
对于(int i=0;i
在我保存文档之后。里面的内容都是正确的。但文档的样式并非如此。行与行之间的间距已更改。行之间的原始间隙丢失。所有生产线都紧密地挤在一起


为什么??如何保持模板的样式?

HWPF库可能不支持
doc
文件中存在的所有功能,这可能会导致格式更改。它还可能导致无法读取的文件

几年前,我创建了一个定制的HWPF库,它可以为我的一个客户正确地修改和编写各种各样的文档文件,我在文档文件格式和HWPF库方面获得了很多经验

问题是,必须正确支持HWPF中的所有功能,这些功能可能存在于文档文件中。例如,如果文件中包含clipart,则会有单独的表,这些表维护clipart的位置和属性。如果更改内容(文本)而不调整其他内部表格中的地址,则可能会移动、忽略或丢失格式等。(或者在最坏的情况下,文档不可读)

我不确定HWPF这些天的状态,但我希望它不完全支持主要的相关文档文件功能

如果您想使用HWPF修改/写入文档文件,您可能会成功地使用具有减少的“功能集”的文件。例如,没有表格,没有剪贴画,没有文本框——诸如此类的东西。如果您需要支持用户可能提供的几乎任何文档,我建议您找到不同的解决方案


一个选项是使用名为
.doc
rtf
文件。或者使用适用于
.docx
文件的XWPF库。

HWPF库可能不支持
文件中存在的所有功能,这可能会导致格式更改。它还可能导致无法读取的文件

几年前,我创建了一个定制的HWPF库,它可以为我的一个客户正确地修改和编写各种各样的文档文件,我在文档文件格式和HWPF库方面获得了很多经验

问题是,必须正确支持HWPF中的所有功能,这些功能可能存在于文档文件中。例如,如果文件中包含clipart,则会有单独的表,这些表维护clipart的位置和属性。如果更改内容(文本)而不调整其他内部表格中的地址,则可能会移动、忽略或丢失格式等。(或者在最坏的情况下,文档不可读)

我不确定HWPF这些天的状态,但我希望它不完全支持主要的相关文档文件功能

如果您想使用HWPF修改/写入文档文件,您可能会成功地使用具有减少的“功能集”的文件。例如,没有表格,没有剪贴画,没有文本框——诸如此类的东西。如果您需要支持用户可能提供的几乎任何文档,我建议您找到不同的解决方案


一个选项是使用名为
.doc
rtf
文件。或者使用XWPF库,它适用于
.docx
文件。

我想你是对的。我用DOCX测试了同样的方法,它保持了格式和布局。我认为你是对的。我用DOCX测试了相同的方法,它保持了格式和布局。