3.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, доступен в разделе Примеры отчетов.
Tip
|
Если ваше приложение развернуто в the UberJAR, чтобы запустить JasperReports из UberJAR, сделайте следующее:
|