SPRING-SOURCE.RU

JasperReport. Учимся использовать JasperReport

Начнем

И так, учимся использовать JasperReport, который представляет собой одно самых мощных OpenSourse средств разработки отчетов.

Конфигурация системы: windows 7 (64-bit), sts-2.8.1.RELEASE, java 1.7, mysql, tomcat.

В данной статье будет рассмотрен ряд операций, позволяющих быстро создавать отчеты. А именно при их создании можно выделить следующие пункты:

1. Интеграция библиотек c помощью Maven.

Apache Maven — фреймворк для автоматизации сборки проектов, специфицированных на XML-языке POM (англ. Project Object Model).

Maven, в отличие от другого сборщика проектов Apache Ant, обеспечивает декларативную, а не императивную сборку проекта. То есть, в файлах проекта pom.xml содержится его декларативное описание, а не отдельные команды. Все задачи по обработке файлов Maven выполняет через плагины. (материал из Википедии - http://ru.wikipedia.org/wiki/Apache_Maven).

И так постараемся разобраться, как же это происходит. Основная идея сборки с помощью Maven состоит в том, чтобы дать возможность загружать с различных серверов библиотеки и/или проекты, которые реализуют определенные части разрабатываемого приложения. Причем такие проекты или библиотеки также содержат pom.xml благодаря чему строится дерево зависимостей и все классы, которые были использованы для реализации загружаемых пакетов загружаются вместе с целевой библиотекой.

Куда же они загружаются?

По умолчанию библиотеки классов - Maven хранит в папке …/.m2/repository, которая, в сущности, представляет локальный репозиторий.

И так рассмотрим файл pom.xml он имеет следующую структуру:

      
…  
<repositories>
        <repository>	<!-- В этом блоке располагается -->
            <id>spring-Maven-release</id>                
            <name>Spring Maven Release Repository</name>
            <url>http://Maven.springframework.org/release</url>
        </repository>	<!-- информация о используемых 
                  плагинах -->
        <!-- General dependencies for standard applications -->
        <dependency>	<!-- В этом блоке располагается -->
            <groupId> net.sf.jasperreports </groupId>
            <artifactId> jasperreports </artifactId>
             < >4.5.0</version>
       </dependency>	<!-- информация зависимостях, 
…	используемых в проекте классов-->
		

В данном случае нас интересует второй блок «информация о зависимостях», используемых в проекте.

Таким образом, для того чтобы произвести сборку проекта с помощью Maven достаточно знать следующие характеристики интегрируемой библиотеки:

Эти характеристики можно пописать в pom.xml «ручками». Но если вы используете STS, то вам доступен более элегантный способ, в алгоритм действия которого входят следующие действия:

Теперь Maven знает, где взять библиотеки для разработки отчета. Если взглянуть на структуру pom.xml, то вы увидите, что блок информации, представленный ранее и состоящий из таких показателей как: groupId, artifactId и version был автоматически включен в его описание.

Теперь предлагаю вам самостоятельно проделать тоже самое для библиотеки «net.sf.jasperreports jasperreport-fonts», которая понабиться для экспорта отчета в формат .pdf

Интеграция визуального .xml редактора отчетов.

В качестве визуального редактора для составления отчета в нашем проекте будет использован «JasperWave».

Этот редактор является Open Sourse проектом, имеет плагин для интеграции с Eclipse, предоставляет разработчику ряд гибких возможностей для извлечения данных. В рамках данного руководства мы рассмотрим лишь простейший пример использования «JasperWave». (за более подробной информацией по использованию обращайтесь к документации, размещенной на сайте разработчика http://jasperwave.com/documentation.html. Необходимо отметить, что «JasperWave» обладает возможностью для извлечения данных из объектов класса «Bean»!):

Для интеграции «JasperWave» в среду разработки STS проведем следующие действия:

3. Создание файла разметки отчета.

После перезапуска STS делаем следующее:

4. Генерация отчета и экспорт в HTML.

Существует много способов реализации компиляции отчета, рассмотрим, на мой взгляд, наиболее простой из них, алгоритм которого состоит из следующих пунктов:

Создаем кнопку report в вашем приложении и добавляем следующий код:

      
// reportButton
reportButton = new Button();
reportButton.addListener(new Button.ClickListener() {

    @Override
    public void buttonClick(ClickEvent event) {
        ReportDB reportDB = new ReportDB();
        try {
            reportDB.print();
            } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
});
reportButton.setWidth("-1px");
reportButton.setHeight("-1px");
reportButton.setCaption("Отчет");
reportButton.setImmediate(true);
		

Создаем класс ReportDB:

      
package ru.sniizhk.vaadinreporttest.web.ui;

import java.io.IOException;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;

import org.apache.log4j.Logger;
import org.hibernate.loader.OuterJoinLoader;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.ResourceLoader;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.view.JasperDesignViewer;
import net.sf.jasperreports.view.JasperViewer;

@Configurable
public class ReportDB implements ResourceLoaderAware {
	private final static Logger Log = Logger.getLogger(ReportDB.class); 
	private ResourceLoader resourceLoader;
	private OutputStream outer;
	static Connection conn = null;
   
	public void print()  throws SQLException, IOException  {
		    try {
// Открываем соединение с базой
	Class.forName("org.gjt.mm.mysql.Driver");
     String query = "select * from sbreed";
	conn = DriverManager.getConnection("jdbc:mysql://localhost/anim", "root", "123");

//компилируем отчет
JasperReport jasperReport = JasperCompileManager.compileReport(( --->
resourceLoader.getResource("file:C:/Users/Admin/Documents/ --->
workspace-sts-2.8.1.RELEASE/VaadinReportTest/target/classes/reports --->
/myTeachingReport.jrxml").getInputStream())); // Передаем resultSet в отчет JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, new HashMap(), conn ); JasperExportManager.exportReportToHtmlFile(jasperPrint, “D:/report.Html); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (JRException e) { e.printStackTrace(); } finally { // Корректно закрываем соединение с базой try { conn.close(); } catch (Exception e) { e.printStackTrace(); } } System.out.println("Done."); } @Override public void setResourceLoader(ResourceLoader arg0) { this.resourceLoader = arg0; } }

Жмем на кнопку report и на диск D:/ экспортируется наш отчет в формате .html

5. Настройка шрифтов при экспорте отчета в формат .pdf.

Проблема, которой посвящается этот раздел, заключается в том, что JasperReport в дефолтной конфигурации ни чего не знает о существовании «Кириллицы». Для того, чтобы научить его подставлять шрифты при экспорте в .pdf проведем следующие операции:

Возможен экспорт и в другие форматы, которые обозначены в файле fonts.xml библиотеки «net.sf.jasperreports jasperreport-fonts