我有一个doxc文档,它有一些粗体文本。由于某些原因,run.isbold()返回false,尽管run itsel是粗体的。这里可能有什么问题?
我用来读取文件的代码:
XWPFDocument document = new XWPFDocument(fis);
for(XWPFParagraph paragraphs: document.getParagraphs()){
for(XWPFRun run: paragraphs.getRuns()){
System.out.println(run.isBold());
System.out.println(run.text());
}
文件内容如下所示:
米õisted公司
2.1. 一些文字
2.1.1. 汇集-一些文本
奇怪的是这个头衔(汉克勒平古)üldtingimused)在文件的开头是粗体的,但是在那之后就没有粗体了。
1条答案
按热度按时间odopli941#
在我检查了你的
test.docx
我可以告诉你:“文本”üldosa“和”mõ“isted”不是粗体,因为它们的格式是粗体的,而是因为整个段落的样式是“heading2”。文本“pooled”也不是粗体格式,而是应用了特殊的字符样式“paks”。所以有人广泛地使用了词汇风格。一点也不坏。正如html应该使用css样式表而不是直接格式化一样,在word中也应该首选使用样式表。当然,解析时的问题也是一样的。如果不对样式表进行额外的分析,就无法确定文本应该如何呈现。不幸的是
apache poi
直到现在才开始关注款式。一个人怎么能有这样的洞察力呢?一
*.docx
文件只是一个ZIP
档案文件。所以我们可以解压它并找到:/word/document.xml
:这是一个文本运行真正的粗体格式直接。
但是
这是一个具有“heading2”样式的段落,并且自动编号。
那么为什么这段文字是粗体的呢?在
/word/styles.xml
我们发现:这是链接到字符样式“heading2char”的段落样式“heading2”。
这是设置为粗体的字符样式“heading2char”。
回答如何使用
apache poi
必须知道这一点apache poi
XWPF
基于org.openxmlformats.schemas.wordprocessingml.x2006.main.*
来自ooxml-schemas.*.jar
. 所以我们需要这方面的信息。不幸的是没有API
公开文件。所以我们需要下载源代码javadoc
我们自己。那么接下来该怎么办呢?重复段落和运行。但是每一段都要增加一些内容,以获得这一段的风格。如果有,得到它和它的字符样式,并检查它提供了什么设置。同样,对于每次跑步,尝试获取此跑步的角色样式。如果有,获取它并检查它提供了什么设置。
下面的代码正在执行此操作,但仅用于检查样式是否提供粗体设置。因此,它确实是不完整的,使它完整将是非常昂贵的。