如何在jasper报告中的最后页和中间页上启用不同的页眉?

时间:2015-12-09 15:55:05

标签: jasper-reports

我需要使用3种类型的页眉来启用报告:“第一页标题”,“中间页面标题”和“最后页标题”。所有这些标题可以具有不同数量的报告元素并且位于不同的位置。同样适用于页脚。

enter image description here

注意:报告必须支持Detail频段中的 jr:table jr:list 等报告元素。必须通过xml数据源为这些元素提供数据。

我能够使用Title频段模拟第一页标题,但是我在启用“中间页面标题”和“最后页面标题”时遇到了问题。这就是我想要做的事情:

<pageHeader>
<band height="100" splitType="Stretch">
    <frame>
        <reportElement x="0" y="0" height="100" width="555" uuid="f788c74b-6853-4bc7-8ed7-5e3d538287c9" isRemoveLineWhenBlank="true">
            <printWhenExpression>
                <![CDATA[new Boolean($V{PAGE_NUMBER} == $V{PAGE_COUNT})]]>
            </printWhenExpression>
        </reportElement>
        <staticText>
            <reportElement x="1" y="1" width="100" height="20" uuid="9777208b-5323-4045-aa49-a849d5c00c89"/>
            <text><![CDATA[LAST PAGE HEADER TEXT 1]]></text>
        </staticText>
        <staticText>
            <reportElement x="50" y="10" width="200" height="50" uuid="15313676-09e6-4d17-ac75-2df99f61bfee"/>
            <text><![CDATA[LAST PAGE HEADER TEXT 2]]></text>
        </staticText>
    </frame>
    <frame>
        <reportElement x="0" y="0" height="100" width="555" uuid="65577abd-8717-477a-f27e-c70e9eba46af" isRemoveLineWhenBlank="true">
            <printWhenExpression>
                <![CDATA[new Boolean($V{PAGE_NUMBER} != 1) && new Boolean($V{PAGE_NUMBER} != $V{PAGE_COUNT})]]>
            </printWhenExpression>
        </reportElement>
        <staticText>
            <reportElement x="70" y="0" width="300" height="100" uuid="0a866eb3-85cf-4376-d6a4-21b534d36df0"/>
            <text><![CDATA[MIDDLE PAGE HEADER TEXT 1]]></text>
        </staticText>
    </frame>
</band>
</pageHeader>

我正在使用frame块以及printWhenExpression。根据{{​​1}}条件,只应打印两个printWhenExpression块中的一个(包含其所有内容)。第一个帧块应该呈现“最后页面标题”,第二个帧应该呈现“中间页面标题”。

问题在于第一个frame(“最后一页标题”)frame

printWhenExpression

在这种情况下,由于评估时间的原因,<printWhenExpression> <![CDATA[new Boolean($V{PAGE_NUMBER} == $V{PAGE_COUNT})]]> </printWhenExpression> 始终等于$V{PAGE_NUMBER}

有没有办法检查当前页面是否是最后一页?另外,还有其他方法可以启用“中间页面”和“最后一页”标题吗?

注意:我可以使用$V{PAGE_COUNT}frames频段为页脚实现类似的逻辑!

1 个答案:

答案 0 :(得分:2)

首先:$V{PAGE_COUNT}

  

生成当前页面时处理的记录数 。因此,您在页面中拥有的记录数量,而不是页码数...

pageFooterlastPageFooter reportElement可以有负Y 坐标(如果IDE不允许这样,那么您需要手动编辑jrxml)es 。 y =&#34; -700&#34;,它允许您将信息放在pageHeader和lastHeader中......

第一页

在框架中使用:

<printWhenExpression><![CDATA[new Boolean($V{PAGE_NUMBER}.intValue()==1)]]></printWhenExpression>
  • pageHeader 使用title频段或在pageFooter中放置框架并使用负y坐标。
  • pageFooter ,使用pageFooter band


MIDDLE PAGE

关于框架使用:

<printWhenExpression><![CDATA[new Boolean($V{PAGE_NUMBER}.intValue()>1)]]></printWhenExpression>
  • pageHeader 将框架放入pageFooter并使用负y坐标。
  • pageFooter ,请使用pageFooter band。


最后一页

  • pageHeader ,将框架放入lastPageFooter并使用负y坐标。
  • pageFooter ,使用lastPageFooter band


注意:为此虚拟页面生成空间头部包含一个带有所需波段高度的空pageHeader

玩得开心!