- Отчетность в Java с использованием DynamicReports и JasperReports
- Отчетность на Java с использованием DynamicReports и JasperReports
- 1. Скачать DynamicReports
- 2. Источник данных отчета
- 3. Конструктор отчетов
- 4. Полный пример
- 5. Запустить его
- Делаем отчеты в Java на основе JPA и JasperReports
- Java | Simple Jasper Report Example
- Environment, Tools & Libraries used in this post
- Overview
- Dependencies
- Java Bean Country.java
- Java App.java
Отчетность в 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.
Делаем отчеты в 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 | Simple Jasper Report Example
JasperReports library is an open source reporting library written in Java. The library can export documents in different formats e.g. PDF, HTML, CSV…etc. This post shows a simple example of how to export PDF document using JasperReports.
Environment, Tools & Libraries used in this post
- Maven (build tool)
- jasperreports 6.10.0
- spring core 5.2.3.RELEASE
Overview
In order to generate a report we need to following inputs to be passed to Jasper exporting functions:
- Jasper Report Template: Jasper template is an XML .jrxml file that can be created using JasperSoft Studio.
- Parameters: This is a Java Map object containing a set of values passed from the application requesting the report. They can be used for runtime configuration or to pass additional custom data that is not part of the data source.
- Datasource: JasperReport engines expect an object of type JRDataSource as a data source. There several implementations of JRDataSource that allow to fetch data from different data source types such as databases, XML file, CSV file or Java beans.
In this post will export a PDF file using a List of Java bean Country as a data source. The template we are going to use report.jrxml is created using JasperSoft Studio.
Dependencies
net.sf.jasperreports jasperreports 6.10.0 org.springframework spring-core 5.2.3.RELEASE
Java Bean Country.java
- We have one simple Java class Country that holds country’s code, name and URL to an image of the contry’s flag.
public class Country private String code; private String name; private String url; public Country(String code, String name, String url) this.code = code; this.name = name; this.url = url; > . >
Java App.java
- The App.java class contains the main() method.
- The main() method call 3 custom methods
- getJasperReport() read & compiles .jrxml file.
- getParameters() returns the set of parameters.
- getDataSource() builds the data source .
package com.hmkcode; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import org.springframework.util.ResourceUtils; import java.io.*; import java.util.*; public class App // name and destination of output file e.g. "report.pdf" private static String destFileName = "report.pdf"; public static void main( String[] args ) throws FileNotFoundException, JRException System.out.println( "generating jasper report. " ); // 1. compile template ".jrxml" file JasperReport jasperReport = getJasperReport(); // 2. parameters "empty" MapString, Object> parameters = getParameters(); // 3. datasource "java object" JRDataSource dataSource = getDataSource(); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource); JasperExportManager.exportReportToPdfFile(jasperPrint, destFileName); > private static JasperReport getJasperReport() throws FileNotFoundException, JRException File template = ResourceUtils.getFile("classpath:report.jrxml"); return JasperCompileManager.compileReport(template.getAbsolutePath()); > private static MapString, Object> getParameters() MapString, Object> parameters = new HashMap<>(); parameters.put("createdBy", "hmkcode"); return parameters; > private static JRDataSource getDataSource() ListCountry> countries = new LinkedList<>(); countries.add(new Country("IS", "Iceland", "https://i.pinimg.com/originals/72/b4/49/72b44927f220151547493e528a332173.png")); // 9 other countries in GITHUB return new JRBeanCollectionDataSource(countries); > >