Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java结果输出Relace HWPF文档段落文本_Java_Doc_Paragraph_Hwpf - Fatal编程技术网

使用java结果输出Relace HWPF文档段落文本

使用java结果输出Relace HWPF文档段落文本,java,doc,paragraph,hwpf,Java,Doc,Paragraph,Hwpf,如果.doc文件包含使用java的特定文本,我需要替换HWPFDocument段落文本。它取代了文本。但该过程以一种奇怪的方式写入输出文本。请帮我纠正这个问题。 使用的代码段: public static HWPFDocument processChange(HWPFDocument doc) { try { Range range = doc.getRange(); for (int i = 0; i < range.numParagrap

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

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;
}
输出:

*******Textvalue1
Textvalue1
Textvalue2
Textvalue3

HWPF库在更改/写入.doc文件方面并非处于完美状态。(至少在我上次查看时是这样。不久前,我为我的客户开发了一个自定义的HWPF变体,它提供了正确的替换和保存操作,但该库尚未公开。)

如果您绝对必须使用.doc文件和Java,您可以用长度完全相同的字符串替换。例如,
“12345”
->
“abc\uuuu”
\uuuu
是空格或任何适合你的东西)。在文档文件中找到待替换字符串的绝对位置(使用HWPF),然后直接在文档文件中更改它(不使用HWPF),这可能是有意义的


Word文件格式非常复杂,“正确使用”并不是一项简单的任务。除非您愿意花费大量的人工月,否则也不可能修复库的一部分以便只保存工作。许多数据结构必须非常精确地处理,一个“失误”就会使Word在生成的输出文件上崩溃。

我可以知道是否有人得到了解决方案吗?谢谢!感谢您宝贵的回复..不使用HWPF直接更改.doc文件中的字符串?怎么可能呢?你能解释一下吗?你需要深入了解HWPF的源代码。数据模型有两个级别:
usermodel
model
(都在包
org.apache.poi.hwpf
中)。当您在“usermodel”中运行文本时,您可以查看它如何引用“model”中的数据。最终,您可能会在类
CHPBinTable
中结束。可以查找名称中包含
FC
的内容,这些内容已经非常接近文件位置。然后下降到表示底层OLE2数据格式的
POIFS
包。您可能需要自定义一点HWPF,以使私有类/方法/字段可以访问。我正在尝试按照您的建议更改代码。如果遇到任何困难,我希望您提供有价值的建议。谢谢你的建议。问题解决了。修剪段落文本的空格。那么它工作得很好。
*******Textvalue1
Textvalue1
Textvalue2
Textvalue3