Делаем отчеты в Java на основе JPA и JasperReports

12 Дек
2011

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

У нас есть:
  • сервер GlassFish 3.1
  • серверное приложение на Java EE
  • данные, естественно, получаем с помощью JPA
  • клиентское приложение на Java
Должно быть:
  • стандартная JFrame форма с отчетом на ней
Для начала работы с Jasper Reports надо сделать 2 шага:
  • скачать саму библиотеку JasperReports (на данный момент последняя версия 4.5.0)
  • установить iReport — дизайнер отчетов.
Второй может быть в виде плагина для Netbeans или отдельной программы (Windows, Linux, Mac). На сайте написано, что плагин для нетбинса версии 3.х. Но это не помешало успешно установить его на мой Netbeans 7.0.1.
Качаем, устанавливаем, добавляем в проект ссылку на библиотеку и на странице приветствия, пропуская создание подключения, запускаем мастер создания отчетов. Выбираем Blank A4 Landscape — Open this Template. Даем имя отчету и указываем путь для сохранения.

Теперь перед нами окно конструктора. Можно либо воспользоваться дизайнером либо вручную редактировать XML (дизайн описывается в спецальном XML файле шаблона, который называется JRXML).

Допустим, есть модель с несколькими полями. Пусть это будут: 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 dateStart;
@javax.persistence.Column(name = "number")
private String dateStart;

Добавляем поле (Filed) для каждого из них в отчет: в окне Report Inspector ПКМ на узле Fields — Add Field. Не забываем при этом указать тип поля. Это важно в контексте последующей работы с группировкой и отображением данных в отчете.

Размещаем наши поля в отчете, просто перетягивая их в конструктор. iReport сам создаст заголовки столбцов и поля для значений.

Теперь, самое важное не забыть откомпилировать наш отчет в файл .jasper. С ним потом и будет работать наша программа. Для компиляции: ПКМ в дизайнере — Compile Report.

Теперь идем в нашу программу и пробуем отобразить наш файл на форме.

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

Теперь на форму кидаем наш JRViewer:

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


Вот и всё. В итоге отображается форма с данными отчета и уже готовым импортом в PDF, Excel, PPT, ODT, HTML форматы и возможностью печати.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх