Растянуть TextField по высоте в List
Отчет в области detail состоит из текстового поля (2) и списка с полями (3, 4, 5, 6). При переполнении поля 2 соответственно поля списка то же должны растянуться, но получается как на картинке ниже:
Как сделать что бы поля в списке то же растягивались по высоте? Полный отчет: 
mvn compile mvn exec:java -Dexec.mainClass="local.vssp.Main"
Краткое руководство по JasperReports
JasperReports — это технология и соответствующая Java-библиотека построения отчётов, которые могут быть использованы для создания отчётов в Платформе НЕЙРОСС. Средства JasperReports позволяют получать данные из различных источников (в том числе реляционных СУБД), фильтровать их, преобразовывать и формировать на выходе документы в форматах PDF, HTML, Microsoft Excel и многих других. Генерация отчёта осуществляется на основе одного или нескольких XML-шаблонов, в которых можно определить все аспекты формирования документа — от запроса к источнику данных до структуры и внешнего вида конечного документа.
JasperReports относится к классу свободного программного обеспечения и распространяется под свободной лицензией GNU Lesser General Public License, что позволяет свободно использовать JasperReports в коммерческих продуктах.
Редактирование и отладку шаблонов JasperReports можно осуществлять в бесплатной программе Jaspersoft Studio. Программа позволяет редактировать, настраивать и тестировать шаблон в визуальном редакторе. На текущий момент для разработки шаблонов для Платформы НЕЙРОСС мы рекомендуем использовать Jaspersoft Studio версии 6.9.0. Все версии Jaspersoft Studio доступны для загрузки на официальном сайте.

Внешний вид визуального редактора Jaspersoft Studio.
Основные сведения
Шаблон отчёта в JasperReports — это файл .jrxml в XML-формате, в котором хранится структура отчёта, его дизайн и логика.
Входные данные отчёта — это параметры и источник данных.
Параметры — это входные аргументы. Их значения неизменны во всём отчёте. Например, при формировании отчёта по записям в базе данных за некоторое время, дата / время начала и конца данного временного интервала могут быть переданы в шаблон в форме параметров.
Источник данных — это подключение к реляционной базе, XML-файл или другой источник, из которого в соответствии с заданными критериями формируется набор данных. В случае реляционной базы набор данных выбирается из базы данных в соответствии с SQL-запросом, определённом в шаблоне отчёта.
Набор данных — это коллекция записей, каждая из которых представляет собой набор полей. Например, в случае реляционной базы записи и поля — это строки и значения колонок таблиц базы данных, выбираемые в соответствии с SQL-запросом.
Поле — это именованное значение из набора данных. В случае реляционной базы данных соответствует значению некоторой колонки. Список используемых из набора данных полей также определяется в шаблоне в разделе Fields.
Если нужно вывести в отчёте номер страницы, номер записи, количество записей и т.д., можно использовать переменные.
Переменная — это вычисляемое в процессе формирования отчёта значение. Доступно большое количество стандартных переменных, таких как номер страницы, но разработчик шаблона также может создать свои переменные.

На изображениях выше показан редактор SQL-запроса для формирования набора данных и списки параметров, полей и переменных.
Отчёты состоят из секций, которые также называются bands (полосы). Секции следуют одна за другой строго по вертикали. Каждая секция принадлежит к определённому типу, который влияет на её отображение в отчёте:
| Секция | Описание и назначение |
|---|---|
| Title | Присутствует только в начале отчёта |
| Page Header | Выводится вверху каждой страницы |
| Column Header | Выводится в начале столбца отчёта (секции Detail могут выводиться на странице в несколько столбцов) |
| Detail | Выводится для каждой записи в источнике данных |
| Column Footer | Выводится в конце столбца отчёта |
| Page Footer | Выводится внизу каждой страницы |
| Last Page Footer | Присутствует только внизу последней страницы (вместо Page Footer) |
| Summary | Присутствует только в самом конце отчёта |
| No Data | Выводится вместо всех остальных секций, если источник данных не содержит записей |
| Background | Выводится на заднем плане каждой страницы |
Кроме того, записи в наборе данных делить на группы в соответствии с заданными критериями. Тогда перед и после каждой группы можно выводить дополнительные секции:
| Секция | Описание и назначение |
|---|---|
| Group Header | Выводится перед каждой новой группой |
| Group Footer | Выводится после каждой группы |
Не все секции необходимо использовать в шаблоне. Ненужные секции можно удалить (отключить) — тогда они не будут участвовать в формировании документа.
Секции подписаны и разделяются серыми горизонтальными линиями на листе отчёта. Список секций также выводится в панели Outline (серым цветом подписаны удалённые секции).

Для вывода текста в отчётах используются два основных компонента: Text Field (динамическое поле) и Static Text (статическое поле). Динамическое поле используется для вывода значений параметров или полей набора данных, а статическое — для вывода постоянного текста (например, заголовков колонок).

На изображении выше выбран элемент Text Field, в котором в секции Details выводится значение поля message_time (время события) для строк из базы данных.
В элементах типа Text Field можно выводить результаты сложных выражений, написанных на языке Java. Так, для вывода текста события в примере выше события используется следующее выражение:
($F.indexOf('.') >= 0 ? ($F.substring(0,$F.indexOf('.'))) : $F) + ((($F != null) && !$F.isEmpty()) ? (" (" + $F + "; " + $F + ")") : "")

При формировании выражений можно использовать все возможности Java, значения параметров, полей и переменных.

На рисунке выше переменная PAGE_NUMBER используется для вывода номера текущей страницы.
Возможности оформления
Итак, вёрстка шаблона отчёта заключается в расположении различных элементов — полей вывода текста, геометрических фигур, изображений и др. — в соответствующих секциях. Помимо непосредственного позиционирования таких элементов на листе и наполнения их данными разработчик шаблона может достаточно гибко настраивать внешний вид этих элементов. Рассмотрим возможности по изменения внешнего вида на примере текстового поля (Text Field).

Настройка элементов осуществляется в панели Properties:

На вкладке Apperance можно настроить точное местоположение и размер элемента, задать основной цвет элемента и цвет фона, указать когда выводить / скрывать элемент и другие параметры.

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

Для текста, выводимого в отчёте с помощью элементов Text Field и Static Text, можно задавать цвет, размер, начертание (жирное, курсив, с подчеркиванием), шрифт, выравнивание текста в блоке по горизонтали и вертикали, а также всевозможные отступы. Более того, текст можно выводить с поворотом на 90, 180 и 270 градусов.

Если размер элемента заранее неизвестен (например, размер текстового поля должен зависеть от объёма текста, полученного из источника данных), то можно настроить относительное позиционирование элементов в секции:

а) либо с помощью выбора правила расположения (layout): элементы располагаются последовательно по вертикали / по горизонтали / в форме таблицы X на Y:

б) либо с помощью привязки элемента к границам секции / границам других элементов:
Наконец, для того, чтобы документ отчёта соответствовал требуемому формату бумаги, например, А4, можно настраивать размер, ориентацию и поля страницы отчёта:

Подотчёты
Достаточно часто нет возможности получить все необходимые данные из источника с помощью одного запроса. Или бывает так, что в отчёт необходимо включить данные из нескольких наборов. Например, в отчёт типа «Досье по пропуску» в самом начале отчёта требуется вывести подробную информацию о владельце пропуска, а далее в основной части отчёта отобразить таблицу событий доступа, связанных с данным пропуском.
В таких ситуациях на помощь приходит элемент Subreport, который позволяет встраивать один отчёт (подотчёт) в другой.

В общем случае подотчёт может использовать любой источник данных, но обычно он просто формирует другой запрос к источнику данных родительского отчёта.
Подотчёт — это ещё один отчёт, который точно также можно редактировать и настраивать:

Компиляция и предпросмотр
JasperReports для генерации отчёта использует не *.jrxml XML-файлы с определением шаблонов, а скомпилированные из них *.jasper-файлы. В Jaspersoft Studio для компиляции шаблона необходимо вызвать соответствующую команду по кнопке на панели или в контекстном меню на *.jrxml-файле:


Компиляция шаблона также выполняется автоматически при попытке предпросмотра отчёта:

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

Заключение
На этом краткое руководство кончается.
Дополнительную информацию по использованию JasperReports и Jaspersoft Studio можно почерпнуть в разделе документации на официальном сайте сообщества.
- Нет меток
Вопросы с меткой [jasperreports]
Руководство по использованию метки jasperreports отсутствует.
42 вопроса
Конкурсные
Неотвеченные
- Конкурсные 0
- Неотвеченные
- Цитируемые
- Рейтинг
- Неотвеченные (мои метки)
Скрипт для просчета формулы jasper report
Как преобразовать данную переменную из string’a в double, для последующего ее умножения и деления. net.homecredit.tools.Ft.formatCurrency( new Double( ($F
27 показов
Как группировать итоги в JasperReports?
Делаю отчет в jasperReports и требуется группировка итогов в конце определенного периода. Получается идет сначала секция Detail после неё следуют сгруппированные итоги по секции. На данный момент .
407 показов
Word и jasperreports: большие пробелы в тексте
Имеется отчет, в котором требуется задать для TextField свойство «Выровнять текст по ширине», в текстовке используется html разметка и имеются переносы (
). Текстовка идет в таком формате: .
14 показов
JasperReports кнопка Назад возвращает на первую страницу
Делаю дриллдаун. Переход в дочерний ответ отрабатывает корректно, но при нажатии кнопки «Назад» переходит всегда на первую страницу исходного отчета. Как сделать так, чтобы возвращался на ту страницу, .
JasperReports вывести в Excel числа как числа
Привет! Есть SpringMVC проект, есть данные, которые по клику на кнопку выкачиваются в Excel файл. Данные могут быть как число, так и текст, поэтому предыдущий программист сохранял все данные как .
136 показов
как закрепить заголовки таблицы при скролинге страницы в jaspersoft studio
Помогите пожалуйста решить проблему. При скролинге часть заголовков обрезается. Никак не могу решить проблему.. на американском форуме задавал аналогичный вопрос. Посоветовали выделить заголовки .
275 показов
ORA-00942: таблица или представление пользователя не существует
Выходит ошибка java.sql.SQLSyntaxErrorException: ORA-00942: таблица или представление пользователя не существует. Что делается не так? Разве если не создан класс как в таблице в базе, то он не может .
346 показов
Перевести миллисекунды в дни часы: минуты: секунды в JasperReports
В любом ЯП это делается легко и просто делением и делением с остатком. НО Jasper Reports имеет свой xml формат, в котором как я понял нельзя производить деление с остатком. Поэтому стандартные .
77 показов
Можно ли уменьшать высоту PageFooter в зависимости от содержимого? Или как реализовать по другому?
В области PageFooter есть 2 Frame с содержимым, они имеют разную высоту. Печатаются по условию, большой Frame $V
392 показа
iReport-5.6.0 открывается,но не запускается
Пытаюсь запустить iReport-5.6.0. загрузка останавливается на этапе: Так выглядит файл ireport.conf: # $
Как скрыть пустой подотчет в Jasper reports
Необходимо скрыть подотчет, если он ничего не возвращает. Пробовал через jasper studio ставить галочку remove line when blank не помогло. Так же в самом коде пытался изменить значения высоты band на .
38 показов
Некорректная форма отчета при выгрузке с JasperServer
Для генерации отчета использую CROSSTAB. Отчет выгружается в xlsx. Как видно на изображении, заголовок отчета состоит из нескольких столбцов, причем последний столбец разбит на 3 строки. При выгрузке .
367 показов
jasper reportts как подкрасить строку в зависимости от поля?
55 показов
Генерация отчета в JasperReports
Пытаюсь сгенерить отчет в Eclipse с использованием шаблона JasperReports. Суть в чем: Есть база на 50 000 записей. Нужно сделать по отчёту на каждую запись. Т.е. параметры(поля) одни и те же, .
385 показов
Как убрать лишнее пустое пространство между band в JasperReports?
Разрабатываю отчёт в Jasper для заполнения его в Java. Поместил шапку таблицы в title band, контент в details band и итоговую часть в summary band (это всё разные таблицы). Во всех трёх используется .
15 30 50 на странице
-
Важное на Мете
Связанные метки
Подписаться на ленту
Лента последних активных вопросов с меткой [jasperreports]
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Создание отчётов с помощью JasperReports
В широком смысле, “отчёт” это удобное для просмотра представление некоторых данных, а точнее, сведений. Квитанция об оплате, акт приёма-передачи, договор, спецификация, журнал регистрации, доверенность, школьный классный журнал и прочие документы, которые мы встречаем в повседневной жизни, имеют одно важное сходство – все они сочетают в себе два вида информации: описательную/формальную и информативную/содержательную. Таким образом, процесс создания отчёта сводится к двум задачам:
- Создание формы/структуры
- Заполнение формы содержанием
Например. Квитанция об оплате: изготавливается бланк по заранее продуманному шаблону, а затем заполняются соответствующие поля. Договор, доверенность и т.п.: составляется шаблон документа (т.н. “рыба”), а затем вносятся изменения/дополнения в нужных местах текста. Задача создания разового отчёта (в самом себе) абсолютно тривиальна, и не требует использования каких-либо особенных технических средств. Но очень часто возникают ситуации, когда одни и те же данные/сведения должны фигурировать в отчётах разного типа. Ну и, разумеется, не стоит забывать о том, что даже изначально разовый отчёт, своей содержательной частью, может служить источником данных для других отчётов.
Итак, для создания отчёта необходимы:
- Форма/структура/шаблон
- Источник данных
- Средство ввода данных
- Средство создания отчёта (форма+содержание)
Установка ПО
В качестве подходящего инструмента рассматривается проект “JasperReports” от группы “Jaspersoft Community”.
Перейти на страницу: http://community.jaspersoft.com/download и загрузить “JasperReports Library” (потребуется бесплатная регистрация). Распаковать загруженный архив и собрать проект с помощью “Apache Ant”. Например (Arch Linux):
[orca@blizzard ~]$ sudo pacman -S apache-ant [orca@blizzard ~]$ ant -version Apache Ant(TM) version 1.9.2 compiled on July 24 2013 [orca@blizzard ~]$ cd /store/Install/Source/jasperreports-5.2.0/ [orca@blizzard jasperreports-5.2.0]$ ant -p [orca@blizzard jasperreports-5.2.0]$ ant jar [orca@blizzard jasperreports-5.2.0]$ cd ./demo/samples/table [orca@blizzard table]$ ant [orca@blizzard table]$ ls -altr ./build/reports/ [orca@blizzard table]$ okular ./build/reports/TableReport.pdf [orca@blizzard table]$ firefox ./build/reports/TableReport.html [orca@blizzard table]$ libreoffice ./build/reports/TableReport.xls
- Установка “Apache Ant”
- Проверка “Apache Ant”
- Подготовка к сборке
- Отчёт о задачах сборки
- Сборка ПО JasperReports
- Выбор примера (для проверки)
- Создание отчёта
- Список вариантов отчёта
- Просмотр вариантов отчёта
Если перечисленные команды были выполнены без ошибок, то можно считать, что библиотека “JasperReports” установлена и работает. Далее можно переходить к созданию собственных отчётов.
Создание отчёта
Жизненный цикл отчёта
В процессе своего создания отчёты “JasperReports” проходят по следующим этапам жизненного цикла:
- Разработка и создание шаблона. Шаблон это XML-файл, составленный по особым правилам библиотеки “JasperReports”. По соглашению имеет расширение “jrxml”. Может быть создан вручную в текстовом редакторе (как и любой другой XML-файл), а может быть создан с помощью редактора шаблонов “iReport Designer”
- Сборка/компиляция шаблона. Проверка XML-файла шаблона, приведение его к типу “Java serialization data” и сохранение результата в виде файла с расширением “jasper”
- Заполнение отчёта данными. Используется собранный на предыдущем этапе шаблон и выборка из источника данных. В качестве источника могут выступать: JDBC, CALS Table Models, XML, XSL, CSV, JavaBeans, EJBQL, Hibernate. Заполненный шаблон сохраняется в файле с расширением “jrprint”
- Экспорт отчёта. Привидение его к требуемому читаемому формату (PDF, HTML, XLS, RTF, ODT, CSV, XML, XHTML, DOCX, XLSX)
Сохранение промежуточных результатов в виде файлов “jasper” и “jrprint” позволяет при необходимости создавать отчёт с этих точек, что сэкономит время в процессе промышленного использования системы. Например, если уже есть утверждённый и собранный шаблон отчёта, то процесс можно начинать с этапа заполнения его данными, а если отчёт с введёнными данными нужно сохранить в каком-либо другом формате, то сразу можно переходить к экспорту.
| Замечание | Строго говоря, отчёты, как таковые, это всё же документы где содержательная часть превалирует над описательной составляющей. В договорах, доверенностях и в других подобных документах содержательная часть (т.е. вводимые данные) идут небольшими вкраплениями в заметно большем тексте (шаблоне) и поэтому в таких применениях намного проще и эффективнее использовать шаблоны и электронные формы обычных офисных программ.Поэтому, если нужна автоматизированная система только для заполнения шаблонов документов и нет необходимости повторного использования введённых данных, то библиотека “JasperReports” не нужна.Однако, если вводимые данные должны использоваться в будущем, то необходимо должным образом сохранить их с тем, чтобы можно было повторно использовать в отчётах “JasperReports”. |
Пример отчёта “Лента новостей”
Требуется собрать новостной дайджест в формате pdf.
Загрузка данных
Загрузить файл новостной ленты:
[orca@blizzard ~]$ cd /store/Install/Source/jasperreports-5.2.0/demo [orca@blizzard demo]$ mkdir -p ./myreports/rss [orca@blizzard demo]$ cd ./myreports/rss [orca@blizzard demo]$ curl http://www.vesti.ru/vesti.rss -o "vesti.xml" [orca@blizzard demo]$ file vesti.xml vesti.xml: XML document text
Теперь XML-файл “vesti.xml” содержит снимок ленты интернет-газеты “Вести”.
Создание шаблона
Далее необходимо создать шаблон для отчёта “JasperReports”.
| Замечание | Для лучшего понимания устройства библиотеки “JasperReports” рекомендуется создавать шаблон отчёта вручную. Далее, после ознакомления, проще, конечно же, использовать графические средства, например, “iReport”. |
Шаблон отчёта состоит из обязательного корневого элемента:
Здесь можно только заменить имя отчёта на любое подходящее (пробелы в имени не допускаются).
Следующие за “name” атрибуты корневого элемента обязательными не являются:
- columnCount. Количество колонок. По умолчанию: “1”
- printOrder. Порядок вывода текста (имеет смысл если кол-во колонок 2 и более). Возможные значения: (Vertical | Horizontal). По умолчанию: “Vertical”
- pageWidth. Ширина страницы (в пикселах). По умолчанию: “595”
- pageHeight. Высота страницы (в пикселах). По умолчанию: “842”
- orientation. Ориентация страницы. Возможные значения: (Portrait | Landscape). По умолчанию: “Portrait”
- columnWidth. Ширина колонки. По умолчанию: “555”
- columnSpacing. Расстояние между колонками. По умолчанию: “0”
- leftMargin. Левое поле. По умолчанию: “20”
- rightMargin. Правое поле. По умолчанию: “20”
- topMargin. Верхнее поле. По умолчанию: “30”
- bottomMargin. Нижнее поле. По умолчанию: “30”
- whenNoDataType. Поведение при отсутствии данных. Возможные значения: (NoPages | BlankPage | AllSectionsNoDetail). По умолчанию: “NoPages”
- isTitleNewPage. Размещать или нет раздел заголовка на отдельной странице. Возможные значения: (true | false). По умолчанию: “false”
- isSummaryNewPage. Размещать или нет итоговый раздел на отдельной странице. Возможные значения: (true | false). По умолчанию: “false”
- isSummaryWithPageHeaderAndFooter. Добавлять или нет колонтитулы, если итоговый раздел будет на отдельной странице. Возможные значения: (true | false). По умолчанию: “false”
- isFloatColumnFooter. Размещать или нет нижний колонтитул колонки внизу колонки. Возможные значения: (true | false). По умолчанию: “false”
Первыми в корневом элементе перечисляются стили, которые будут использованы в отчёте. Элемент “style” также имеет богатый перечень атрибутов. Вот некоторые из них:
- name. Имя стиля. Обязательный атрибут
- isDefault. Будет ли использован этот стиль “по умолчанию”. Возможные значения: (true | false). По умолчанию: “false”
- style. Ссылка на родительский стиль
- mode. Прозрачность. Возможные значения: (Opaque | Transparent)
- forecolor. Цвет
- backcolor. Фон
- pen. Тип линии для графических элементов. Возможные значения: (None | Thin | 1Point | 2Point | 4Point | Dotted) #IMPLIED
- fill. Тип закраски для графических элементов. Возможные значения: (Solid) #IMPLIED
- border, topBorder, leftBorder, bottomBorder, rightBorder. Толщина рамки: (None | Thin | 1Point | 2Point | 4Point | Dotted)
- borderColor, topBorderColor, leftBorderColor, bottomBorderColor, rightBorderColor. Цвет рамки
- padding, topPadding, leftPadding, bottomPadding, rightPadding. Отступы
- rotation. Поворот. Возможные значения: (None | Left | Right | UpsideDown)
- lineSpacing. Междустрочный интервал. Возможные значения: (Single | 1_1_2 | Double)
Кроме этого, в отчёте можно использовать условное форматирование.
Вслед за стилями перечисляются параметры. Параметры используются для случаев, когда нет другой возможности передать отчёту тот или иной объект. Например, необходимо, чтобы в отчёте было приведено имя пользователя, запустившего создание отчёта или нужно, чтобы заголовок отчёта изменялся динамически.
Параметры объявляются с указанием их имени и класса, т.е. типа объекта. Например:
После объявления параметров следует запрос к источнику данных. Вслед за этим, полученные данные должны быть привязаны к “полям”. Например:
С этого момента в шаблоне отчёта начинают перечисляться те его части, которые должны быть выведены на печать.
Как и в других движках создания отчётов, в библиотеке “JasperReports” используется структура из т.н. разделов, а именно:
- title
- pageHeader
- columnHeader
- groupHeader
- detail
- groupFooter
- columnFooter
- pageFooter
- lastPageFooter
- summary
- background
Особый интерес представляет раздел “detail”, который прорисовывается для каждой записи источника данных (результата запроса). Раздел должен содержать хотя бы один контейнер для печатаемых элементов. Этот контейнер, называемый связкой (“band”), представляет собой блок, в котором, в свою очередь, перечисляются элементы отчёта.
Возвращаясь к задаче создания новостного дайджеста, получаем следующий шаблон:
Код Java
Итак, к данному моменту, в директории проекта имеется два XML-файла:
- vesti.xml – данные с ленты интернет-газеты
- report.jrxml – шаблон отчёта
Необходимо собрать их вместе, а результат сохранить в файл формата PDF, т.е. необходимо пройти по трём этапам жизненного цикла отчёта:
- Сборка/компиляция шаблона. Результат: файл “report.jasper”
- Заполнение отчёта данными. Результат: файл “report.jrprint”
- Экспорт отчёта. Результат: файл “report.pdf”
import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.JREmptyDataSource; 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.engine.fonts.*; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.engine.util.JRXmlUtils; import net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory; import net.sf.jasperreports.engine.data.JRXmlDataSource; import org.w3c.dom.Document; public class RSSReport < public static void main(String[] args) < try < JasperCompileManager.compileReportToFile("report.jrxml"); Document document = JRXmlUtils.parse(JRLoader.getLocationInputStream("vesti.xml")); Map params = new HashMap(); params.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, document); JasperFillManager.fillReportToFile("VESTI.jasper", params); JasperExportManager.exportReportToPdfFile("VESTI.jrprint"); >catch (JRException e) < e.printStackTrace(); >> >
Шрифты
“Русский букварь и PDF” – это всегда непросто. Но лучше один раз побороть эту проблему, чтобы потом в своих PDF-отчётах любоваться красивыми и интересными шрифтами с поддержкой “великаго и могучаго”. Процедура добавления нестандартных шрифтов выполняется в два этапа:
- Сборка JAVA-архива нестандартных шрифтов
- Добавление в этот архив своих шрифтов
JAVA-архив (JAR-файл) для поддержки нестандартных шрифтов:
[orca@blizzard ~]$ cd /store/Install/Source/jasperreports-5.2.0/ [orca@blizzard jasperreports-5.2.0]$ ant -p . fonts Builds the JAR containing the JasperReports default font extension . [orca@blizzard jasperreports-5.2.0]$ ant fonts [orca@blizzard jasperreports-5.2.0]$ ls -al ./dist/ . jasperreports-fonts-5.2.0.jar
- Переход в директорию с исходными кодами JasperReports
- Отчёт о задачах сборки. Убедиться в том, что есть задача “fonts”
- Сборка jasperreports-fonts
- Проверка наличия файла с jasperreports-fonts
Далее, распаковать этот архив (как ZIP), перейти во вложенную директорию net/sf/jasperreports/fonts и записать туда файлы TTF со шрифтами, которые будут использоваться в отчётах. В этой же директории найти файл fonts.xml открыть и отредактировать его, перечислив должным образом добавленные файлы, например:
net/sf/jasperreports/fonts/courierc.ttf net/sf/jasperreports/fonts/couriercbd.ttf net/sf/jasperreports/fonts/courierci.ttf net/sf/jasperreports/fonts/couriercbi.ttf Identity-H true 'CourierC', 'Courier New', Courier, monospace 'CourierC', 'Courier New', Courier, monospace net/sf/jasperreports/fonts/futurisc.ttf net/sf/jasperreports/fonts/futuriscbd.ttf net/sf/jasperreports/fonts/futurisci.ttf net/sf/jasperreports/fonts/futuriscbi.ttf Identity-H true 'FuturisC', Arial, Helvetica, sans-serif 'FuturisC', Arial, Helvetica, sans-serif net/sf/jasperreports/fonts/helioscond.ttf net/sf/jasperreports/fonts/helioscondbd.ttf net/sf/jasperreports/fonts/helioscondi.ttf net/sf/jasperreports/fonts/helioscondbi.ttf Identity-H true 'HeliosCond', Arial, Helvetica, sans-serif 'HeliosCond', Arial, Helvetica, sans-serif
Переместить оригинальный JAR-файл (чтобы была копия), а директорию упаковать как ZIP-файл указав “jar” в качестве расширения имени файла.
Сборка программы
Итак, в наличии три файла. К “vesti.xml” и “report.jrxml” добавляется файл “RSSReport.java” с JAVA-кодом.
Перейти в директорию проекта, установить значение переменной окружения CLASSPATH, собрать и запустить программу:
[orca@blizzard ~]$ cd /store/Install/Source/jasperreports-5.2.0/demo/myreports/rss [orca@blizzard rss]$ export CLASSPATH=/store/Install/Source/jasperreports-5.2.0/dist/jasperreports-5.2.0.jar:/store/Install/Source/jasperreports-5.2.0/lib:/store/Install/Source/jasperreports-5.2.0/lib/commons-logging-1.1.1.jar:/store/Install/Source/jasperreports-5.2.0/lib/commons-digester-2.1.jar. /store/Install/Source/jasperreports-5.2.0/lib/commons-collections-2.1.1.jar:/store/Install/Source/jasperreports-5.2.0/lib/commons-beanutils-1.8.0.jar:/store/Install/Source/jasperreports-5.2.0/lib/xalan-2.7.1.jar:/store/Install/Source/jasperreports-5.2.0/lib/iText-2.1.7.js2.jar:/store/Install/Source/jasperreports-5.2.0/dist/jasperreports-fonts.jar [orca@blizzard rss]$ ls report.jrxml RSSReport.java vesti.xml [orca@blizzard rss]$ javac RSSReport.java [orca@blizzard rss]$ java RSSReport
Особое внимание следует уделить переменной окружения CLASSPATH. Ниже перечислен список путей к файлам/директориям, которые должны быть перечислены в этой переменной:
- /store/Install/Source/jasperreports-5.2.0/dist/jasperreports-5.2.0.jar
- /store/Install/Source/jasperreports-5.2.0/dist/jasperreports-fonts.jar
- /store/Install/Source/jasperreports-5.2.0/lib
- /store/Install/Source/jasperreports-5.2.0/lib/commons-logging-1.1.1.jar
- /store/Install/Source/jasperreports-5.2.0/lib/commons-digester-2.1.jar
- /store/Install/Source/jasperreports-5.2.0/lib/commons-collections-2.1.1.jar
- /store/Install/Source/jasperreports-5.2.0/lib/commons-beanutils-1.8.0.jar
- /store/Install/Source/jasperreports-5.2.0/lib/xalan-2.7.1.jar
- /store/Install/Source/jasperreports-5.2.0/lib/iText-2.1.7.js2.jar
- . (указание на домашнюю директорию)
Итак, если все завершилось без ошибок, то результатом будет PDF-файл с текстом в три колонки. Отчёт, как видно, не идеальный: оформление довольно простое; в тех частях, где нет данных присутствует запись “null”; нет нумерации, колонтитулов и прочих структурных элементов, но процесс налажен и работает, и есть базовые понятия о принципах работы библиотеки “JasperReports”.
Заключение
В какой-то момент времени может показаться, что использование библиотеки “JasperReports” напоминает “стрельбу из пушки по воробьям”, но стоит только поглубже изучить её глубочайшие возможности, как все кажущиеся сложности отойдут на второй план.
Что же дальше? А дальше: освоить работу с базами данных; получить данные из нескольких источников; научиться пользоваться условным форматированием и группировкой; установить и разобраться с “iReport”.