使用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