Достижение такого рода макет с структура данных вы показали, как правило, осуществляется с помощью подотчет (или список/таблица компонент)
структура будет:
Общий отчет, итерация на всех x
включают subreport 1
для y
и z
, передавая List<Y> list
в качестве источника данных.
подотчет 1, итерация на всех y
включает в себя subreport 2
для z
передавая List<Z> list
как источник данных.
Subreport 2, повторить все z
.
Чтобы создать источник данных JRBeanCollectionDataSource может служить вам хорошо пример new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{list})
Для достижения этой цели RowSpan использовать атрибут stretchType
на reportElement
(RelativeToBandHeight или RelativeToTallestObject)
Пример
<textField>
<reportElement stretchType="RelativeToTallestObject" x="0" y="0" width="100" height="20" uuid="bf6b550c-f37d-4e10-b8dd-1d91c4e6905a"/>
<textElement verticalAlignment="Middle"/>
<font size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{x}]]></textFieldExpression>
</textField>
Вам не нравятся подзаголовки, для одной структуры уровня может использоваться компонент <jr:list>
, см. samples
Компонент HTML работает до тех пор, пока ваш контент не должен разбиваться на несколько страниц. Если вы игнорируете разбиение на страницы и всегда нацеливаете экспорт HTML, вы должны быть в порядке. Но как только мы говорим о форматах PDF или других страниц, компонент HTML начинает демонстрировать свои зубы. Мы фактически создали этот компонент, чтобы продемонстрировать свои ограничения в этих ситуациях. –