当子报表中给定的参数$ P {}太大而无法放入页面时,我正在修复Jasper-Report无法打印第一页的问题。
该报告非常简单。具有标题,页面标题,页码,仅包含几个textFields(用户名,日期,类别...)和数据表的子报表的单个模板页面。对于每个打印页面都将重复使用此模板,直到所有表格行都被打印为止。唯一的例外是仅在第一页上打印的子报表。这是通过将 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 作为鉴别符的使用毫无用处。有没有另一种方法可以只在第一次出现时打印子报表?