.docx 的 Apache POI 字符 运行
Apache POI characters run for .docx
在.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 中调用字符 运行 时,它不会 return 一个字符给你,但它会 return 一些随机长度的字符串文档
XWPFRun temp = charrun.get(0);
System.out.println(temp.gettext(0));
此代码不会 return 段落中的第一个字符。
那么我该如何解决这个问题?
假设你想遍历word文档中的所有(主要)段落(不包括表格,headers等),然后遍历该段落中的字符运行,然后一次遍历 运行 一个字符的文本,你会想要做这样的事情:
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,获取段落的方式与从段落中获取 运行s 的方式相似但不完全相同,因此没有通用接口。 XWPFRun 和 HWPF 的 CharacterRun 共享一个公共接口,所以这部分代码可以是 re-used
请注意,给定 character run 中的所有文本都将共享相同的样式/格式信息。由于 Word 的工作方式很奇怪,两个相邻的 运行 也可能共享相同的样式,而 Word 尚未合并它们...
在.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 中调用字符 运行 时,它不会 return 一个字符给你,但它会 return 一些随机长度的字符串文档
XWPFRun temp = charrun.get(0);
System.out.println(temp.gettext(0));
此代码不会 return 段落中的第一个字符。
那么我该如何解决这个问题?
假设你想遍历word文档中的所有(主要)段落(不包括表格,headers等),然后遍历该段落中的字符运行,然后一次遍历 运行 一个字符的文本,你会想要做这样的事情:
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,获取段落的方式与从段落中获取 运行s 的方式相似但不完全相同,因此没有通用接口。 XWPFRun 和 HWPF 的 CharacterRun 共享一个公共接口,所以这部分代码可以是 re-used
请注意,给定 character run 中的所有文本都将共享相同的样式/格式信息。由于 Word 的工作方式很奇怪,两个相邻的 运行 也可能共享相同的样式,而 Word 尚未合并它们...