Apache POI Word с использованием пользовательских стилей для заголовков
Я пытаюсь создать заголовки заголовка в документе Word (.docx), используя apache-poi.
У меня есть шаблон, который содержит только пользовательские стили И пример заголовков заголовков с использованием пользовательских стилей.
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"));
Я прочитал этот вопрос, но на самом деле не могу найти решение своей проблемы... Как я могу использовать предопределенные форматы в DOCX с POI?
РЕДАКТИРОВАТЬ: Это работает, если я создаю свой собственный стиль, используя Apache-POI.... Тем не менее я действительно хотел бы использовать существующие стили из документа Word.
2 ответа
*.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);
}