Apache POI Word 使用自定义标题样式

Apache POI Word using custom styles for titles

我正在尝试使用 apache-poi 在 word (.docx) 文档中创建标题。

我有一个模板,其中仅包含自定义样式和使用自定义样式的标题示例。

XWPFDocument document=new XWPFDocument(new FileInputStream("template.docx"));

我的自定义样式叫做"CUSTOM_YNP"(我是直接在Word中创建的),但是当我使用下面这行时,它returns false

document.getStyles().styleExist("CUSTOM_YNP")

当然,当我尝试使用这种风格时,它不起作用,实际上它以 "Normal" 风格

打印我的字符串
XWPFParagraph paragraph=document.createParagraph();
paragraph.setStyle("CUSTOM_YNP");
XWPFRun run=paragraph.createRun();
run.setText("TEST");

仅作记录,我的 "save document" 行:

document.write(new FileOutputStream("myDoc.docx"));

我已经阅读了这个问题,但实际上找不到解决我问题的方法...How can I use predefined formats in DOCX with POI?

编辑:如果我使用 Apache-POI 创建自己的样式,它会起作用。我仍然非常喜欢使用 word 文档中的现有样式。

确保先创建样式并将其添加到文档中:

XWPFDocument document = new XWPFDocument();
XWPFStyles styles = document.createStyles();

String heading1 = "My Heading 1";
addCustomHeadingStyle(document, styles, heading1, 1, 36, "4288BC");

XWPFParagraph paragraph = document.createParagraph();
paragraph.setStyle(heading1);

addCustomHeadingStyle 为:

private static void addCustomHeadingStyle(XWPFDocument docxDocument, XWPFStyles styles, String strStyleId, int headingLevel, int pointSize, String hexColor) {

    CTStyle ctStyle = CTStyle.Factory.newInstance();
    ...
    //create your style
    ...
    XWPFStyle style = new XWPFStyle(ctStyle);

    style.setType(STStyleType.PARAGRAPH);
    styles.addStyle(style);
}

一个*.docx是一个ZIP档案。您可以解压缩它并查看 /word/styles.xml。在那里你会看到 w:styleId="CUSTOMYNP" 没有下划线。名字是"CUSTOM_YNP"<w:name w:val="CUSTOM_YNP"/>。所以:

  XWPFDocument document = new XWPFDocument(new FileInputStream("template.docx"));

  System.out.println(document.getStyles().styleExist("CUSTOMYNP"));
  System.out.println(document.getStyles().getStyle("CUSTOMYNP").getName());

  XWPFParagraph paragraph=document.createParagraph();
  paragraph.setStyle("CUSTOMYNP");
  XWPFRun run=paragraph.createRun();
  run.setText("TEST");

  document.write(new FileOutputStream("myDoc.docx"));
  document.close();