Relace HWPFDocument 段落文本使用 java 结果奇怪的输出

Relace HWPFDocument paragraph text using java results strange output

我需要替换 .doc 文件的 HWPFDocument paragraph 文本,如果它包含使用 java 的特定文本。它取代了文本。但是该过程以一种奇怪的方式写入输出文本。请帮助我纠正这个问题。 使用的代码片段:

public static HWPFDocument processChange(HWPFDocument doc)
{
    try
    {
        Range range = doc.getRange();
        for (int i = 0; i < range.numParagraphs(); i++)
        {
            Paragraph paragraph = range.getParagraph(i);
            if (paragraph.text().contains("Place Holder"))
            {
                String text = paragraph.text();
                paragraph.replaceText(text, "*******");

            }
        }
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
    return doc;
}

输入:

Place Holder 
Textvalue1
Textvalue2
Textvalue3

输出:

*******Textvalue1
Textvalue1
Textvalue2
Textvalue3

HWPF 库不适合更改/写入 .doc 文件。 (至少在我最后一次看的时候是这样。前段时间我为我的客户开发了一个 HWPF 的自定义变体,其中包括提供正确的替换和保存操作,但该库不公开可用。)

如果您绝对必须使用 .doc 文件,并且 Java 您可以通过替换为完全相同长度的字符串来逃脱。例如 "12345" -> "abc__"_ 是空格或任何适合你的东西)。在 doc 文件中找到要替换的字符串的绝对位置(使用 HWPF),然后直接在 doc 文件中更改它(不使用 HWPF)可能有意义。

Word 文件格式非常复杂,"doing it right" 并非易事。除非您愿意花费很多人月,否则也不可能修复库的一部分以便仅保存工作。许多数据结构必须非常精确地处理,单个 "slip up" 会让 Word 在生成的输出文件上崩溃。