我需要使用3种类型的页眉来启用报告:“第一页标题”,“中间页面标题”和“最后页标题”。所有这些标题可以具有不同数量的报告元素并且位于不同的位置。同样适用于页脚。
注意:报告必须支持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
频段为页脚实现类似的逻辑!
答案 0 :(得分:2)
首先:$V{PAGE_COUNT}
是
生成当前页面时处理的记录数 。因此,您在页面中拥有的记录数量,而不是页码数...
在pageFooter
和lastPageFooter
reportElement
可以有负Y 坐标(如果IDE不允许这样,那么您需要手动编辑jrxml)es 。 y =&#34; -700&#34;,它允许您将信息放在pageHeader和lastHeader中......
第一页
在框架中使用:
<printWhenExpression><![CDATA[new Boolean($V{PAGE_NUMBER}.intValue()==1)]]></printWhenExpression>
title
频段或在pageFooter
中放置框架并使用负y坐标。pageFooter
band
MIDDLE PAGE
关于框架使用:
<printWhenExpression><![CDATA[new Boolean($V{PAGE_NUMBER}.intValue()>1)]]></printWhenExpression>
pageFooter
并使用负y坐标。pageFooter
band。
最后一页
lastPageFooter
并使用负y坐标。lastPageFooter
band
注意:为此虚拟页面生成空间头部包含一个带有所需波段高度的空pageHeader
玩得开心!