Контекст
Мне необходимо создать совместимые с Microsoft Word файлы docx, содержащие некоторые таблицы, в веб-приложении, работающем в системе Linux. После некоторых исследований я обнаружил, что можно было подготовить пустой документ, содержащий все необходимые стили (для абзацев, символов и таблиц) в слове Microsoft, а затем заполнить его docx4j.
Это действительно хорошо работает для абзацев: Мне просто нужно извлечь стиль из его имени и извлечь атрибут pPr
из стиля:
P p = factory.createP(); // create an empty paragraph
String styleId = wpMLPackage.getMainDocumentPart().getStyleDefinitionsPart()
.getIDForStyleName(styleName); // find the styleID because the template has defined names
PPr ppr = wpMLPackage.getMainDocumentPart().getStyleDefinitionsPart().getStyleById(styleId)
.getPPr(); // extract the PPr from the style
p.setPPr(ppr); // and affect it to the paragraph
}
R r = factory.createR(); // finally set the paragraph text
Text txt = factory.createText();
txt.setValue(text);
r.getContent().add(txt);
p.getContent().add(r);
Удобный метод wpMLPackage.getMainDocumentPart().addStyledParagraphOfText(styleId, text);
работает так же, только требуется найти styleID
Проблема
Когда речь идет о стилях таблиц, их нельзя использовать, поскольку tbl.setTblPr(tblPr)
ожидает объект TblPr
, тогда как style.getTblPr
возвращает CTTblPrBase
, который не может быть приведен к TblPr
, и я не смог найти способ извлечь TblPr
из стиля таблицы.
Вопрос
Как можно создать таблицу из docx4j и повлиять на нее (стиль таблицы) уже присутствует в документе?