SPRING-SOURCE.RU | |
|
|
И так, учимся использовать JasperReport, который представляет собой одно самых мощных OpenSourse средств разработки отчетов.
Конфигурация системы: windows 7 (64-bit), sts-2.8.1.RELEASE, java 1.7, mysql, tomcat.
В данной статье будет рассмотрен ряд операций, позволяющих быстро создавать отчеты. А именно при их создании можно выделить следующие пункты:
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
В качестве визуального редактора для составления отчета в нашем проекте будет использован «JasperWave».
Этот редактор является Open Sourse проектом, имеет плагин для интеграции с Eclipse, предоставляет разработчику ряд гибких возможностей для извлечения данных. В рамках данного руководства мы рассмотрим лишь простейший пример использования «JasperWave». (за более подробной информацией по использованию обращайтесь к документации, размещенной на сайте разработчика http://jasperwave.com/documentation.html. Необходимо отметить, что «JasperWave» обладает возможностью для извлечения данных из объектов класса «Bean»!):
Для интеграции «JasperWave» в среду разработки STS проведем следующие действия:
После перезапуска STS делаем следующее:
Существует много способов реализации компиляции отчета, рассмотрим, на мой взгляд, наиболее простой из них, алгоритм которого состоит из следующих пунктов:
Создаем кнопку 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
Проблема, которой посвящается этот раздел, заключается в том, что JasperReport в дефолтной конфигурации ни чего не знает о существовании «Кириллицы». Для того, чтобы научить его подставлять шрифты при экспорте в .pdf проведем следующие операции:
# Font settings net.sf.jasperreports.default.font.name=DejaVu Serif net.sf.jasperreports.default.pdf.font.name=Times New Roman
Возможен экспорт и в другие форматы, которые обозначены в файле fonts.xml библиотеки «net.sf.jasperreports jasperreport-fonts
Copyright © 2024 |