«1. Обзор

Когда мы говорим об инструментах отчетности, многие программы охватывают эту область. Однако большинство из них представляют собой полноценные платформы Business Intelligence или облачные сервисы.

Но что произойдет, если мы просто захотим добавить некоторые функции отчетности в наше приложение в виде библиотеки? Здесь мы рассмотрим некоторые инструменты отчетности Java, хорошо подходящие для этой цели.

Мы в основном сосредоточимся на этих инструментах с открытым исходным кодом:

    BIRT Jasper Reports Pentaho

Кроме того, мы кратко проанализируем следующие коммерческие инструменты:

    FineReport Logi Report (ранее JReport) Report Mill ~~ ~ 2. Разработка отчетов

В этом разделе мы рассмотрим, как мы можем визуально создавать отчеты и играть с нашими данными. Обратите внимание, что в этой части мы будем ссылаться только на инструменты с открытым исходным кодом.

2.1. Визуальные редакторы

Все три инструмента включают редактор WYSIWIG с возможностями предварительного просмотра отчетов.

BIRT Report Designer и Jaspersoft Studio — это инструменты, созданные на основе Eclipse RCP. Это хороший момент для большинства из нас, разработчиков Java, поскольку мы, возможно, знакомы со средой Eclipse. В отличие от них, Pentaho Report Designer визуально плохо состарился.

Кроме того, в Jaspersoft Studio есть еще одна интересная особенность: мы можем публиковать наши отчеты прямо на их Jasper Reports Server (системе управления отчетами).

2.2. Наборы данных

Как и во всех инструментах создания отчетов, мы можем получать наборы данных, запрашивая источник данных (см. ниже). Затем мы можем преобразовать их в поля отчета, создать вычисляемые поля или использовать формулы агрегирования.

Помимо этого, интересно сравнить, как мы можем управлять несколькими наборами данных, поскольку нам может понадобиться несколько из них, если наши данные поступают из разных запросов или даже из разных источников данных:

BIRT предлагает самое простое решение, поскольку мы можем иметь несколько наборов данных в тот же отчет В Jasper Reports и Pentaho нам нужно каждый раз создавать отдельный подотчет, что может быть довольно сложно

    2.3. Диаграммы и визуальные элементы

Все инструменты предоставляют простые элементы, такие как фигуры и изображения, а также все виды диаграмм: линии, области, круговые диаграммы, радар, кольцо и т. д. Все они также поддерживают кросс-таблицы.

Тем не менее, Jasper Reports предоставляет самую богатую коллекцию визуальных элементов. Он добавляет к приведенному выше списку карты, спарклайны, пирамиды и диаграммы Ганта.

2.4. Стилизация отчетов

Теперь давайте сравним расположение и размер элементов на странице:

Все инструменты обеспечивают позиционирование в пикселях BIRT, а Pentaho также обеспечивает позиционирование в стиле HTML (табличное, блочное, встроенное) Ни один из них не поддерживает CSS-подобная система flexbox или сетки для управления размером элементов

    Кроме того, когда нам нужно управлять несколькими отчетами, мы можем захотеть использовать одну и ту же визуальную тему:

Jasper Reports предоставляет файлы тем с синтаксисом XML-CSS, которые BIRT может импортировать Таблицы стилей CSS в системе дизайна В Pentaho мы можем добавлять таблицы стилей CSS только в заголовок страницы. Так что их трудно смешивать с внутренней системой дизайна

    3. Рендеринг отчетов

Теперь, когда мы увидели, как проектировать отчеты, давайте сравним, как мы можем визуализировать их программно.

3.1. Установка

Во-первых, отметим, что все инструменты разработаны так, чтобы их можно было легко встроить в проект Java.

Для начала вы можете ознакомиться с нашими специальными статьями о BIRT и Jasper Reports. Для Pentaho есть страница справки и бесплатные образцы кода.

Далее для каждого из этих инструментов мы подключим механизм отчетов к данным нашего приложения.

3.2. Источник данных

Первый вопрос, который мы должны задать: как мы можем подключить механизм отчетов к нашему источнику данных проекта?

Отчеты Jasper: мы просто добавляем его в качестве параметра метода fillReport Решение BIRT для этого немного сложнее: мы должны изменить наш отчет, чтобы установить атрибуты источника данных в качестве параметров Pentaho имеет здесь большой недостаток: если мы не купим их В коммерческом программном обеспечении PDI мы должны использовать источник данных JNDI, который сложнее настроить

    Говоря об источниках данных, какие типы поддерживаются?

«Все три инструмента поддерживают наиболее распространенные типы: JDBC, JNDI, POJO, CSV, XML и MongoDB REST API является требованием для современных проектов, однако ни один из них не поддерживает его изначально с BIRT, мы должны кодировать сценарий Groovy. дополнительный бесплатный плагин для Pentaho, мы должны написать скрипт Groovy или приобрести коммерческое программное обеспечение PDI. Файлы JSON изначально поддерживаются Jasper Reports и Pentaho, но для BIRT потребуется внешняя библиотека синтаксического анализатора Java. Полный список сравнения можно найти в этой матрице ~~ ~ 3.3. Параметры и настройка среды выполнения

    Поскольку мы подключили наш отчет к нашему источнику данных, давайте отобразим некоторые данные!

Теперь важно, как получить данные о конечном пользователе. Для этого мы можем передать параметры методу рендеринга. Эти параметры должны были быть определены при разработке отчета, а не во время выполнения. Но что мы можем сделать, если, например, наш набор данных основан на разных запросах в зависимости от контекста конечного пользователя?

С Pentaho и Jasper Reports это просто невозможно сделать, так как файл отчета бинарный и нет Java SDK для их модификации. Для сравнения, отчеты BIRT представляют собой обычные XML-файлы. Более того, мы можем использовать Java API для их изменения, поэтому очень легко настроить все во время выполнения.

3.4. Форматы вывода и клиенты Javascript

К счастью, большинство распространенных форматов поддерживаются всеми инструментами: HTML, PDF, Excel, CSV, простой текст и RTF. В настоящее время мы также можем спросить, как мы можем интегрировать результат отчета непосредственно в наши веб-страницы. Однако мы не будем упоминать грубое включение визуализатора PDF.

Лучшее решение — использовать клиенты Javascript для вывода отчетов непосредственно в HTML-элемент. Для BIRT клиентом Javascript является Actuate JSAPI, а для Jasper Reports мы должны использовать JRIO.js Pentaho не предоставляет ничего, кроме интеграции с iFrame. Это решение работает, но может иметь серьезные недостатки

3.5. Автономные инструменты рендеринга

    Помимо интеграции нашего отчета в веб-страницу, нас также может заинтересовать готовый сервер рендеринга. Каждое средство предоставляет собственное решение:

BIRT Viewer — это упрощенный образец веб-приложения для создания отчетов BIRT по требованию. Он с открытым исходным кодом, но не включает функции управления отчетами для Pentaho и Jasper Report, есть только коммерческие пакеты программного обеспечения

4. Статус и активность проектов

    Сначала несколько слов о лицензиях. BIRT находится под лицензией EPL, Jasper Reports — под LGPLv3, а Pentaho — под LGPLv2.1. Таким образом, мы можем встраивать все эти библиотеки в наши собственные продукты, даже если они коммерческие.

Затем мы можем спросить себя, как поддерживаются эти проекты с открытым исходным кодом и активно ли сообщество:

Jasper Reports имеет хорошо поддерживаемый репозиторий со стабильной средней активностью его редактора. Репозиторий TIBCO Software BIRT остается. поддерживается, но его активность очень низкая с 2015 года, когда OpenText приобрела свой редактор Actuate. Точно так же активность репозитория Pentaho очень низкая с момента приобретения Hitachi-Vantara в 2015 году

Мы можем подтвердить это, используя тенденции Stackoverflow. Самая низкая популярность у BIRT и Pentaho, но умеренная у Jasper Reports.

    Популярность всех трех инструментов отчетности Java за последние 5 лет снизилась, хотя на данный момент они остаются стабильными. Мы можем объяснить это появлением предложений Cloud и Javascript.

5. Коммерческие инструменты создания отчетов Java

Помимо решений с открытым исходным кодом, существуют также некоторые коммерческие варианты, о которых стоит упомянуть.

5.1. Fine Report

Fine Report изначально был разработан для работы в качестве автономного сервера. К счастью, мы можем включить его как часть нашего проекта, если захотим его использовать. Мы должны вручную скопировать все файлы JAR и ресурсы в нашу WAR, как описано в их процедуре.

«После этого мы можем увидеть инструмент Платформа принятия решений, доступный в виде URL-адреса в нашем проекте. По этому URL-адресу мы можем выполнять отчеты непосредственно в предоставленном веб-представлении, iFrame или с помощью их клиента Javascript. Однако мы не можем генерировать отчеты программно.

Еще одним огромным ограничением является целевое время выполнения. Версия 10 поддерживает только Java 8 и Tomcat 8.x.

5.2. Logi Report (ранее JReport)

Как и Fine Report, Logi Report был разработан для работы в качестве автономного сервера, но мы можем интегрировать его как часть нашего существующего проекта WAR. Таким образом, мы столкнемся с тем же ограничением, что и с Fine Report: мы не можем генерировать отчеты программно.

В отличие от Fine Report. однако Logi Report поддерживает почти все контейнеры сервлетов и Java 8–13.

5.3. ReportMill Reporting

Наконец, стоит упомянуть ReportMill, потому что мы можем плавно встроить его в любое Java-приложение. Кроме того, как и BIRT, он очень гибкий: мы можем настраивать отчеты во время выполнения, поскольку они представляют собой простые файлы XML.

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

6. Заключение

В этой статье мы рассмотрели некоторые из наиболее известных инструментов отчетности Java и сравнили их возможности.

В заключение мы можем выбрать один из этих Java Reporting Tools в зависимости от наших требований:

Мы выберем BIRT:

Для простой библиотеки, которая заменит существующее самодельное решение Для его максимальной гибкости и высокий потенциал настройки

Мы выберем Jasper Reports:

    Если нам нужна библиотека отчетов, совместимая с полноценной системой управления отчетами Если мы хотим сделать ставку на лучшее долгосрочное развитие и поддержку

~~ ~»

  • If we need a reporting library compatible with a full-fledged report management system
  • If we want to bet on the best long-term evolution and support