在.doc文件中,有一个函数可以通过使用来获取段落中的每个字符
CharacterRun charrun = paragraph.getCharacterRun(k++);
然后我可以使用这些角色运行来检查它们的属性,例如
if ( charrun.isBold() == true) System.out.print(charrun.text());
或者类似的东西。但是 .docx 文件似乎没有可以读取每个单词的字符运行方法,我尝试使用
XWPFParagraph item = paragraph.get(i);
List<XWPFRun> charrun = item.getRuns();
我发现当你在XWPF中调用character run时,它不会返回一个字符给你,而是会返回文档中一些长度随机的字符串
XWPFRun temp = charrun.get(0);
System.out.println(temp.gettext(0));
此代码不会返回段落中的第一个字符。
那么我该如何解决这个问题呢?
最佳答案
假设您要迭代Word文档中的所有(主要)段落(不包括表格、标题等),然后迭代该段落中的字符运行,然后迭代运行一个字符的文本有时,您想做类似的事情:
XWPFDocument doc = new XWPFDocument(OPCPackage.open("myfile.docx"));
for (XWPFParagraph paragraph : doc.getParagraphs()) {
int pos = 0;
for (XWPFRun run : paragraph.getRuns()) {
for (character c : run.text().toCharArray()) {
System.out.println("The character at " + pos + " is " + c);
pos++;
}
}
}
这将迭代每个字符,并将诸如制表符和换行符之类的内容表示为其等效字符(诸如 w:tab
之类的内容将被转换)。
对于 HWPF,获取段落的方式和从段落中获取运行的方式类似但不完全相同,因此没有通用的接口(interface)。 XWPFRun 和 HWPF 的 CharacterRun 共享一个公共(public)接口(interface),因此可以重用该部分代码
请注意,给定 character run 中的所有文本将共享相同的样式/格式信息。由于 Word 的工作方式很奇怪,两个相邻的运行也可能共享相同的样式,而 Word 尚未合并它们...
关于java - Apache POI 字符运行为 .docx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30078283/