3

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

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
4

1 回答 1

3

HWPF 库在更改/编写 .doc 文件方面并不完美。(至少在我最后一次查看时。前段时间,我为我的客户开发了一个自定义的 HWPF 变体——除其他外——提供正确的替换和保存操作,但该库不公开。)

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

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

于 2015-04-29T13:58:19.447 回答