我正在尝试使用apache-poi在单词(.docx)文档中创建标题标题。
我有一个模板,其中只包含自定义样式和使用自定义样式的标题标题示例。
XWPFDocument document=new XWPFDocument(new FileInputStream("template.docx"));
我的自定义样式称为" CUSTOM_YNP" (我直接在Word中创建它),但是当我使用下面的行时,它返回false
document.getStyles().styleExist("CUSTOM_YNP")
当然,当我尝试使用这种风格时,它不起作用,实际上它在" Normal"中打印我的字符串。式
XWPFParagraph paragraph=document.createParagraph();
paragraph.setStyle("CUSTOM_YNP");
XWPFRun run=paragraph.createRun();
run.setText("TEST");
仅供记录,我的"保存文件" line:
document.write(new FileOutputStream("myDoc.docx"));
我已阅读此问题,但实际上无法找到问题的解决方案...... How can I use predefined formats in DOCX with POI?
编辑:如果我使用Apache-POI创建自己的风格,它会起作用....我仍然非常喜欢使用word文档中的现有样式。
答案 0 :(得分:3)
*.docx
是ZIP
存档。您可以解压缩并查看/word/styles.xml
。在那里你会看到没有下划线的w:styleId="CUSTOMYNP"
。这个名字是&#34; CUSTOM_YNP&#34; <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();
答案 1 :(得分:1)
确保首先创建样式并将其添加到文档中:
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);
}