无法从 Word 中读取 bidi 字符串(Apache POI)

bidi string can't be read from Word (Apache POI)

我正在使用 Apache POI 将 bidi 字符串用序列包装后写入 MS Word 文件 aString = "\u202E" + aString + "\u202C"; 文本在文件中正确呈现,并且在我再次检索字符串时读取正常。但是,如果我以任何方式修改文件,突然间,用 isBlank() 读取该字符串 returns true。 预先感谢您的任何 suggestions/help!

Microsoft WordOffice Open XML *.docx 格式存储双向文本时,它有时会使用特殊文本 运行 元素 w:bdo (bi d方向方向)。 Apache poi 直到现在才读取这些元素。所以如果 XWPFParagraph 包含这样的元素,那么 paragraph.getText() 将 return 一个空字符串。

可以使用 org.apache.xmlbeans.XmlCursor 从所有 XWPFParagraph 中真正获取所有文本,如下所示:

import java.io.FileInputStream;

import org.apache.poi.xwpf.usermodel.*;

import org.apache.xmlbeans.XmlCursor;

public class ReadWordParagraphs {
    
 static String getAllTextFromParagraph(XWPFParagraph paragraph) {
  XmlCursor cursor =  paragraph.getCTP().newCursor();
  return cursor.getTextValue();
 }

 public static void main(String[] args) throws Exception {

  XWPFDocument document = new XWPFDocument(new FileInputStream("WordDocument.docx"));
  
  for (XWPFParagraph paragraph : document.getParagraphs()) {
   System.out.println(paragraph.getText()); // will not return text in w:bdo elements
   System.out.println(getAllTextFromParagraph(paragraph)); // will return all text content of paragraph
  }
 }
}