Есть ли способ идентифицировать стили символов в документах Apache POI xwpf?

Здесь мы видим, что Apache POI для файлов "HWPF" (MS Word 2000 .doc) имеет метод CharacterRun.getStyleIndex()... с помощью которого вы можете, по-видимому, идентифицировать стиль (ы) символов (а не стили абзаца), которые применить к этому пробегу...

Но с файлами XWPF (MS Word 2003+ .docx) я не могу найти какой-либо способ идентифицировать стиль (ы) символов в объекте XWPFRun.

1 ответ

Решение

Следующий код должен получить все стили из всех прогонов [1] в пределах XWPFDocument и напечатайте их XML, если они применяются как стили символов:

import java.io.FileInputStream;

import org.apache.poi.xwpf.usermodel.*;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STStyleType;

import java.util.List;

public class WordGetRunStyles {

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

  FileInputStream fis = new FileInputStream("This is a Test.docx");
  XWPFDocument xdoc = new XWPFDocument(fis);

  List<XWPFParagraph> paragraphs = xdoc.getParagraphs();
  for (XWPFParagraph paragraph : paragraphs) {
   List<XWPFRun> runs = paragraph.getRuns();
   for (XWPFRun run : runs) {
    CTRPr cTRPr = run.getCTR().getRPr();
    if (cTRPr != null) {
     if (cTRPr.getRStyle() != null) {
      String styleID = cTRPr.getRStyle().getVal();
      System.out.println("Style ID=====================================================");
      System.out.println(styleID);
      System.out.println("=============================================================");
      XWPFStyle xStyle = xdoc.getStyles().getStyle(styleID);
      if (xStyle.getType() == STStyleType.CHARACTER) {
       System.out.println(xStyle.getCTStyle());
      }
     }
    }
   }
  }
 }
}

[1] пожалуйста, не пытайтесь сделать это с документом с большим содержанием;-).

Как упомянуто в комментарии от @mike грызуна, если вы получаете java.lang.NoClassDefFoundError: org/openxmlformats/schemas/*something* затем вы должны использовать полную версию ooxml-schemas-1.3.jar, как указано в https://poi.apache.org/faq.html.

Для меня этот код работает без этого, так как я не использую Phonetic Guide Properties ( https://msdn.microsoft.com/en-us/library/office/documentformat.openxml.wordprocessing.rubyproperties.aspx). Я использую Office 2007.

Другие вопросы по тегам