Я исправляю Jasper-Report, не позволяющий печатать первую страницу, когда заданный параметр $ P {} в подотчете слишком велик, чтобы поместиться на странице.
Отчет довольно прост,Одна страница шаблона с заголовком, заголовком страницы, номером страницы, вложенным отчетом с несколькими текстовыми полями (имя пользователя, дата, категория ...) и данными.Этот шаблон повторяется для каждой напечатанной страницы, пока не будут напечатаны все строки таблицы.Единственным исключением является подотчет, который печатается только на первой странице.Это было сделано с помощью printWhenExpression , установленной в "$ V {PAGE_NUMBER} == 1", что, кажется, является приемлемым решением везде, куда я смотрю.
Это определение подотчета:
<subreport>
<reportElement
positionType="Float"
stretchType="RelativeToTallestObject" x="5" y="67" width="160" height="13" isPrintInFirstWholeBand="true"
isPrintWhenDetailOverflows="true"
uuid="33028395-a759-4029-83de-17fb8465fc3b">
<printWhenExpression><![CDATA[$V{PAGE_NUMBER}==1]]></printWhenExpression>
</reportElement>
<subreportParameter name="username">
<subreportParameterExpression><![CDATA[$P{username}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="startdate">
<subreportParameterExpression><![CDATA[$P{startdate}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="enddate">
<subreportParameterExpression><![CDATA[$P{enddate}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="category">
<subreportParameterExpression><![CDATA[$P{category}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="selectedareas">
<subreportParameterExpression><![CDATA[$P{selectedareas}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="contract">
<subreportParameterExpression><![CDATA[$P{contract}]]></subreportParameterExpression>
</subreportParameter>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "userdata.jasper"]]></subreportExpression>
</subreport>
Проблема в том, что, когда параметр подотчета $ P {selectedAreas} слишком велик, чтобы уместиться на одной странице, Jasper просто отображает пустую первую страницу.Ни с чем, без заголовков страниц, ничего.Вторая страница и далее появляются как раз справа.
Если мы удалим $ V {PAGE_NUMBER} == 1 , будет выдано это сообщение об ошибке:
net.sf.jasperreports.engine.JRRuntimeException: бесконечный циклсоздание новой страницы из-за переполнения заголовка страницы.
Это связано с подотчетом, использующим 2 страницы, что делает использование printWhenExpression в качестве дискриминатора бесполезным.Есть ли другой способ распечатать подотчет только для первого появления?