Java Apache POI、.getRuns()未返回所有运行

Java Apache POI、.getRuns()未返回所有运行,java,ms-word,apache-poi,xwpf,Java,Ms Word,Apache Poi,Xwpf,我正在开发一个软件,它正在读取Word文档(XWPF),根据用户先前的配置更改语法,并将修改后的文本写回文档 为了实现这一点,我使用ApachePOI(3.10)。在大多数情况下,它的工作原理和预期的一样,但也有一些罕见的情况,它没有 更具体地说,代码将逐段浏览整个文档。我的代码通过设置段落的运行文本来更改段落的内容 为了更好地了解我所说的内容: XWPFDocument oldDoc = document; Iterator<XWPFParagraph> itera

我正在开发一个软件,它正在读取Word文档(XWPF),根据用户先前的配置更改语法,并将修改后的文本写回文档

为了实现这一点,我使用ApachePOI(3.10)。在大多数情况下,它的工作原理和预期的一样,但也有一些罕见的情况,它没有

更具体地说,代码将逐段浏览整个文档。我的代码通过设置段落的运行文本来更改段落的内容

为了更好地了解我所说的内容:

    XWPFDocument oldDoc = document;
    Iterator<XWPFParagraph> iterator = document.getParagraphsIterator();
    int length = title.length();
    int counter = 0;

    while(iterator.hasNext())
    {
        XWPFParagraph paragraph = iterator.next();
        List<XWPFRun> runs = paragraph.getRuns();
        for(int i = 0; i < runs.size(); i++)
        {
            String text = runs.get(i).toString();
            if(text.contains(title)) {
                runs.get(i).setText(StringFunctions.fromMultiFemaleToSingleMale(text, title, length), 0); 
            }
        }

        document.setParagraph(paragraph, counter);
        counter++;
    }
XWPFDocument oldDoc=文档;
迭代器迭代器=document.getParagraphsIterator();
int length=title.length();
int计数器=0;
while(iterator.hasNext())
{
XWPFParagraph段落=迭代器.next();
列表运行=段落.getRuns();
对于(int i=0;i
如您所见,我将段落的每一行都放入转换方法中,并覆盖该行的文本。(我认为)在这一点上没有问题

我的问题是,有两三个句子(或段落),它们在运行时不会返回整个文本。下面是一个例子

段落.getText()返回: 所有这些都是值得珍藏的。§53.如果你是一个普通人,那么你就可以从一个小村庄到另一个小村庄(jeweils ohne Zinsen)durchBankbestätigung Nachgeviesen帽子。

而paragration.getRuns()的连接返回:Alle Beteiligten weisen daher den Notar gem。§53作为一种文化,它是一种传统文化的产物,它最早起源于一种文化,它最适合作为一种文化

你可以在这里看到,最后三个字不见了。由于我正在访问运行,最后一部分将被忽略,并且永远不会被我的方法转换。但在这种情况下,我需要转换最后一个单词,使其语法正确

有没有人经历过类似的事情

我试图找到一个解决办法,但没有找到。
我的一位同事跟我谈过这件事,并提到他也经历过类似的事情,有时Word文档中类似XML的结构中存在某种缺陷,Word仍然可以使用它,但POI不是很好。这听起来不太可能,因为我正在使用的文档曾经是旧的Word格式(.doc),并与Word 2007一起保存为.docx。

在3.17中仍然可以看到

如果我的word文档中有此类遗漏:

Mr. Fancy Employee
Big Firm Manager
Nice Street 1       
1234 Best City              
                            McFly Martin
                            301 Clontarf Road
3 - Dublin Irland


Order Confirmation
Dear McFly Martin,
We confirm to having received your order (Vote ID: ${name}) on the 23.08.2014 18:23. Your payment amounts to £300.0.



Best regards,


Fancy Employee
Big Firm Manager
但是通过wordExtractor.getText()我错过了一件事

还有一次错过了所有getRuns()的liting


仍然可以在3.17中看到

如果我的word文档中有此类遗漏:

Mr. Fancy Employee
Big Firm Manager
Nice Street 1       
1234 Best City              
                            McFly Martin
                            301 Clontarf Road
3 - Dublin Irland


Order Confirmation
Dear McFly Martin,
We confirm to having received your order (Vote ID: ${name}) on the 23.08.2014 18:23. Your payment amounts to £300.0.



Best regards,


Fancy Employee
Big Firm Manager
但是通过wordExtractor.getText()我错过了一件事

还有一次错过了所有getRuns()的liting


你能试用最新版本的POI吗?目前版本是3.14?也许已经有一个修复程序应用于此…是的,我会尝试。我会在这里报告结果。你能试用最新版本的POI吗,目前是3.14?也许已经有一个修复程序应用于此…是的,我会尝试。我将在这里报告结果。
Mr. Fancy Employee
Big Firm Manager
Nice Street 1
1234 Best City
null

null
 -


null
null
Order Confirmation
Dear 

,
We confirm to having received your order (
Vote 
ID: 
)
 on the 
. Your payment amounts to
 £
.
null
null
null
Best regards,
null
null
Fancy Employee
Big Firm Manager