Java Apache POI 读取 Word (.doc) 文件并获取使用的命名字符样式

Posted

技术标签:

【中文标题】Java Apache POI 读取 Word (.doc) 文件并获取使用的命名字符样式【英文标题】:Java Apache POI read Word (.doc) file and get named CHARACTER styles used 【发布时间】:2014-01-29 07:55:18 【问题描述】:

从这里开始:

Java Apache POI read Word (.doc) file and get named styles used

当时 (10/2012) 有一种解决方案可以查找段落样式而不是字符样式。

然而...例如,如果您使用 LibreOffice Writer 打开 Word 文档,它确实会将样式和突出显示从 .doc 转换为 .odt ...因此某个地方似乎有人破解了这个...

我不知道 Apache POI 团队和 LibreOffice/OpenOffice 团队是否有任何关联,但我原以为 Apache POI 团队能够从 LO 源代码中获得此功能。我是不是太天真了?

【问题讨论】:

如果您根据 CharacterRun 而不是段落查找,则您引用的其他问题的答案中的代码应该可以正常工作 - 如果您尝试它会发生什么? 谢谢...但是poi.apache.org/apidocs/org/apache/poi/hwpf/usermodel/… - CharacterRun 没有与 Paragraph 一样的“getStyleIndex”方法。我正在尝试查找 字符样式的名称、索引或引用。 CharacterRun.getStyleIndex() 不能完全满足您的需求吗? ;-) @Gagravarr 我确定您正在尝试提供帮助,但请阅读我所说的内容,然后检查 API。 CharacterRun 没有方法“getStyleIndex”。 请检查 API,包括我提供给 JavaDocs 的链接,因为您可能会感到惊讶... :) 【参考方案1】:

推广一些cmets到一个答案:

如果您查看Java Apache POI read Word (.doc) file and get named styles used 中给出的答案,您将了解 Apache Tika 如何提取段落样式名称。取自Paragraph javadoc:

公共短 getStyleIndex()

返回适用于该段落的样式索引。可以通过 StyleSheet.getStyleDescription(int) 从 StyleSheet 中查找样式的详细信息

在您的情况下,您所追求的是等价的,但对于角色运行。这也是(现在)可能的,如CharacterRun.getStyleIndex() javadocs

公共短 getStyleIndex()

返回适用于此 Run 的基本样式的索引。可以通过 StyleSheet.getStyleDescription(int) 从 StyleSheet 中查找样式的详细信息。

请注意,运行通常会覆盖基础中的一些样式属性,因此通常应直接从 CharacterRun 本身获取样式信息。

要查看实际情况,TestRangeProperties unit test 中给出了一个很好的示例。从那里,我们看到这样的代码:

Range r = u.getRange();
StyleSheet ss = r._doc.getStyleSheet();

Paragraph p1 = r.getParagraph(0);
CharacterRun c1a = p1.getCharacterRun(0);

assertEquals("Normal", ss.getStyleDescription(c1a.getStyleIndex()).getName());

这向您展示了如何将基本样式的名称应用于角色运行

最后一件事 - 因为您需要使用每晚构建,或者等待 3.11 beta 1,因为提到的某些代码不在 3.10 final 中。

【讨论】:

【参考方案2】:

使用

paragraph.getCTP().getPPr().getRPr().isSetB()

【讨论】:

添加更多细节将有助于您的回答得到肯定。 这只会告诉你运行是否是粗体,它不会告诉你样式名称

以上是关于Java Apache POI 读取 Word (.doc) 文件并获取使用的命名字符样式的主要内容,如果未能解决你的问题,请参考以下文章

java读取word内容

使用java Apache poi 根据word模板生成word报表

java poi读取pdf word excel文档,读取pdf文字图片

java poi读取pdf word excel文档,读取pdf文字图片

java poi读取pdf word excel文档,读取pdf文字图片

java读word文件