java - 在 Word 文档中发现标题/段落

标签 java apache-poi

我正在尝试在 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/

相关文章:

java - 从 json 字符串解析时未调用对象构造函数

java - 来自 url 的 MediaPlayer 流

java - 为什么要在 Entity 类中添加 super()?

excel - 在 Apache POI 中使用 Excel 内置函数的示例

java - 使用 Java 读取货币和百分比

java - 是否可以使用java和Apache POI库逐行写入excel文件

java - 如何解决SAXException : Invalid element in

java - 捕获图像并显示为 Base64 字符串

java - 除了将 Apache POI Java 用于 Microsoft Office 之外,还有其他选择吗?

java - XSSF 无法复制样式 (POI)