Java. JasperReports. Генерация HTML отчёта с картинками и диаграммами.

В среде Java разработки JasperReports фактически стандартный генератор отчётов. Он позволяет создавать отчёты различной сложности и экспортировать их в большое количество форматов, включая html. Но есть одна тонкость. Эта тонкость описана в стандартной документации, которую можно скачать с официального сайта. Но далеко не все её читают, к сожалению. Мне недавно пришлось править один проект, в котором уже довольно долго стояла проблема генерации отчётов с диаграммами в html, но не была решена.

Проблема в следующем. HTML документ — это обычный текстовый документ с разметкой. Он не содержит в себе картинок. Внутри этого документа будут лишь теги <img src=… Но чтобы они работали нужно немного настроить проект.

В файл web.xml нужно добавить сервлет:

Этот сервлет будет отдавать сгенерированные картинки и диаграммы.

Затем в коде генерации отчёта нужно указать ImageHandler как net.sf.jasperreports.web.util.WebHtmlResourceHandler, инициализированный с указанием адреса на наш /reports/image.  Также нужно сохранить объект jasperPrint в параметр сессии net.sf.jasperreports.j2ee.jasper_print (указан константой ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE).

Вот как примерно это будет выглядеть в коде:

В дистрибутиве JasperReports есть подробный пример. Смотрите по пути:

demo/samples/webapp/WEB-INF/classes/servlets/HtmlServlet.java

Ссылки.

Документация JasperReports:

http://community.jaspersoft.com/documentation?version=15786

Дистрибутив JasperReports:

http://community.jaspersoft.com/project/jasperreports-library/releases

http://community.jaspersoft.com/download

Java. JasperReports. Генерация HTML отчёта с картинками и диаграммами.: 2 комментария

  1. Если у меня существует уже изображение и доступ к нему есть через другой уже существующий сервлет. Могу ли я просто «в тупую» указать параметр src для изображений?

    1. Я так ещё ни разу не делал, по крайней мере. Может и есть какой-нибудь способ.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *