Немного советов по 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.

Пролог
Я попытался осветить проблемы, о которых я явно помню, с которыми может столкнуться начинающий отчетописец. Получилось очень скомкано, но полезная информация присутствует. Надеюсь, будет кому-нибудь полезно.


1 комментарий

avatar
Вопрос по русским символам. создал на основе 2 пункта jar файл с шрифтами в iReport. Все нормально, pdf генерится, но невозможно скопировать текст из созданного pdf-файла. В Adobe Reder-e появляется окно о внутренней ошибке и текст при вставке из буфера выглядит кракозябрами. Шрифты брались arial из windows/fonts.
Заранее спасибо.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.