Java Apache POI Word对标题使用自定义样式
我正在尝试使用ApachePOI在word(.docx)文档中创建标题标题 我有一个模板,其中只包含自定义样式和使用自定义样式的标题示例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")
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();