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();
我正在尝试使用 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();