Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache POI Word对标题使用自定义样式_Java_Ms Word_Apache Poi_Docx_Xwpf - Fatal编程技术网

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

Java Apache POI Word对标题使用自定义样式,java,ms-word,apache-poi,docx,xwpf,Java,Ms Word,Apache Poi,Docx,Xwpf,我正在尝试使用ApachePOI在word(.docx)文档中创建标题标题 我有一个模板,其中只包含自定义样式和使用自定义样式的标题示例 XWPFDocument document=new XWPFDocument(new FileInputStream("template.docx")); 我的自定义样式称为“custom_YNP”(我直接在Word中创建),但当我使用下面的行时,它返回false document.getStyles().styleExist("CUSTOM_YNP")

我正在尝试使用ApachePOI在word(.docx)文档中创建标题标题

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

XWPFDocument document=new XWPFDocument(new FileInputStream("template.docx"));
我的自定义样式称为“custom_YNP”(我直接在Word中创建),但当我使用下面的行时,它返回false

document.getStyles().styleExist("CUSTOM_YNP")
当然,当我尝试使用这种样式时,它不起作用,实际上它以“正常”样式打印我的字符串

为了记录,我的“保存文档”行:

我读过这个问题,但实际上找不到解决问题的方法


编辑:如果我使用ApachePOI创建自己的样式,它就会工作。。。。不过我还是很想使用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”
。因此:

  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();

谢谢,但我想要的是使用我的模板中已有的样式。docx。。。有可能吗?您绝对确定docx文件包含该样式吗?docx文件是否包含任何文本?word会从模板文档中丢弃未使用的样式。您需要在文档中使用这些样式的现有文本。就这样!“真实”样式名称可以不同于Word中的“显示”样式名称。另外,我注意到我不需要在模板中已经使用我的样式,这是一件好事。
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);
}
  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();