我正在尝试在 word 文档中发现段落/标题。
我使用 Apache POI 来执行此操作。
我使用的一个例子是:
fs = new POIFSFileSystem(new FileInputStream(filesname));
HWPFDocument doc = new HWPFDocument(fs);
WordExtractor we = new WordExtractor(doc);
ArrayList titles = new ArrayList();
try {
for (int i = 0; i < we.getText().length() - 1; i++) {
int startIndex = i;
int endIndex = i + 1;
Range range = new Range(startIndex, endIndex, doc);
CharacterRun cr = range.getCharacterRun(0);
if (cr.isBold() || cr.isItalic() || cr.getUnderlineCode() != 0) {
while (cr.isBold() || cr.isItalic() || cr.getUnderlineCode() != 0) {
i++;
endIndex += 1;
range = new Range(endIndex, endIndex + 1, doc);
cr = range.getCharacterRun(0);
}
range = new Range(startIndex, endIndex - 1, doc);
titles.add(range.text());
}
}
}
catch (IndexOutOfBoundsException iobe) {
//sometimes this happens have to find out why.
}`enter code here`
这适用于所有粗体、斜体或带下划线的文本。
但我想要的是发现最常使用的字体。然后发现与该字体样式相比的变化。
有什么想法吗?
最佳答案
好吧,有些想法是尝试以下一些方法:
cr.getFontSize()
可以用在段落的开头,以查看范围是否改变字体大小。与粗体、斜体或下划线一起使用将是一个很好的标识符。cr.getFontName()
还可用于确定字体在给定范围内何时何地更改。cr.getColor()
是另一种帮助识别用户是否对字体使用不同颜色的可能性。
我想每次文本特征发生变化时,我都会遍历该范围并创建多个 CharacterRun
项。然后根据段落中的位置以及所有上述特征(大小、颜色、名称、粗体、斜体等)评估每个项目。或许可以根据最常见的值创建某种权重比例。
创建 Title
对象并存储每组特征的值以帮助优化同一文档中后续字符运行的搜索也可能很有值(value)。
关于java - 在 Word 文档中发现标题/段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5325726/