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



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

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

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

我的自定义样式称为"CUSTOM_YNP"(我直接在 Word 中创建它(,但是当我使用下面的行时,它返回 false

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

而且,当然,当我尝试使用这种样式时,它不起作用,实际上它会以"正常"样式打印我的字符串

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

仅供记录,我的"保存文档"行:

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

我已经阅读了这个问题,但实际上找不到解决我的问题的方法......如何在 POI 中使用 DOCX 中的预定义格式?

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

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

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

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

最新更新