4.2.5. Шаблон JasperReports
Генератор отчётов позволяет извлекать информацию из приложения и использовать для ее вывода шаблоны отчётов JasperReports. Язык разметки JasperReports будет обработан генератором отчётов, преобразуя шаблон в отчёт с выбранным типом вывода.
Создавайте шаблоны JRXML, как используя специальные утилиты JasperReports (такие, как Jaspersoft Studio), так и в текстовом редакторе. Каждой полосе отчёта, указанной в его структуре, должен соответствовать свой элемент band
в файле шаблона, который, в свою очередь, должен быть помещен в одну из стандартных секций отчёта JasperReports (в терминологии JasperReports эти секции также называются bands): title
, pageHeader
, columnHeader
, detail
, и т.д.
Из данных со всех полос отчёта генератор формирует один источник данных: JRBandDataDataSource
, содержащий данные в виде дерева с корневой полосой Root, и передает экземпляр CubaJRFunction
в отчёт в качестве основного источника данных. Обратиться к источнику данных можно с помощью параметра REPORTING
. Этот параметр объявлять в шаблоне не обязательно, он будет добавлен автоматически, однако если вы хотите компилировать отчёты в JasperReports IDE, объявите параметр явно.
Для параметра REPORTING
доступны следующие два метода:
-
dataset
– получает вложенный источник данных из основного источника, который можно использовать, например, в таблицах или подотчётах в качествеsubDataset
. Метод ищет среди наследников полосы Root полосу с указанным именем и создает новый источник данных только из этой полосы. Например:<subDataset name="Product"> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Long"/> </subDataset> ... <dataSourceExpression><![CDATA[$P{REPORTING}.dataset("Product")]]></dataSourceExpression>
-
bitmap
– преобразует переданный массив байтов вByteArrayInputStream
, который можно использовать для вставки изображений в отчёт. Например:
<field name="Main.image" class="java.lang.Object"/> //image from DB as byte array
...
<imageExpression><![CDATA[$P{REPORTING}.bitmap($F{Main.image})]]></imageExpression>
К каждой полосе отчёта генератор обращается только один раз, поэтому если вам необходимо представить одни и те же данные в разных формах (к примеру, в виде таблицы и в виде графика) в одном отчёте, вам необходимо создать столько полос, сколько элементов band
вы используете в шаблоне. Вложенные полосы не поддерживаются, для корректного отображения используйте только полосы, вложенные непосредственно в Root.
Вставить значения из источника данных в поле можно, используя следующий синтаксис: $F{<field name>}
. Например:
<textField>
<textFieldExpression><![CDATA[$F{library_department_name}]]></textFieldExpression>
</textField>
Пример отчёта, использующего шаблон JasperReports, доступен в разделе Примеры отчётов.
Если ваше приложение развернуто в the UberJAR, чтобы запустить JasperReports из UberJAR, сделайте следующее:
|