3

我正在使用JasperReports 4.5.0来生成报告。我正在生成不同格式的报告,如 html、csv、pdf、xls、doc。在我的一份报告中,我有 6 列说col1, col2, col3, col4, col5, col6。但根据我想隐藏col4的条件。为此,我正在使用printWhenExpression。现在它根据条件隐藏列,但问题是该列占用的空间保持不变。

如何删除col3col5之间的这个空白空间?

下面的代码是为了了解我是如何使用它的。

<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 时才会打印此字段。否则,它也应该删除带有空格的列。

4

2 回答 2

2
  • 您可以使用JasperReports APIDynamicJasper API

这是使用DynamicJasper API的示例

  • 您可以使用“假”字段(textField)来显示一列的数据,而不是显示两个字段(两列)

您可以在两个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。结果将是:

街头栏目隐藏

于 2012-09-03T10:12:12.720 回答
1

你可以用两个细节带来欺骗它。一个细节带 B1 有 6 列,第二个带 B2 有 5 列。然后在带属性中,当 printWhenExpression 为假时打印 B1,当 printWhenExpression 为真时打印 B2。

于 2013-11-08T06:47:59.147 回答