Pull to refresh

Отчеты в Java на основе JasperReports

Недавно возникла задача — построить отчет на Java.
Как известно, для Java есть немало как платных так и бесплатных библиотек, которые позволяют делать отчеты. Их анализ не входит в тему этого поста, скажу лишь, что мною была выбрана библиотека JasperReports, так как во-первых — бесплатная, во-вторых — наиболее функциональная из всех бесплатных. Тут и группировка и промежуточные результаты, таблицы, картинки, импорт/экспорт и много всего другого.

Итак, у нас есть:
  • сервер GlassFish 3.1
  • серверное приложение на Java EE
  • данные (получаем с помощью JPA)
  • клиентское приложение на Java
Построение отчета

Для начала работы с Jasper Reports надо сделать 2 шага:
  • скачать саму библиотеку JasperReports
  • установить iReport — дизайнер отчетов
Дизайнер может быть в виде плагина для Netbeans или отдельной программы (Windows, Linux, Mac). На сайте написано, что плагин для нетбинса версии 3.х. Но он прекрасно установился и на Netbeans 7.
После установки добавляем в проект ссылку на библиотеку и запускаем мастер создания отчетов. Выбираем Blank A4 Landscape — Open this Template. Даем имя отчету и указываем путь для сохранения.

Теперь перед нами окно конструктора. Можно либо воспользоваться дизайнером либо вручную редактировать XML.

Допустим, есть модель с несколькими полями. Пусть это будут: dateStart, dateEnd, closed, number.
@javax.persistence.Column(name = "dateStart")
private Date dateStart;
@javax.persistence.Column(name = "dateEnd")
private Date dateEnd;
@javax.persistence.Column(name = "closed")
private Boolean closed;
@javax.persistence.Column(name = "number")
private String number;

Добавляем поле (Field) для каждого из них (тут важно не забыть указать тип поля). Это важно в контексте последующей работы с группировкой и отображением данных в отчете.

После всех манипуляций в конструкторе компилируем jasper-файл отчета.

Отображение в JFrame

String reportName = "DogReport.jasper"; // полный путь к отчету
List contracstList = _getContracts(); // получаем список договоров с сервера
JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(contractsList); //создаем коллекцию Jasper Report Bean Collection
JasperPrint jp = JasperFillManager.fillReport(reportName, new HashMap(), beanCollectionDataSource); // заполняем датасет отчета данными из коллекции
JRViewer jv = new JRViewer(jp); // компонент просмотра отчета

JFrame reportFrame = new JFrame();
reportFrame.getContentPane().add(jv);
reportFrame.validate();
reportFrame.setVisible(true);


Вот и всё. В итоге у нас есть отчет с возможностью печати, настройки и импорта в PDF, Excel, PPT, ODT, HTML.

p.s. буду рад услышать альтернативные способы построения отчетов в Java.
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.