Немного советов по JasperReports для новичка
В данной статье я хочу немного рассказать о практике использования библиотеки JasperReports для построения отчетов, а точнее о нескольких проблемах, с которыми столкнулся и решал, достаточно долго, попутно ударяясь головой об стену.
Предыстория
Некоторое время назад передо мной встала задача прикрутить возможность построения отчетности на Java сервере, разработку которого я всеми силами пытаюсь вести, да не просто отчетность, а чтобы и HTML можно было на выходе получить и PDF и желательно еще чего, а чего станет ясно позже. Ну, в общем, заложить некоторый дополнительный потенциал, а то ведь заказчик он такой, скажет, а ты делай.
На вопрос Гуглу, а что мне использовать, он уверенно ответил “JasperReports”. Прочтение некоторой информации о данном инструменте показало, что это отличный инструмент, который:
Им и было решено пользоваться.
Следующие несколько дней я прыгал и скакал вокруг компьютера, разве что не с бубном.
История
1. Что лучше качать.
Есть 2 основных способа скачать данную библиотеку, либо скачать только JAR файл и успокоится, либо качать проект с исходными кодами.
Я решил, что достаточно просто jar. Это было моей первой ошибкой, после пришлось качать кучу всего еще, еще где-то регистрироваться.
Качайте сразу исходники. Вместе с ними вы получите все необходимые библиотеки, даже те, которые по одиночке трудно найти и примеры использования библиотеки.
2. Русский в PDF
С русским языком JasperReports дружит, откровенно говоря, плохо. И при генерации отчетов успешно получает кракозябры. Первое что приходит в голову — это в свойствах текстового поля в iReport сменить рендеринг на “cyrylic”, но это помогает ровно на то, чтобы все на русском слипалось в одну букву.
Для того чтобы все заработало нормально, нужно создать так называемый “font extension”, это JAR файл в котором будет лежать Ваш шрифт, а также информация для JasperReports, которая позволит ему этот шрифт использовать.
Способов создания такого расширения по сути 2:
3. Картинки в HTML отчетах
Генерация отчетов с картинками сразу в HTML из сервлета – это отличная возможность JasperReports, но для подключения ее необходимо сделать некоторые телодвижения.
Мануалов по созданию просто HTML много, а вот с картинками – мало. Я опишу, что нужно добавить, чтобы картинки появились.
Нужно:
Прописать в web.xml новый сервлет:
Этот сервлет занимается тем, что генерирует картинки.
После чего нужно оповестить HTML экспортера, где брать картинки (остальная настройка пропущена):
Объекты, которые использовались:
Пролог
Я попытался осветить проблемы, о которых я явно помню, с которыми может столкнуться начинающий отчетописец. Получилось очень скомкано, но полезная информация присутствует. Надеюсь, будет кому-нибудь полезно.
Предыстория
Некоторое время назад передо мной встала задача прикрутить возможность построения отчетности на Java сервере, разработку которого я всеми силами пытаюсь вести, да не просто отчетность, а чтобы и HTML можно было на выходе получить и PDF и желательно еще чего, а чего станет ясно позже. Ну, в общем, заложить некоторый дополнительный потенциал, а то ведь заказчик он такой, скажет, а ты делай.
На вопрос Гуглу, а что мне использовать, он уверенно ответил “JasperReports”. Прочтение некоторой информации о данном инструменте показало, что это отличный инструмент, который:
- может кучу всего
- обладает LGPL лицензией
- имеет удобное описание отчетов в XML
- имеет графический редактор iReport
- имеет плагин для NetBeans
Им и было решено пользоваться.
Следующие несколько дней я прыгал и скакал вокруг компьютера, разве что не с бубном.
История
1. Что лучше качать.
Есть 2 основных способа скачать данную библиотеку, либо скачать только JAR файл и успокоится, либо качать проект с исходными кодами.
Я решил, что достаточно просто jar. Это было моей первой ошибкой, после пришлось качать кучу всего еще, еще где-то регистрироваться.
Качайте сразу исходники. Вместе с ними вы получите все необходимые библиотеки, даже те, которые по одиночке трудно найти и примеры использования библиотеки.
2. Русский в PDF
С русским языком JasperReports дружит, откровенно говоря, плохо. И при генерации отчетов успешно получает кракозябры. Первое что приходит в голову — это в свойствах текстового поля в iReport сменить рендеринг на “cyrylic”, но это помогает ровно на то, чтобы все на русском слипалось в одну букву.
Для того чтобы все заработало нормально, нужно создать так называемый “font extension”, это JAR файл в котором будет лежать Ваш шрифт, а также информация для JasperReports, которая позволит ему этот шрифт использовать.
Способов создания такого расширения по сути 2:
- Писать вручную, как сказано тут
- Заюзать возможность iReport делать это за вас
- Tools -> Options -> Fonts -> Install Font
- Выбираете шрифт, который будете использовать далее
- Выделяете появившейся шрифт и “Export as extension”
- Указываете куда сохранить
- Подключаете получившуюся 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)
Пролог
Я попытался осветить проблемы, о которых я явно помню, с которыми может столкнуться начинающий отчетописец. Получилось очень скомкано, но полезная информация присутствует. Надеюсь, будет кому-нибудь полезно.
1 комментарий
Заранее спасибо.