如何使用Apache POI获取Word文档中第二个XWPFRun的字体大小?
解决XWPFRun获取字体大小返回null的问题
Word里的文本如果没单独设置字体属性,会自动继承上级(段落或文档默认)样式的属性。你遇到的情况里,"DATE"这个Run没有单独配置字体大小,所以getFontSizeAsDouble()会返回null,需要通过样式继承链来获取:
- 优先读取当前Run自身设置的字体大小
- 若为null,读取所属段落的默认字体大小
- 若段落也未单独设置,读取文档的默认字体大小
实现代码示例:
private Double getRunFontSize(XWPFRun run) { // 先尝试获取Run自身的字体大小 Double fontSize = run.getFontSizeAsDouble(); if (fontSize != null) { return fontSize; } // 从所属段落读取字体大小 XWPFParagraph paragraph = run.getParagraph(); if (paragraph != null) { CTP p = paragraph.getCTP(); CTPPr pPr = p.getPPr(); if (pPr != null && pPr.getRPr() != null) { CTSz sz = pPr.getRPr().getSz(); if (sz != null) { // Word中字体大小单位为半磅,需转换为常规磅值 return sz.getVal().doubleValue() / 2.0; } } } // 若都未设置,返回Word默认字体大小11磅 return 11.0; } // 调用示例 for (XWPFParagraph p : cell.getParagraphs()) { for(XWPFRun r1 : p.getRuns()){ Double fontSize = getRunFontSize(r1); // 后续处理逻辑 } }
内容的提问来源于stack exchange,提问作者Priyanka Mishra
相关产品推荐
相关产品推荐

