如何拉伸jasperreports子报表以适合父高度

时间:2016-10-22 11:32:11

标签: jasper-reports subreport stretch

是否可以使用jasperrepors textfileds实现类似rowSpan的东西?

我有两个报告:主报告和子报告。

在主要细节范围内,我有textfield和subreport:

<band height="15" splitType="Stretch">
<property name="com.jaspersoft.studio.unit.height" value="pixel"/>
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
    <reportElement style="cell" stretchType="RelativeToBandHeight"
                   x="20" y="0" width="200" height="15"
                   isPrintWhenDetailOverflows="true"/>
    <textElement textAlignment="Center" verticalAlignment="Middle">
        <font fontName="DejaVu Sans" size="7" isBold="true"/>
        <paragraph leftIndent="1" rightIndent="1" spacingBefore="1"
                   spacingAfter="1"/>
    </textElement>
    <textFieldExpression><![CDATA[$F{org_name}]]></textFieldExpression>
</textField>
<subreport>
    <reportElement stretchType="RelativeToTallestObject" x="220" y="0"
                   width="582" height="15" isPrintWhenDetailOverflows="true">
        <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
    </reportElement>
    <subreportParameter name="SUBREPORT_DIR">
        <subreportParameterExpression>
            <![CDATA[$P{SUBREPORT_DIR}]]>
        </subreportParameterExpression>
    </subreportParameter>
    <dataSourceExpression><![CDATA[$F{EDU_LEVEL_DATASOURCE}]]></dataSourceExpression>
    <subreportExpression>
        <![CDATA[$P{SUBREPORT_DIR}
                 + "/reports/scholarship_fund_analysis/sub_education_level.jasper"]]>
    </subreportExpression>
</subreport>

在子报告的详细信息频段中有一个文本字段。

目的是在主报表中为“org_name”textField实现类似rowSpan的操作。当子报表包含大量内容时,它可以正常工作。

当org_name太长而子报表有很少行时会出现问题。 org_name文本字段的高度大于子报表的总高度。在子报告下有空白空间,直到下一行主报告。

结果报告如下所示:

textfield and subreport

1 个答案:

答案 0 :(得分:0)

提示:将包含第一列文本的参数从报表传递到子报表。 在子报表中,使用字体颜色#FFFFFF(白色)在背景带中显示此参数。

怎么做

我的报告结构: how it looks before

第一栏是主报告($ F {daysLabel})。子报告中的第二和第三列。

在主报表中创建参数(选择子报表,1,然后编辑参数,2,如下所示)

how enter a parameter

(我的声望不到10分,我可能不会放更多的图片链接,所以没有更多的图片。)

在打开的窗口中输入参数名称(让我们说 toto ),在表达式下输入保存列值的变量,在我的情况下为$ F { daysLabel}。

在子报表中,您可以创建一个与您在主报表中创建的参数同名的参数( toto ),并在背景波段中显示该参数。将拉伸溢出条件设置为true。在我的情况下这是好的,因为第一列的宽度完全适合我的子报告。也许在你的情况下,你可能需要做一个特殊的调整&#34;。

将颜色字体设置为白色,您将看到子报表的延伸程度与主报表的第一列相同。 至于子报告中单元格的边框,请将bottomPen设置为0:

&#13;
&#13;
<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
&#13;
&#13;
&#13;

这样只有上边框可见。

主报告中,使用包含所有4个边框的框架包围子报表。

我的评论(如果你介意的话):我认为这是一种令人讨厌的方式。与此同时,我相信碧玉的引擎从最里面的子报告呈现到最外层,即主要报告。一旦使用最外层报告完成jasper,它就不会重新呈现内部报告以调整到最外层。我已尝试使用除 Now Auto 之外的评估时间,但文本字段不再延伸。我还在主报告和子报告中尝试了不同的拉伸类型而没有运气。这是我能想出的唯一解决方案。

我很高兴看到有些人能够更清楚地解决这个问题。