Недавно возникла задача — построить отчет на Java.
Как известно, для Java есть немало как платных так и бесплатных библиотек, которые позволяют делать отчеты. Их анализ не входит в тему этого поста, скажу лишь, что мною была выбрана библиотека JasperReports, так как во-первых — бесплатная, во-вторых — наиболее функциональная из всех бесплатных. Тут и группировка и промежуточные результаты, таблицы, картинки, импорт/экспорт и много всего другого.
Итак, у нас есть:
Для начала работы с Jasper Reports надо сделать 2 шага:
После установки добавляем в проект ссылку на библиотеку и запускаем мастер создания отчетов. Выбираем Blank A4 Landscape — Open this Template. Даем имя отчету и указываем путь для сохранения.
Теперь перед нами окно конструктора. Можно либо воспользоваться дизайнером либо вручную редактировать XML.
Допустим, есть модель с несколькими полями. Пусть это будут: dateStart, dateEnd, closed, number.
Добавляем поле (Field) для каждого из них (тут важно не забыть указать тип поля). Это важно в контексте последующей работы с группировкой и отображением данных в отчете.
После всех манипуляций в конструкторе компилируем jasper-файл отчета.
Как известно, для Java есть немало как платных так и бесплатных библиотек, которые позволяют делать отчеты. Их анализ не входит в тему этого поста, скажу лишь, что мною была выбрана библиотека JasperReports, так как во-первых — бесплатная, во-вторых — наиболее функциональная из всех бесплатных. Тут и группировка и промежуточные результаты, таблицы, картинки, импорт/экспорт и много всего другого.
Итак, у нас есть:
- сервер GlassFish 3.1
- серверное приложение на Java EE
- данные (получаем с помощью JPA)
- клиентское приложение на Java
Построение отчета
Для начала работы с Jasper Reports надо сделать 2 шага:
- скачать саму библиотеку JasperReports
- установить iReport — дизайнер отчетов
После установки добавляем в проект ссылку на библиотеку и запускаем мастер создания отчетов. Выбираем 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.