Jasper reports 包含多个列的报告:如何在每个列中重新打印组标题?

Jasper reports 包含多个列的报告:如何在每个列中重新打印组标题?,jasper-reports,Jasper Reports,我正在使用JasperReports 4.7.1创建一个每页2列的报告 当属于一个组的记录跨越多个列时,我不仅要在组的开头打印标题,还要在每列的开头打印标题 使用组属性中的重印页眉(IsReprinReaderOnePage属性),可以在每页的开头打印页眉。但在新专栏的开头,我仍然找不到同样的方法 我怎样才能做到这一点 当前报告页面的屏幕截图 我想要实现的目标(注意第二列中的标题) 我遇到了一个与您类似的问题,我设法解决了这个问题,添加了一个ColumnHeader栏,并且只在我的两栏报告的第

我正在使用JasperReports 4.7.1创建一个每页2列的报告

当属于一个组的记录跨越多个列时,我不仅要在组的开头打印标题,还要在每列的开头打印标题

使用组属性中的重印页眉IsReprinReaderOnePage属性),可以在每页的开头打印页眉。但在新专栏的开头,我仍然找不到同样的方法

我怎样才能做到这一点

当前报告页面的屏幕截图

我想要实现的目标(注意第二列中的标题)


我遇到了一个与您类似的问题,我设法解决了这个问题,添加了一个ColumnHeader栏,并且只在我的两栏报告的第二栏显示它

重要的是将IsReprinReaderOneachPage设置为true,并使groupHeader和columnHeader的高度相同,这样我的解决方案才能正常工作

以下是相关代码(当然,您可以用适当的组表达式替换“电话号码”:

<group name="telephoneNumberGroup" isStartNewPage="true" isReprintHeaderOnEachPage="true">
    <groupExpression><![CDATA[$F{telephoneNumber}]]></groupExpression>
    <groupHeader>
        <band height="17">
            <textField>
                <reportElement positionType="Float" x="5" y="0" width="170" height="15" uuid="5e8b892b-f907-4907-9c6d-4419e57325e5"/>
                <textElement verticalAlignment="Middle">
                    <font fontName="Arial" size="6" isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{telephoneNumber}]]></textFieldExpression>
            </textField>
        </band>
    </groupHeader>
</group>
<columnHeader>
    <band height="17">
        <printWhenExpression><![CDATA[$V{COLUMN_NUMBER} == 2]]></printWhenExpression>
        <textField>
            <reportElement positionType="Float" x="5" y="0" width="170" height="15" uuid="5e8b892b-f907-4907-9c6d-4419e57325e5"/>
            <textElement verticalAlignment="Middle">
                <font fontName="Arial" size="6" isBold="true"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{telephoneNumber}]]></textFieldExpression>
        </textField>
    </band>
</columnHeader>

我遇到了一个与您类似的问题,我通过添加一个ColumnHeader条带并仅在我的两栏报告的第二栏显示它,成功地解决了这个问题

重要的是将IsReprinReaderOneachPage设置为true,并使groupHeader和columnHeader的高度相同,这样我的解决方案才能正常工作

以下是相关代码(当然,您可以用适当的组表达式替换“电话号码”:

<group name="telephoneNumberGroup" isStartNewPage="true" isReprintHeaderOnEachPage="true">
    <groupExpression><![CDATA[$F{telephoneNumber}]]></groupExpression>
    <groupHeader>
        <band height="17">
            <textField>
                <reportElement positionType="Float" x="5" y="0" width="170" height="15" uuid="5e8b892b-f907-4907-9c6d-4419e57325e5"/>
                <textElement verticalAlignment="Middle">
                    <font fontName="Arial" size="6" isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{telephoneNumber}]]></textFieldExpression>
            </textField>
        </band>
    </groupHeader>
</group>
<columnHeader>
    <band height="17">
        <printWhenExpression><![CDATA[$V{COLUMN_NUMBER} == 2]]></printWhenExpression>
        <textField>
            <reportElement positionType="Float" x="5" y="0" width="170" height="15" uuid="5e8b892b-f907-4907-9c6d-4419e57325e5"/>
            <textElement verticalAlignment="Middle">
                <font fontName="Arial" size="6" isBold="true"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{telephoneNumber}]]></textFieldExpression>
        </textField>
    </band>
</columnHeader>


是否要使用组标题中的信息将属于单个组并打印在详细栏中的数据拆分?是否可以发布图片(截图)为了说明您当前的设计和目标设计?我无法发布任何屏幕截图。如果我尝试解释,组标题包含应作为显示的表标题打印的标签。当组更改时,将打印一个新表。该表的记录显示在详细信息栏中。该表可能跨越2个报告列。在在第一列报告中,会打印标题,因为这是组的起始位置。我要做的是在第二列的起始位置也打印标题。Thanks@AlexK我已经附上了截图。感谢你在这方面的帮助。最后我有了你的问题:)您可以尝试自定义net.sf.jasperreports.engine.fill.JRHorizontalFiller类方法-亚历克斯K 14分钟ago@AlexK我已经设法想出了一个解决办法。我创建了一个报表变量来计算列中的记录。然后在打印时使用它,当header元素的表达式时。count==1表示我们位于列的顶部。这不是一个合适的解决方案(而且很乏味)因为所有的标题元素都应该包含这个print when条件。我仍在测试它。如果这不能正常工作,那么修补类似乎是剩下的唯一解决方案。感谢您的帮助:)是否要使用组标题中的信息来断开属于单个组并在详细栏中打印的数据?你能发布图片(截图)来说明你当前和目标的设计吗?我无法发布任何截图。如果我尝试解释一下,组标题包含标签,这些标签应该作为显示的表的标题打印。当组更改时,将打印一个新表。表格的记录显示在详细信息栏中。此表可以跨越2个报告列。在第一个报告列中,打印标题,因为这是组的起点。我想做的是在第二栏的开头也打印出来。Thanks@AlexK我已经附上了截图。感谢您在这方面的帮助。最后我得到了您的问题:)您可以尝试自定义net.sf.jasperreports.engine.fill.JRHorizontalFiller类。查看FillGroupHeaderRepint(JRFillGroup,byte)方法–Alex K 14分钟ago@AlexK我设法想出了一个解决办法。我创建了一个报告变量来计算列中的记录。然后在打印页眉元素时使用它。Count==1表示我们位于列的顶部。这不是一个合适的解决方案(而且很乏味),因为所有的标题元素都应该包含这个打印条件。我还在测试。如果这不能正常工作,那么修补类似乎是剩下的唯一解决方案。谢谢你的帮助:)