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

时间:2014-01-29 07:55:18

标签: java ms-word apache-poi libreoffice

这是从这里开始的:

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源代码中获得此功能。我是天真的吗?

2 个答案:

答案 0 :(得分:1)

在答案中提出一些意见:

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

  

public short getStyleIndex()

     

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

在你的情况下,你所追求的是等效但是对于角色奔跑。这也是(现在)可能的,如CharacterRun.getStyleIndex() javadocs

中所给出的那样
  

public short getStyleIndex()

     

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

     

请注意,运行通常会覆盖基类中的某些样式属性,因此通常应直接从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());

它向您展示了如何获取应用于Character Run

的基本样式的名称

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

答案 1 :(得分:-1)

使用

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