2016-10-22 44 views
0

是否有可能实现类似rowSpan与jasperrepors textfileds?如何拉伸jasperreports子报表,以适应父母身高

我有两个报告:main和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

[Jasper report split type]可能的重复(http://stackoverflow.com/questions/39725089/jasper-report-split-type)&[如何增加子报表的textField高度作为主报表的textField的高度?] (http://stackoverflow.com/q/38767084/876298) –

回答

0

理念:含第一列的文本从报表传递参数,以子报表。 在子报表中,在背景带中显示此参数,字体颜色为#FFFFFF(白色)。

怎么办呢

我的报告结构: how it looks before

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

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

how enter a parameter

(I具有小于10分的声誉,我可以不把)

在打开的窗口中输入参数名称(假设为toto)并且在表达式下,输入保存列值的变量,在我的情况下为$ ˚F{daysLab埃尔}。

在报表创建具有相同的名称,你只是在主报告(TOTO)中创建一个参数,以及要在背景带显示。将拉伸溢出条件设置为true。在我的情况下,这是可以的,因为第一列的宽度完全符合我的子报告witdh。也许在你的情况下,你可能需要做一个“特殊调整”。

将颜色字体设置为白色,您会看到您的子报表拉伸与主报表的第一列一样多。 至于你的细胞在报表边界,设置bottomPen以0:

<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"/>

,使得只有上边界是可见的。

在您的主要报告中,围绕您的子报告使用具有全部4个边框的框架。

我的评论(如果你介意):我认为这是一种讨厌的方式。同时,我相信碧玉的引擎会从最内层的子报表渲染到最外层,即主报告。一旦jasper完成最外层的报告,它不会重新渲染内层报告以调整到最外层。我已经与评估时间尝试了其他比现在自动但文本字段不要再舒展。我也在主要和子报告中尝试了不同的弹力类型,但没有运气。这是我能想出的唯一解决方案。

我会很高兴地看到,如果一些已经得到了一个更清洁的解决了这个问题。