relace hwpfdocument段落文本使用java结果输出

lvjbypge  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(363)

我需要换一个新的
HWPFDocument paragraph 的文本 .doc 如果文件包含特定文本,则使用 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
zpgglvta

zpgglvta1#

hwpf库对于更改/写入.doc文件来说不是一个完美的状态(至少在我最后一次看的时候。不久前,我为我的客户机开发了一个定制的hwpf变体,它提供了正确的替换和保存操作,但该库并不公开。)
如果您绝对必须使用.doc文件和java,您可以用长度完全相同的字符串替换。例如 "12345" -> "__" ( _ 空间或任何适合你的东西)。在doc文件中找到要替换的字符串的绝对位置(使用hwpf),然后直接在doc文件中更改它(不使用hwpf),这可能是有意义的。
word文件格式非常复杂,“正确处理”并不是一件小事。除非你愿意花很多人月,否则也不可能修复库的一部分,这样就可以节省工作量。许多数据结构必须非常精确地处理,一个“失误”就可以让word在生成的输出文件上崩溃。

相关问题