Если у вас стоит задача сделать пару несложных отчетов, а ваши пользователи используют Open Office, то вам нет необходимости использовать большие системы построения отчетов наподобие Bird, Jasper или их аналогов.
Для этой задачи отлично подойдет набор инструментов ODF Toolkit.
ODF Toolkit, согласно информации с официального сайта, — это набор модулей Java, которые позволяют создавать, сканировать или манипулировать документами в формате открытого документа (ISO / IEC 26300 == ODF). В отличие от других подходов, которые основаны на манипуляциях во время выполнения с тяжелыми редакторами через интерфейс автоматизации, ODF Toolkit является легковесным и идеально подходит для использования на сервере.
Я работаю на проекте автоматизации внутренних бизнес-процессов и часто пользователи просят отчеты по накопительной информации, а в связи с тем, что в Россельхозбанке очень распространен Open Office, то для построения отчетов используется Bird.
Он позволяет генерировать любой формат документа. В принципе отличное решение, простое, понятное, но стало интересно, возможно ли то же самое реализовать внутри Java.
Так я познакомился с ODF Toolkit.
Я опишу ряд основных методов, больше вы можете узнать на странице проекта odftoolkit.org
Итак, начнем с созданием документа:
После этого перейдем к созданию параграфа, причем если это Apache Poi (подобная библиотека, но только для формата word), то это несколько строк, а тут все достаточно лаконично:
А если текст мы хотим присвоить в последующем шаге, то мы может использовать подобную конструкцию:
Пример создания параграфа Apache poi:
Лично меня приводит в восторг подобная лаконичность, но продолжим дальше.
Создание стилей для параграфа:
Но тут есть небольшая проблема, по официальной документации присвоение стилей происходит так:
Но к сожалению, так не работает, что стоило некоторого количества нервных клеток и времени на поиск решения.
Создание таблицы:
Работа с ячейками возможна как созданием нового параграфа, так и непосредственно с самой ячейкой
При помощи создания нового параграфа:
Напрямую с ячейкой:
Работа со стилем таблицы и ее границами:
Создаем границу:
Первая переменная это выбор той границы, к которой будет применяться стиль:
Задаем стиль шрифта:
На этом хочу закончить короткий обзор, если проект вас заинтересовал, то на сайте проекта odftoolkit.org есть более расширенный гайд по работе с данным API.
Надеюсь, данная статья поможет кому-то пройти более простым путем.
Для этой задачи отлично подойдет набор инструментов 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 (подобная библиотека, но только для формата 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")
Но к сожалению, так не работает, что стоило некоторого количества нервных клеток и времени на поиск решения.
Создание таблицы:
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.
Надеюсь, данная статья поможет кому-то пройти более простым путем.
NoRegrets
ODFToolkit подходит только для простеньких документов. В целом, это крайне глючная библиотека, особенно при работе с таблицами. Из-за ее глюков и ограниченности очень часто приходится лезть под капот и использовать ODFDOM. На самом деле, это удивительно, что широко распространенный и, фактически, единственный в своем роде опенсорсный пакет для офиса (ОО) не имеет нормального API на java.
mevron
Для базовых вариантов самое то. Да и версия 0.9 на подходе github.com/tdf/odftoolkit/releases с лучшей поддержкой форматов.
SolutionOdt Автор
Да, в это и мысль. Спасибо!