我目前正在使用 Jaspersoft Studio(版本 5.6.2.final)创建 PDF 文档。我目前遇到了一个问题,我可以使用一些帮助。
我有一份包含 3 个子报告的主报告。每个子报表都是完整的文档,具有自己的标题、详细信息和(最后)页脚带。每个子报表都是在它们自己的带有分页符的详细信息带中创建的,因此它们每个子报表都从一个新页面开始。到目前为止,没有任何问题。
现在客户希望在文档中特定位置的每一页上都有一个页码,该位置对应于每个子报表标题的特定部分。见下图:
页码位置 http://puu.sh/dAZzg/edaa1285c4.png
我所做的是在包含 pageNumber 的主报告中创建一个 pageHeader。然后我给每个子报表一个负的 y 坐标,所以它们在 pageHeader 上滑动,从而在正确的位置打印 pageNumber。这部分有效。
<pageHeader>
<band height="159">
<property name="local_mesure_unitheight" value="cm"/>
<textField>
<reportElement x="483" y="145" width="31" height="14" uuid="f512ea15-2e4b-4c63-bf92-61b990d9c461">
<property name="local_mesure_unitheight" value="cm"/>
<property name="com.jaspersoft.studio.unit.height" value="cm"/>
<property name="local_mesure_unity" value="cm"/>
<property name="com.jaspersoft.studio.unit.y" value="cm"/>
</reportElement>
<textElement textAlignment="Left">
<font fontName="Amerigo BT"/>
</textElement>
<textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
</band>
</pageHeader>
<detail>
<band height="83" splitType="Stretch">
<property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
<subreport>
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="-56" y="-175" width="573" height="83" uuid="5e4141a0-ac50-485a-8269-40b607c67466">
<property name="local_mesure_unity" value="cm"/>
<property name="com.jaspersoft.studio.unit.y" value="cm"/>
<property name="local_mesure_unitx" value="cm"/>
<property name="com.jaspersoft.studio.unit.x" value="cm"/>
</reportElement>
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("//idbfyl:fiscalYearReportLetter")]]></dataSourceExpression>
<subreportExpression><![CDATA["FiscalYearReportLetter.jasper"]]></subreportExpression>
</subreport>
</band>
<band height="83" splitType="Stretch">
<break>
<reportElement x="0" y="0" width="513" height="1" uuid="43e0cd6d-cc0b-4ce9-ae2f-0d8d2b498896"/>
</break>
<subreport>
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="-56" y="-175" width="573" height="70" uuid="df524b80-9db1-43b7-9c45-3b8ea21c8081">
<property name="local_mesure_unity" value="cm"/>
<property name="com.jaspersoft.studio.unit.y" value="cm"/>
</reportElement>
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("//idbfyvr:fiscalYearValueReport")]]></dataSourceExpression>
<subreportExpression><![CDATA["FiscalYearValueReport.jasper"]]></subreportExpression>
</subreport>
</band>
<band height="83" splitType="Stretch">
<break>
<reportElement x="0" y="0" width="513" height="1" uuid="bcddb440-2fdd-49c2-98cc-7978260c8d34"/>
</break>
<subreport>
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="-56" y="-175" width="573" height="70" isRemoveLineWhenBlank="true" isPrintInFirstWholeBand="true" uuid="df524b80-9db1-43b7-9c45-3b8ea21c8081">
<property name="local_mesure_unity" value="cm"/>
<property name="com.jaspersoft.studio.unit.y" value="cm"/>
</reportElement>
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("//ibdfyir:fiscalYearIncomeReport")]]></dataSourceExpression>
<subreportExpression><![CDATA["FiscalYearIncomeReport.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
子报表的每一页都打印在正确的位置,但在第一页之后的每一页上,子报表都打印在 pageHeader 下方,似乎负 y 坐标重置为 0。
有没有办法强制子报表的每一页从相同的负 y 坐标开始,或者有另一种方法来实现我需要的吗?
干杯,瑞克
PS。示例图片从第 2 页开始,因为第一个子报表仅包含 1 页。我还从屏幕截图中删除了敏感数据,所以不要担心你看到的空白。