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