Jasper报表分组isStartNewPage=true不生效问题咨询
解决Jasper报表每个分组单独分页的问题
嘿,刚好我对Jasper的分组分页熟得很!你已经按purchaserId完成分组了,要实现每个分组单独占一页其实只需要给分组加个属性就行,超简单。
核心修改:给分组添加分页属性
找到你报表里的<group name="RECORDS_PER_PURCHASER"...>标签,只需要加上isStartNewPage="true"这个属性,就能强制每个分组从新页面开始渲染。如果还想让每个分组的页码从1重新计数,再加上isResetPageNumber="true"就可以了。
修改后的分组代码大概是这样:
<group name="RECORDS_PER_PURCHASER" isStartNewPage="true" isResetPageNumber="true"> <groupExpression><![CDATA[$F{purchaserId}]]></groupExpression> <!-- 这里是你的分组头、分组尾内容 --> </group>
属性解释
isStartNewPage="true":告诉Jasper,每当新的分组开始时,自动跳转到新页面isResetPageNumber="true":可选属性,如果需要每个分组的页码从1开始算,就加上它;不需要的话删掉就行
完整代码示例(结合你的子数据集)
把修改融入到你现有的子数据集代码里,大概是这样:
<subDataset name="currentDuesDataSet"> <field name="memberId" class="java.lang.Integer"/> <field name="purchaserId" class="java.lang.Integer"/> <!-- 其他字段定义 --> <group name="RECORDS_PER_PURCHASER" isStartNewPage="true"> <groupExpression><![CDATA[$F{purchaserId}]]></groupExpression> <!-- 分组头:显示当前分组的采购方信息 --> <groupHeader> <band height="40"> <textField> <reportElement x="10" y="10" width="300" height="20"/> <textFieldExpression><![CDATA["采购方ID:" + $F{purchaserId}]]></textFieldExpression> </textField> </band> </groupHeader> <!-- 分组尾(可选):可以加一些汇总或分隔线 --> <groupFooter> <band height="25"> <line> <reportElement x="0" y="0" width="555" height="1"/> </line> </band> </groupFooter> </group> </subDataset>
额外注意事项
- 如果发现分组头和第一条记录被拆分到不同页面,可以给分组头的
<band>标签加上keepWithDetail="true",确保分组头和详情内容在同一页 - 确保表格的
isSplitAllowed属性是true(默认就是true),不然可能会阻止正常分页
这样调整后,每个purchaserId对应的分组就会单独显示在一页上啦!
内容的提问来源于stack exchange,提问作者Vallabh Lakade
相关产品推荐
相关产品推荐

