1

要件:

firstNamelastNameが空でない場合。これを x=125、y=3 座標で表示します。そして、x="125" y="26" 座標でそれまでのアドレスを表示します。これはうまくいっています。

問題: firstName/lastName が空の場合、住所要素を上に移動し、x=125、y=3 座標自体に表示する必要があります。

これは私が立ち往生しているところです。私を助けてください。

以下の jrxml ファイルを参照してください。

<frame>
    <reportElement key="frame-462" positionType="Float" mode="Transparent" x="0" y="50" width="390" height="70"/>
    <textField isStretchWithOverflow="true" isBlankWhenNull="true" evaluationTime="Now">
        <reportElement key="textField-844" positionType="Float" mode="Transparent" x="125" y="3" width="264" height="23"
                       isPrintWhenDetailOverflows="true" isRemoveLineWhenBlank="true">
            <printWhenExpression><![CDATA[(!$F{firstName}.isEmpty() && !$F{lastName}.isEmpty())]]></printWhenExpression>
        </reportElement>
        <textElement markup="styled">
            <font fontName="Verdana" size="12"/>
        </textElement>
        <textFieldExpression>
            <![CDATA[$F{firstName} +  "<style pdfFontName='Helvetica-Oblique' size='11'>" + $F{lastName} + "</style>"]]></textFieldExpression>
    </textField>
    <textField isStretchWithOverflow="true" isBlankWhenNull="true" evaluationTime="Now">
        <reportElement key="textField-843" mode="Transparent" positionType="Float" x="125" y="26" width="264"
                       height="42" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true"/>
        <textElement markup="html">
            <font fontName="Verdana" size="12"/>
        </textElement>
        <textFieldExpression><![CDATA[$F{address}]]></textFieldExpression>
    </textField>
    <staticText>
        <reportElement key="staticText-1249" positionType="Float" x="2" y="2" width="108" height="21"
                       isRemoveLineWhenBlank="true"/>
        <textElement textAlignment="Left">
            <font fontName="Verdana" size="12" isBold="false" pdfFontName="Helvetica-Bold"/>
        </textElement>
        <text><![CDATA[ Address:]]></text>
    </staticText>
</frame>
4

1 に答える 1

3

属性はすでに設定されていisRemoveLineWhenBlankます。これにより、 によって残された空のスペースが削除されますtextField。ただし、JasperReports は、そのスペースが完全にクリアされていない限り、垂直スペースを折りたたむことはできません。同じ行(あなたの場合はstaticText要素)を占める別の要素がある場合、空のスペースは保持されます。これは、テトリスを逆再生するのと少し似ています。ラインが消える前に、すべてのブロックを取り除く必要があります。

レポート要素をフレームに配置すると、この動作がわずかに変更されます。レポート全体の幅ではなく、明確にする必要があるのは親フレームの幅だけです。したがって、名前フィールドと住所フィールドを別のフレームに入れると、名前フィールドが占めるスペースが、静的テキストと水平方向に整列しているにもかかわらず、折りたたまれる可能性があります。これを示すためにコード スニペットを変更しました。

<frame>
    <reportElement key="frame-462" positionType="Float" mode="Transparent" x="0" y="50" width="390" height="70"/>
    <frame>
        <reportElement x="126" y="0" width="264" height="70"/>
        <textField isStretchWithOverflow="true" isBlankWhenNull="true" evaluationTime="Now">
            <reportElement key="textField-844" positionType="Float" mode="Transparent" x="0" y="3" width="264" height="23" isPrintWhenDetailOverflows="true" isRemoveLineWhenBlank="true">
                <printWhenExpression><![CDATA[(!$F{firstName}.isEmpty() && !$F{lastName}.isEmpty())]]></printWhenExpression>
            </reportElement>
            <textElement markup="styled">
                <font fontName="Verdana" size="12"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{firstName} +  "<style pdfFontName='Helvetica-Oblique' size='11'>" + $F{lastName} + "</style>"]]></textFieldExpression>
        </textField>
        <textField isStretchWithOverflow="true" isBlankWhenNull="true" evaluationTime="Now">
            <reportElement key="textField-843" mode="Transparent" positionType="Float" x="0" y="26" width="264" height="42" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true"/>
            <textElement markup="html">
                <font fontName="Verdana" size="12"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{address}]]></textFieldExpression>
        </textField>
    </frame>
    <staticText>
        <reportElement key="staticText-1249" positionType="Float" x="2" y="2" width="108" height="21" isRemoveLineWhenBlank="true"/>
        <textElement textAlignment="Left">
            <font fontName="Verdana" size="12" isBold="false" pdfFontName="Helvetica-Bold"/>
        </textElement>
        <text><![CDATA[ Address:]]></text>
    </staticText>
</frame>
于 2013-04-03T09:55:19.263 に答える