我正在使用 JasperReports 4.5.0 来生成报告。我正在生成不同格式的报告,如html,csv,pdf,xls,doc。在我的一份报告中,我有6列说 col1,col2,col3,col4,col5,col6 。但根据条件我想隐藏 col4 。为此,我使用 printWhenExpression 。现在它根据条件隐藏了列,但问题是该列占用的空间保持不变。
如何删除 col3 和 col5 之间的空白区域?
以下代码用于了解我如何使用它。
<staticText>
<reportElement x="500" y="0" width="0" height="20" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true">
<printWhenExpression><![CDATA[$P{routeType}==Boolean.FALSE]]></printWhenExpression>
</reportElement>
<box>
<topPen lineWidth="0.25"/>
<leftPen lineWidth="0.25"/>
<bottomPen lineWidth="0.25"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="12" isBold="true"/>
</textElement>
<text><![CDATA[Col4]]></text>
</staticText>
<textField isBlankWhenNull="true">
<reportElement x="500" y="0" width="0" height="20" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true">
<printWhenExpression><![CDATA[$P{routeType}==Boolean.FALSE]]></printWhenExpression>
</reportElement>
<box>
<leftPen lineWidth="0.25"/>
<bottomPen lineWidth="0.25"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{col4}]]></textFieldExpression>
</textField>
仅当routeType值为false时,才会打印此字段。否则,它也应删除具有空白空间的列。
答案 0 :(得分:1)
Here is使用 DynamicJasper API
的示例您可以在 textFields 下放置另一个 textField (宽度为两个 textFields )。使用 printWhenExpression 属性,您可以显示两列或一列。
这是我的报告设计(在 iReport 中):
我的 jrxml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ..>
<parameter name="hideStreetColumn" class="java.lang.Boolean">
<defaultValueExpression><![CDATA[false]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT id, street, city FROM address]]>
</queryString>
<field name="ID" class="java.lang.Integer"/>
<field name="STREET" class="java.lang.String"/>
<field name="CITY" class="java.lang.String"/>
<title>
<band height="79" splitType="Stretch">
<staticText>
<reportElement x="139" y="13" width="279" height="20"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font isBold="true" isItalic="true"/>
</textElement>
<text><![CDATA[Sample of hiding column]]></text>
</staticText>
<textField>
<reportElement x="189" y="33" width="211" height="20"/>
<box leftPadding="10"/>
<textElement/>
<textFieldExpression><![CDATA["To hide Street column: " + $P{hideStreetColumn}]]></textFieldExpression>
</textField>
</band>
</title>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement x="100" y="0" width="200" height="20">
<printWhenExpression><![CDATA[$P{hideStreetColumn}]]></printWhenExpression>
</reportElement>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="20">
<printWhenExpression><![CDATA[!$P{hideStreetColumn}]]></printWhenExpression>
</reportElement>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$F{STREET}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="200" y="0" width="100" height="20">
<printWhenExpression><![CDATA[!$P{hideStreetColumn}]]></printWhenExpression>
</reportElement>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
要显示所有三列,我们应将 hideStreetColumn 参数设置为 false 。结果将是:
要仅显示两列(街道列隐藏),我们应将 hideStreetColumn 参数设置为 true 。结果将是:
答案 1 :(得分:0)
你可以用两个细节乐队来欺骗它。一个细节带B1具有6列,第二带B2具有5列。然后在带属性中,当printWhenExpression为false时打印B1,当printWhenExpression为true时打印B2。