Apache POI - DOCX - 是否有机会迭代 XWPFStyles?

问题描述 投票:0回答:1

已使用 Apache POI (5.2.5) 阅读 docx,并希望枚举 MS WORD docx 中的所有样式(不仅是使用的样式)。

XWPFStyles styles = document.getStyles();

好的,有样式了。我还可以输出样式数量(在我的例子中为 79):

System.out.println("Number of styles: "+styles.getNumberOfStyles());

好的,有很多款式。有没有机会获得一个数组、一个列表或其他任何我可以用来“遍历”所有样式的东西? 预先感谢。

我阅读了大量的 Apache POI 文档,但没有找到任何“保持简单和愚蠢”的解决方案。

java apache apache-poi docx
1个回答
0
投票

由于 Apache POI 是开源的,您可以查看 XWPFStyles.java 的源代码。在那里你会发现一个

private final List<XWPFStyle>
。这用于获取样式数量:

public int getNumberOfStyles() {
    return listStyle.size();
}

但是,没有方法可以迭代这个列表。

所以我看到的唯一可能性是使用反射:

import java.io.FileInputStream;

import org.apache.poi.xwpf.usermodel.*;
import java.util.List;

public class XWPFGetStyles {

 public static void main(String[] args) throws Exception {

  try ( FileInputStream in = new FileInputStream("./WordDocument.docx");
      ) {         
   XWPFDocument document = new XWPFDocument(in); 
   XWPFStyles styles = document.getStyles();
   System.out.println(styles.getNumberOfStyles());
   java.lang.reflect.Field _listStyle  = XWPFStyles.class.getDeclaredField("listStyle");
   _listStyle.setAccessible(true);
   @SuppressWarnings("unchecked")
   List<XWPFStyle> listStyle = (List<XWPFStyle>)_listStyle.get(styles);
   for (XWPFStyle style : listStyle) {
    System.out.println(style);
   }
  } catch (Exception ex) {
   ex.printStackTrace();  
  }
  
 }
  
}
© www.soinside.com 2019 - 2024. All rights reserved.