- Отчеты в Java на основе JasperReports
- Делаем отчеты в Java на основе JPA и JasperReports
- Отчетность в Java с использованием DynamicReports и JasperReports
- Отчетность на Java с использованием DynamicReports и JasperReports
- 1. Скачать DynamicReports
- 2. Источник данных отчета
- 3. Конструктор отчетов
- 4. Полный пример
- 5. Запустить его
Отчеты в Java на основе JasperReports
Теперь перед нами окно конструктора. Можно либо воспользоваться дизайнером либо вручную редактировать 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.
Делаем отчеты в Java на основе JPA и JasperReports
Недавно возникла задача — построить отчет на Java.
Как известно, для Java есть немало как платных так и бесплатных библиотек, которые позволяют делать отчеты. Их анализ не входит в тему этого поста, скажу лишь, что мною была выбрана библиотека JasperReports, так как во-первых — бесплатная, во-вторых — наиболее функциональная из всех бесплатных. Тут и группировка и промежуточные результаты, таблицы, картинки, импорт/экспорт и много всего другого.
- сервер GlassFish 3.1
- серверное приложение на Java EE
- данные, естественно, получаем с помощью JPA
- клиентское приложение на Java
- стандартная JFrame форма с отчетом на ней
- скачать саму библиотеку JasperReports (на данный момент последняя версия 4.5.0)
- установить iReport — дизайнер отчетов.
Теперь перед нами окно конструктора. Можно либо воспользоваться дизайнером либо вручную редактировать 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 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 форматы и возможностью печати.
Отчетность в Java с использованием DynamicReports и JasperReports
Отчетность на Java с использованием DynamicReports и JasperReports
В этом примере показано, как создать простой отчет с помощью DynamicReports и JasperReports. DynamicReports — это библиотека отчетов Java, которая позволяет создавать документы отчетов, которые можно экспортировать во многие популярные форматы. Он основан на известной библиотеке JasperReports.
Инструменты, используемые в этой статье:
- DynamicReports 3.1.3
- JasperReports 5.0.4
- MySQL 5.5
- Maven 3
- JDK 1.6.0
1. Скачать DynamicReports
Загрузите DynamicReports с официального сайтаwebsite. Если вы используете Maven, вы можете загрузить его из центрального репозитория Maven. Для проектов Maven добавьте следующую конфигурацию в файл pom.xml:
net.sourceforge.dynamicreports dynamicreports-core 3.1.3 mysql mysql-connector-java 5.1.25
2. Источник данных отчета
Подключитесь к базе данных MySQL с помощью драйвера JDBC.
Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://hostname:port/dbname","username", "password");
3. Конструктор отчетов
Предположим, что сервер MySql содержит таблицу клиентов базы данных, а таблица клиентов имеет следующую структуру:
Мы создадим отчет, который получит всех клиентов из таблицы, и данные будут помещены в отчет.
3.1 Create a new empty report object.
JasperReportBuilder report = DynamicReports.report();
3.2 Now create a report colum for each database column.
Columns.column("Customer Id", "id", DataTypes.integerType())
Первый параметр — это метка столбца, которая будет отображаться в заголовке отчета.
Второй параметр — это имя столбца, это имя должно совпадать с именем столбца базы данных.
Третий параметр — тип столбца Java.
3.3 Add the report columns.
report .columns( Columns.column("Customer Id", "id", DataTypes.integerType()), Columns.column("First Name", "first_name", DataTypes.stringType()), Columns.column("Last Name", "last_name", DataTypes.stringType()), Columns.column("Date", "date", DataTypes.dateType()))
3.4 Add a title text and a page number to the report.
.title(//title of the report Components.text("SimpleReportExample") .setHorizontalAlignment(HorizontalAlignment.CENTER)) .pageFooter(Components.pageXofY())//show page number on the page footer
3.5 Finally set the data source query and connection.
.setDataSource("SELECT id, first_name, last_name, date FROM customers ", connection);
4. Полный пример
package net.sf.dynamicreports.examples; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import net.sf.dynamicreports.jasper.builder.JasperReportBuilder; import net.sf.dynamicreports.report.builder.DynamicReports; import net.sf.dynamicreports.report.builder.column.Columns; import net.sf.dynamicreports.report.builder.component.Components; import net.sf.dynamicreports.report.builder.datatype.DataTypes; import net.sf.dynamicreports.report.constant.HorizontalAlignment; import net.sf.dynamicreports.report.exception.DRException; public class SimpleReportExample < public static void main(String[] args) < Connection connection = null; try < Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection( "jdbc:mysql://hostname:port/dbname","username", "password"); >catch (SQLException e) < e.printStackTrace(); return; >catch (ClassNotFoundException e) < e.printStackTrace(); return; >JasperReportBuilder report = DynamicReports.report();//a new report report .columns( Columns.column("Customer Id", "id", DataTypes.integerType()), Columns.column("First Name", "first_name", DataTypes.stringType()), Columns.column("Last Name", "last_name", DataTypes.stringType()), Columns.column("Date", "date", DataTypes.dateType())) .title(//title of the report Components.text("SimpleReportExample") .setHorizontalAlignment(HorizontalAlignment.CENTER)) .pageFooter(Components.pageXofY())//show page number on the page footer .setDataSource("SELECT id, first_name, last_name, date FROM customers", connection); try < //show the report report.show(); //export the report to a pdf file report.toPdf(new FileOutputStream("c:/report.pdf")); >catch (DRException e) < e.printStackTrace(); >catch (FileNotFoundException e) < e.printStackTrace(); >> >
5. Запустить его
Запустите класс SimpleReportExample.