JasperReports Life Cycle

Рубрика: JasperReports | 16 March 2007, 09:16 | juriy

В прошлой заметке о JasperReports я описал основные принципы разметки отчета и показал способ составить отчет на основании данных из БД. В этой заметке я расскажу о “жизненном цикле” Jasper отчета.

Все статьи

Жизненный цикл отчета.

Жизненный цикл отчета начинается с разработки xml-шаблона отчета. Давайте вспомним Java код, который мы использовали в первой заметке для создания HTML отчета:

[java]JasperReport jasperReport = JasperCompileManager
.compileReport(“reports/test.jrxml”);

JasperPrint jasperPrint = JasperFillManager.fillReport(
jasperReport,
new HashMap(),
new JREmptyDataSource()
);

JasperExportManager.exportReportToHtmlFile(
jasperPrint,
“reports/demo_report.html”
);[/java]

Эти три строки полностью описывают жизненный цикл отчета. Рассмотрим их по порядку. Первая строка

JasperReport jasperReport = JasperCompileManager
.compileReport("reports/test.jrxml");

преобразует xml формат отчета в некоторый внутренний формат, который представлен классом JasperReport. Формат JasperReport называется скомпилированным шаблоном.
Скомпилированный (бинарный) вариант отчета можно сохранить в виде обычного бинарного файла, используя метод JasperCompileManager.compileReportToFile(…);

Вот пример кода, который скомпилирует отчет из первой заметки и сохранит скомпилированную версию в виде файла.

[java]public class JasperReportsIntro {
public static void main(String[] args) {
try {
JasperCompileManager
.compileReportToFile(“reports/demo_report.xml”);
} catch (JRException e) {
e.printStackTrace();
}
}
}[/java]

Процесс загрузки, проверки и обработки xml-шаблона занимает некоторое время. Поэтому работа со скомпилированной версией отчета дает существенный выигрыш в производительности на production системах.
Если использовать вариант функции compileReportToFile с одним аргументом, то скомпилированный отчет будет сохранен в ту же папку, где находится исходный xml файл. Имя файла будет таким: название_отчета.jasper.

Если есть скомпилированный шаблон, то код для генерации отчета будет выглядеть так:

[java]public class JasperReportsIntro {
public static void main(String[] args) {
try {
JasperPrint jasperPrint = JasperFillManager.fillReport(
“reports/Simple_Report.jasper”,
new HashMap(), new JREmptyDataSource());
JasperExportManager.exportReportToHtmlFile(
jasperPrint,
“reports/demo_report.html”);
} catch (JRException e) {
e.printStackTrace();
}
}
}[/java]

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

JasperPrint jasperPrint = JasperFillManager.fillReport(
"reports/Simple_Report.jasper",
new HashMap(), new JREmptyDataSource());

и строка, экспортирующая отчет в html файл.
Заполненный и готовый к экспорту отчет хранится в виде объекта JasperPrint. Разработчики библиотеки предоставили нам возможность сохранить в виде файла и эту промежуточную версию отчета. Код, который реализует эту функциональность, не отличается оригинальностью:

[java]public class JasperReportsIntro {
public static void main(String[] args) {
try {
JasperFillManager.fillReportToFile(
“reports/Simple_Report.jasper”,
new HashMap(), new JREmptyDataSource());
} catch (JRException e) {
e.printStackTrace();
}
}
}[/java]

Как и в прошлом примере, отчет будет сохранен в той же папке, но теперь с расширением .jrprint.

Чтобы загрузить .jrprint и экспортировать в один из “общедоступных” форматов можно использовать такой код:

[java]public class JasperReportsIntro {
public static void main(String[] args) {
try {
JasperExportManager.exportReportToHtmlFile(
“reports/Simple_Report.jrprint”,
“reports/demo_report.html”);
} catch (JRException e) {
e.printStackTrace();
}
}
}[/java]

Экспорт является конечной точкой жизненного цикла отчета (ну, конечно, если не считать за конечную точку пыльный ящик стола одного из заказчиков).

Подведем итоги.
Жизненный цикл отчета JasperReports состоит из трех стадий:

1. XML (jrxml) шаблон отчета, который создает разработчик (шаблон можно написать вручную или использовать GUI редактор вроде iReport).
2. Скомпилированный шаблон (файл .jasper). Скомпилированный шаблон еще не заполнен данными, но, в отличии от xml шаблона файл jasper не надо разбирать или верифицировать. Поэтому для работы в production среде лучше использовать именно скомпилированные шаблоны.
3. Отчет, заполненный данными (.jrprint). Это готовый к просмотру (с помощью специальной утилиты о которой я расскажу в следующей заметке) или к экспорту отчет.
4. Экспортированный файл – файл, готовый для конечных пользователей. Сейас экспортировать отчеты можно в один из следующих форматов – pdf, html, rtf, xls, csv, xml, plain text.

В следующей заметке я расскажу, как можно просматривать отчеты на любой стадии их жизненного цикла, не экспортируя их в открытый формат (очень полезно при разработке) и о том, как автоматизировать некоторые задачи построения отчетов с помощью утилиты Ant (не менее полезно при разработке).

Предыдущая тема Работа с БД
Следующая тема Интеграция Ant

Комментариев: 10

10 Responses to “JasperReports Life Cycle”

Комментарии:

  1. Zik

    Если кто то может!!! подскажите пожалуйста!!!!
    У меня в папке reports есть файли с рас. ….xml, jasper, java,
    Что? КАК? и ГДЕ? мне изменить, чтоб добавить ещё пару блоков у отчет!!!

  2. Juriy

    Можем и поможем :-)

    Изменять надо .xml файлы. Это – шаблоны отчетов, именно они отвечают за то, как будет выглядеть отчет.

    .jasper – это скомпилированные отчеты, их трогать не надо. Ну а .java – тут, как говорится, no comments.

  3. Zik

    Спасибо большое за помощь!!!

    Тоесть как я понял если я удалю файл .jasper , а оставлю .xml, при генерировании нового отчета создастся такой же .jasper файл?

    Подскажите ещё пожалуйста как мне изменить .xml?
    Когда я пробую изменить с помощью блокнота, сохраняю в .xml,
    при открытии измененного файла, пишет -

    не удается отобразить страницу xml
    Ошибка в элементе верхнего уровня документа. Ошибка при обработке ресурса ”file:///C:/Documents and Settings/Administrator…

    Заранее спасибки!

  4. Juriy

    Zik, для того, чтобы использовать JasperReports нужно:

    1. Создать xml шаблон отчета.
    2. Скомпилировать шаблон.
    3. Заполнить его данными.
    4. Экспортировать в файл.

    Действия 2-4 можно выполнить непосредственно в приложении.

    В этом блоге есть несколько заметок о том, как это сделать:

    http://voituk.kiev.ua/2007/03/13/report-in/
    http://voituk.kiev.ua/2007/03/16/jasperreports-video-kick-off/

    Кроме того, можно глянуть на книжку “JasperReports Reporting for Java Developers”. Она есть в сети.

  5. Gellert

    Есть ли возможность “проскочить” некоторые шаги и создать отчет напрямую из HTML файла? Мне нужна конвертация HTML в PDF формат.

  6. Juriy

    Думаю, JasperReports для этого использовать не надо. Хватит iText. Я такие задачи никогда не решал, но если поделитесь советами по решению, буду благодарен.

  7. Gellert

    Попробовал реализовать это с помощью iText, все нормально конвертится за исключением одной вещи: кодировка. Убил 7 дней на то чтоб на выходе получить кирилицу – результат 0. В исходящем PDF отсутствую символы кириллицы, или появляются “абраказяблики”. Пример который выложен на сайте iText не пашет. Пришлось искать альтернативные пути решения.

Leave a Reply