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);
}
Другие вопросы по тегам