java - 有什么方法可以识别 Apache POI xwpf 文档的字符样式吗?

标签 java apache-poi xwpf textstyle

Here我们看到“HWPF”(MS Word 2000 .doc)文件的 Apache POI 有一个方法CharacterRun.getStyleIndex()...您可以通过该方法识别字符样式(不是段落样式)适用于本次运行...

但是有了 XWPF东西(MS Word 2003+ .docx)文件,我找不到任何方法来识别 XWPFRun 对象中的字符样式。

最佳答案

以下代码应从 XWPFDocument 内的所有运行 [1] 获取所有样式,并打印其 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 rodent 的评论中提到的,如果您收到 java.lang.NoClassDefFoundError: org/openxmlformats/schemas/*something* 那么您必须使用完整的 ooxml-schemas-1.3。如 https://poi.apache.org/faq.html#faq-N10025 中提到的 jar .

对我来说,这段代码在没有这个的情况下运行,因为我不使用Phonetic Guide Properties ( https://msdn.microsoft.com/en-us/library/office/documentformat.openxml.wordprocessing.rubyproperties.aspx )。我使用 Office 2007。

关于java - 有什么方法可以识别 Apache POI xwpf 文档的字符样式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35253030/

相关文章:

java - 将字符串分解为大写的字符

Java string.format() 只工作了一半

java - POI无法打开工作簿打开.xls文件并且eclipse抛出异常

java - 使用带有 XWPFDocument 的 Apache POI 将图片添加到 .docx 文件

java - 如何更改 Scroll JavaFX 上的输出流?

java - 为什么我们不能有静态外部类

java - Apache POI 图表与日期

java - 使用 apache poi 存在项目符号点时正确的文本对齐

java - 如何在 Java 的 POI 中使用 XWPFTable 合并单元格(或应用 colspan)?

header - 如何使用 poi 3.8 替换 java 中 docx 标题中的占位符