Pull to refresh

Немного советов по JasperReports для новичка

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

Предыстория
Некоторое время назад передо мной встала задача прикрутить возможность построения отчетности на Java сервере, разработку которого я всеми силами пытаюсь вести, да не просто отчетность, а чтобы и HTML можно было на выходе получить и PDF и желательно еще чего, а чего станет ясно позже. Ну, в общем, заложить некоторый дополнительный потенциал, а то ведь заказчик он такой, скажет, а ты делай.
На вопрос Гуглу, а что мне использовать, он уверенно ответил “JasperReports”. Прочтение некоторой информации о данном инструменте показало, что это отличный инструмент, который:
  • может кучу всего
  • обладает LGPL лицензией
  • имеет удобное описание отчетов в XML
  • имеет графический редактор iReport
  • имеет плагин для NetBeans


Им и было решено пользоваться.

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

История
1. Что лучше качать.
Есть 2 основных способа скачать данную библиотеку, либо скачать только JAR файл и успокоится, либо качать проект с исходными кодами.
Я решил, что достаточно просто jar. Это было моей первой ошибкой, после пришлось качать кучу всего еще, еще где-то регистрироваться.
Качайте сразу исходники. Вместе с ними вы получите все необходимые библиотеки, даже те, которые по одиночке трудно найти и примеры использования библиотеки.

2. Русский в PDF
С русским языком JasperReports дружит, откровенно говоря, плохо. И при генерации отчетов успешно получает кракозябры. Первое что приходит в голову — это в свойствах текстового поля в iReport сменить рендеринг на “cyrylic”, но это помогает ровно на то, чтобы все на русском слипалось в одну букву.
Для того чтобы все заработало нормально, нужно создать так называемый “font extension”, это JAR файл в котором будет лежать Ваш шрифт, а также информация для JasperReports, которая позволит ему этот шрифт использовать.
Способов создания такого расширения по сути 2:
  1. Писать вручную, как сказано тут
  2. Заюзать возможность iReport делать это за вас

Предлагаю использовать второй способ для этого запускаем iReport:
  1. Tools -> Options -> Fonts -> Install Font
  2. Выбираете шрифт, который будете использовать далее
  3. Выделяете появившейся шрифт и “Export as extension”
  4. Указываете куда сохранить
  5. Подключаете получившуюся JAR к проекту

Теперь можно смело использовать шрифт для создания отчетов на русском и все будет ОК.

3. Картинки в HTML отчетах
Генерация отчетов с картинками сразу в HTML из сервлета – это отличная возможность JasperReports, но для подключения ее необходимо сделать некоторые телодвижения.
Мануалов по созданию просто HTML много, а вот с картинками – мало. Я опишу, что нужно добавить, чтобы картинки появились.

Нужно:
Прописать в web.xml новый сервлет:
<servlet-name>ImageServlet</servlet-name>
<servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>

<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/image</url-pattern>
</servlet-mapping>

Этот сервлет занимается тем, что генерирует картинки.
После чего нужно оповестить HTML экспортера, где брать картинки (остальная настройка пропущена):

request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image?image=");

Объекты, которые использовались:
  • jasperPrint (JasperPrint jasperPrint)
  • exporter (JRHtmlExporter exporter)

Здесь стоит разобрать, что такое «image?image=», то что после вопроса нас не касается – это фишки JasperReports, а вот то что до запроса – это не что иное как обращение к вновь добавленному сервлету, соответственно, если сервлет был помещен на другой URI, то и тут стоит поменять URI.

Пролог
Я попытался осветить проблемы, о которых я явно помню, с которыми может столкнуться начинающий отчетописец. Получилось очень скомкано, но полезная информация присутствует. Надеюсь, будет кому-нибудь полезно.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.