3

JasperReports 4.5.0を使用してレポートを生成しています。html、csv、pdf、xls、doc などのさまざまな形式でレポートを生成しています。私のレポートの 1つには、col1、col2、col3、col4、col5、col6という 6 つの列があります。しかし、条件に基づいて、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 APIまたはDynamicJasper APIを使用できます

DynamicJasper APIを使用したサンプルは次のとおりです。

  • 2 つのフィールド (2 列) を表示する代わりに、1 列のデータを表示するために「偽の」フィールド ( textField ) を使用できます。

両方のtextFieldsの下に別のtextField (2 つのtextFieldsの幅を持つ) を配置できます。printWhenExpressionプロパティを使用すると、2 つの列または 1 つの列を表示できます。

これが作業サンプルです。

これが私のレポートのデザインです(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>

3 つの列すべてを表示するには、hideStreetColumnパラメータをfalseに設定する必要があります。結果は次のようになります。

すべての列が表示されます

2 つの列のみを表示するには (Street 列は非表示)、hideStreetColumnパラメーターをtrueに設定する必要があります。結果は次のようになります。

通りの列が隠れています

于 2012-09-03T10:12:12.720 に答える
1

2 つの詳細バンドでそれをだますことができます。1 つの詳細バンド B1 は 6 列で、2 番目のバンド B2 は 5 列です。次に、バンド プロパティで、printWhenExpression が false の場合は B1 を出力し、printWhenExpression が true の場合は B2 を出力します。

于 2013-11-08T06:47:59.147 に答える