Если у вас стоит задача сделать пару несложных отчетов, а ваши пользователи используют Open Office, то вам нет необходимости использовать большие системы построения отчетов наподобие Bird, Jasper или их аналогов.

Для этой задачи отлично подойдет набор инструментов ODF Toolkit.

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

image

Я работаю на проекте автоматизации внутренних бизнес-процессов и часто пользователи просят отчеты по накопительной информации, а в связи с тем, что в Россельхозбанке очень распространен Open Office, то для построения отчетов используется Bird.

Он позволяет генерировать любой формат документа. В принципе отличное решение, простое, понятное, но стало интересно, возможно ли то же самое реализовать внутри Java.

Так я познакомился с ODF Toolkit.

Я опишу ряд основных методов, больше вы можете узнать на странице проекта odftoolkit.org

Итак, начнем с созданием документа:

TextDocument doc = TextDocument.newTextDocument();

После этого перейдем к созданию параграфа, причем если это Apache Poi (подобная библиотека, но только для формата word), то это несколько строк, а тут все достаточно лаконично:

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")

image

Но к сожалению, так не работает, что стоило некоторого количества нервных клеток и времени на поиск решения.

Создание таблицы:

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.

Надеюсь, данная статья поможет кому-то пройти более простым путем.