有没有一种方法可以只打印Jasper-Report中子报告的首次出现?

时间:2019-01-03 12:26:55

标签: java xml jasper-reports overflow

当子报表中给定的参数$ 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 作为鉴别符的使用毫无用处。有没有另一种方法可以只在第一次出现时打印子报表?

0 个答案:

没有答案