Для этой задачи отлично подойдет набор инструментов ODF Toolkit.
ODF Toolkit согласно информации с официального сайта — это набор модулей Java, которые позволяют создавать, сканировать или манипулировать документами в формате открытого документа (ISO / IEC 26300 == ODF). В отличие от других подходов, которые основаны на манипуляциях во время выполнения с тяжелыми редакторами через интерфейс автоматизации, ODF Toolkit является легковесным и идеально подходит для использования на сервере.

Я работаю на проекте автоматизации внутренних бизнес-процессов и часто пользователи просят отчеты по накопительной информации, а в связи с тем, что в Россельхозбанке очень распространен Open Office, то для построения отчетов используется Bird.
Он позволяет генерировать любой формат документа. В принципе отличное решение, простое, понятное, но стало интересно возможно ли то же самое реализовать внутри Java.
Так я познакомился с ODF Toolkit.
Я опишу ряд основных методов, больше вы можете узнать на странице проекта odftoolkit.org
И так начнем с созданием документа:
TextDocument doc = TextDocument.newTextDocument();
После этого перейдем к созданию параграфа причем если в Apache Poi это несколько строк, то тут все достаточно лаконично:
Paragraph subparagraphHeaderOne = doc.addParagraph(“Текст”);
А если текст мы хотим присвоить в последующем, то мы может использовать подобную конструкцию:
Paragraph subparagrafFilial = paragraphHeader.addParagraph(null);
Пример создания параграфа Apache poi:
XWPFParagraph paragraphHeader = xwpfDocument.createParagraph(); XWPFRun subpargraphHeader = paragraphHeader.createRun(); subpargraphHeader.setText(“Текст”); subpargraphHeader.addBreak();
Лично меня приводит в восторг подобная лаконичность, но продолжим дальше.
Создание стилей для параграфа:
OdfOfficeStyles styles = doc.getOrCreateDocumentStyles (); OdfStyle style = styles.newStyle ( "Source Text", OdfStyleFamily.Paragraph ); style.setProperty ( OdfParagraphProperties.VerticalAlign, "#middle"); paragraph.getOdfElement().setStyleName("Source Text");
Но тут есть небольшая проблема, если обратить внимание на последнюю строчку, то можно увидеть интересную особенность по официальной документации присвоение стилей происходит так:
paragraph.setStyleName("Source Text")

Но к сожалению, так не работает, что стоило некоторого количества нервных клеток и времени на поиск решения.
Создание таблицы:
Table TableOne = doc.addTable(количество строк, колонок);
Работа с ячейками, возможна как созданием нового параграфа, так и работа непосредственно с самой ячейкой
При помощи создания нового параграфа:
Paragraph cellOne = Paragraph.newParagraph(subparagraphTableOne.getCellByPosition(0, 1)); cellOne.appendTextContent("Текст");
Напрямую с ячейкой:
Cell cellOne = subparagraphTableOne.getCellByPosition(0, 0); cellOne.setStringValue("Текст")
Работа со стилем таблицы и ее границами:
Создаем границу:
Border border= new Border(Color.WHITE, 2, StyleTypeDefinitions.SupportedLinearMeasure.PT);
Первая переменная это выбор той границы, к которой будет применяться стиль:
table.getRowByIndex(0).getCellByIndex(1).setBorders(StyleTypeDefinitions.CellBordersType.BOTTOM, border);
Задаем стиль шрифта:
Font font = new Font("Times New Roman", StyleTypeDefinitions.FontStyle.REGULAR, 12);
На этом хочу закончить короткий обзор, если проект вас заинтересовал, то на сайте проекта odftoolkit.org есть более расширенный гайд по работе с данным API.
Надеюсь данная статья поможет кому то пройти более простым путем.
ссылка на оригинал статьи https://habr.com/ru/post/500546/
Добавить комментарий