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, сделайте следующее:

  • Скопируйте файлы jasperreports-.jar и yarg-.jar в каталог uber JAR,

  • Создайте файл jasperreports.properties в каталоге uber JAR,

  • Добавьте в него свойство net.sf.jasperreports.compiler.classpath с именами скопированных JAR-файлов в качестве значения, к примеру:

net.sf.jasperreports.compiler.classpath = jasperreports-6.4.1.jar;yarg-2.0-SNAPSHOT.jar