Недавно возникла задача — построить отчет на Java.
Как известно, для Java есть немало как платных так и бесплатных библиотек, которые позволяют делать отчеты. Их анализ не входит в тему этого поста, скажу лишь, что мною была выбрана библиотека JasperReports, так как во-первых — бесплатная, во-вторых — наиболее функциональная из всех бесплатных. Тут и группировка и промежуточные результаты, таблицы, картинки, импорт/экспорт и много всего другого.
У нас есть:
Качаем, устанавливаем, добавляем в проект ссылку на библиотеку и на странице приветствия, пропуская создание подключения, запускаем мастер создания отчетов. Выбираем Blank A4 Landscape — Open this Template. Даем имя отчету и указываем путь для сохранения.
Теперь перед нами окно конструктора. Можно либо воспользоваться дизайнером либо вручную редактировать XML (дизайн описывается в спецальном XML файле шаблона, который называется JRXML).
Допустим, есть модель с несколькими полями. Пусть это будут: dateStart, dateEnd, closed, number.
Добавляем поле (Filed) для каждого из них в отчет: в окне Report Inspector ПКМ на узле Fields — Add Field. Не забываем при этом указать тип поля. Это важно в контексте последующей работы с группировкой и отображением данных в отчете.
Размещаем наши поля в отчете, просто перетягивая их в конструктор. iReport сам создаст заголовки столбцов и поля для значений.
Теперь, самое важное не забыть откомпилировать наш отчет в файл .jasper. С ним потом и будет работать наша программа. Для компиляции: ПКМ в дизайнере — Compile Report.
Теперь идем в нашу программу и пробуем отобразить наш файл на форме.
Теперь на форму кидаем наш JRViewer:
Вот и всё. В итоге отображается форма с данными отчета и уже готовым импортом в PDF, Excel, PPT, ODT, HTML форматы и возможностью печати.
Как известно, для Java есть немало как платных так и бесплатных библиотек, которые позволяют делать отчеты. Их анализ не входит в тему этого поста, скажу лишь, что мною была выбрана библиотека JasperReports, так как во-первых — бесплатная, во-вторых — наиболее функциональная из всех бесплатных. Тут и группировка и промежуточные результаты, таблицы, картинки, импорт/экспорт и много всего другого.
У нас есть:
- сервер GlassFish 3.1
- серверное приложение на Java EE
- данные, естественно, получаем с помощью JPA
- клиентское приложение на Java
- стандартная JFrame форма с отчетом на ней
- скачать саму библиотеку JasperReports (на данный момент последняя версия 4.5.0)
- установить iReport — дизайнер отчетов.
Качаем, устанавливаем, добавляем в проект ссылку на библиотеку и на странице приветствия, пропуская создание подключения, запускаем мастер создания отчетов. Выбираем 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 форматы и возможностью печати.