How to remove extra space between textfield in JasperReports?

ε祈祈猫儿з 提交于 2020-01-08 22:15:56

问题


I have created three text field in Header. I have put parameter in all textField elements. When I'm not calling one of three parameter of three textField elements. It will show 2 textField elements. The problem now is there are space between the text fields.

How to remove the space?

This is my code:

<textField isBlankWhenNull="true">
    <reportElement x="0" y="18" width="555" height="35" isRemoveLineWhenBlank="true"/>
    <textElement textAlignment="Center">
        <font size="12"/>
    </textElement>
    <textFieldExpression><![CDATA[$P{daterangefrom}  && $P{daterangeto}  ?  "From ( " + $P{daterangefrom} + " - " + $P{daterangeto} + ")"
: $P{weeks}  && $P{monthy} && $P{yrs} ? "For week " + $P{weeks} +" "+ $P{monthy} +" "+ $P{yrs}
: $P{monthy}  && $P{yrs} ? "For monthly " +$P{monthy} +" "+ $P{yrs}
: $P{quarter}  &&  $P{yrs}  ? "For Quarter " + $P{quarter} +" "+$P{yrs}
: $P{yrs}  ? "For " + $P{yrs}
: null]]>
    </textFieldExpression>
</textField>

This is mine result:


回答1:


You can use 3 textField elements with isRemoveLineWhenBlank property set to true value.

The sample (jrxml file):

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport .. topMargin="0" bottomMargin="0">
    <parameter name="parameter1" class="java.lang.String">
        <defaultValueExpression><![CDATA[null]]></defaultValueExpression>
    </parameter>
    <parameter name="parameter2" class="java.lang.String">
        <defaultValueExpression><![CDATA[null]]></defaultValueExpression>
    </parameter>
    <parameter name="parameter3" class="java.lang.String">
        <defaultValueExpression><![CDATA[null]]></defaultValueExpression>
    </parameter>
    <title>
        <band height="102" splitType="Stretch">
            <textField isBlankWhenNull="true">
                <reportElement x="163" y="9" width="100" height="20" isRemoveLineWhenBlank="true"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$P{parameter1} == null ? null : "Parameter1: " + $P{parameter1}]]></textFieldExpression>
            </textField>
            <textField isBlankWhenNull="true">
                <reportElement x="163" y="29" width="100" height="20" isRemoveLineWhenBlank="true"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$P{parameter2} == null ? null : "Parameter2: " + $P{parameter2}]]></textFieldExpression>
            </textField>
            <textField isBlankWhenNull="true">
                <reportElement x="163" y="49" width="100" height="20" isRemoveLineWhenBlank="true"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$P{parameter3} == null ? null : "Parameter3: " + $P{parameter3}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="163" y="73" width="100" height="20"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <text><![CDATA[Static text]]></text>
            </staticText>
            <line>
                <reportElement x="63" y="6" width="447" height="1"/>
            </line>
            <line>
                <reportElement x="73" y="96" width="447" height="1"/>
            </line>
        </band>
    </title>
</jasperReport>

The report design in iReport:

For the parameter1=null, parameter2=null, parameter1=value3 the result will be:

UPDATE

For solving the problem of moving up the textField in case the element above was hide you can use the Frame container. You should add 2 frames (one per column) and put 2 textField elements (2 rows) in each frame.

The sample (jrxml file):

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport .. topMargin="0" bottomMargin="0">
    <parameter name="par1" class="java.lang.String">
        <defaultValueExpression><![CDATA[null]]></defaultValueExpression>
    </parameter>
    <parameter name="par2" class="java.lang.String">
        <defaultValueExpression><![CDATA[null]]></defaultValueExpression>
    </parameter>
    <parameter name="par3" class="java.lang.String">
        <defaultValueExpression><![CDATA[null]]></defaultValueExpression>
    </parameter>
    <parameter name="par4" class="java.lang.String">
        <defaultValueExpression><![CDATA[null]]></defaultValueExpression>
    </parameter>
    <title>
        <band height="80" splitType="Stretch">
            <line>
                <reportElement x="10" y="6" width="520" height="1"/>
            </line>
            <line>
                <reportElement x="10" y="72" width="520" height="1"/>
            </line>
            <frame>
                <reportElement x="329" y="10" width="172" height="59"/>
                <frame>
                    <reportElement x="13" y="3" width="60" height="54"/>
                    <textField isBlankWhenNull="true">
                        <reportElement x="1" y="20" width="52" height="20" isRemoveLineWhenBlank="true"/>
                        <box>
                            <topPen lineWidth="1.0"/>
                            <leftPen lineWidth="1.0"/>
                            <bottomPen lineWidth="1.0"/>
                            <rightPen lineWidth="1.0"/>
                        </box>
                        <textElement/>
                        <textFieldExpression><![CDATA[$P{par3} == null ? null : "P3: " + $P{par3}]]></textFieldExpression>
                    </textField>
                    <textField isBlankWhenNull="true">
                        <reportElement x="1" y="0" width="52" height="20" isRemoveLineWhenBlank="true"/>
                        <box>
                            <topPen lineWidth="1.0"/>
                            <leftPen lineWidth="1.0"/>
                            <bottomPen lineWidth="1.0"/>
                            <rightPen lineWidth="1.0"/>
                        </box>
                        <textElement/>
                        <textFieldExpression><![CDATA[$P{par1} == null ? null : "P1: " + $P{par1}]]></textFieldExpression>
                    </textField>
                </frame>
                <frame>
                    <reportElement x="73" y="3" width="70" height="54"/>
                    <textField isBlankWhenNull="true">
                        <reportElement x="1" y="0" width="52" height="20" isRemoveLineWhenBlank="true"/>
                        <box>
                            <topPen lineWidth="1.0"/>
                            <leftPen lineWidth="1.0"/>
                            <bottomPen lineWidth="1.0"/>
                            <rightPen lineWidth="1.0"/>
                        </box>
                        <textElement/>
                        <textFieldExpression><![CDATA[$P{par2} == null ? null : "P2: " + $P{par2}]]></textFieldExpression>
                    </textField>
                    <textField isBlankWhenNull="true">
                        <reportElement x="1" y="20" width="52" height="20" isRemoveLineWhenBlank="true"/>
                        <box>
                            <topPen lineWidth="1.0"/>
                            <leftPen lineWidth="1.0"/>
                            <bottomPen lineWidth="1.0"/>
                            <rightPen lineWidth="1.0"/>
                        </box>
                        <textElement/>
                        <textFieldExpression><![CDATA[$P{par4} == null ? null : "P4: " + $P{par4}]]></textFieldExpression>
                    </textField>
                </frame>
            </frame>
            <textField isBlankWhenNull="true">
                <reportElement x="10" y="30" width="52" height="20" isRemoveLineWhenBlank="true"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$P{par3} == null ? null : "P3: " + $P{par3}]]></textFieldExpression>
            </textField>
            <textField isBlankWhenNull="true">
                <reportElement x="10" y="10" width="52" height="20" isRemoveLineWhenBlank="true"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$P{par1} == null ? null : "P1: " + $P{par1}]]></textFieldExpression>
            </textField>
            <textField isBlankWhenNull="true">
                <reportElement x="64" y="10" width="52" height="20" isRemoveLineWhenBlank="true"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$P{par2} == null ? null : "P2: " + $P{par2}]]></textFieldExpression>
            </textField>
            <textField isBlankWhenNull="true">
                <reportElement x="64" y="30" width="52" height="20" isRemoveLineWhenBlank="true"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$P{par4} == null ? null : "P4: " + $P{par4}]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>

The report design in iReport:

For the par1=null, par2=2, par3=3, par4=4 the result will be:

You can compare the results - left side is done without using frame and the right side with frame elements.




回答2:


There are many ways to fix problems like this, but unless you provide more detailed information about your report. I can't really come up some good suggestions.

But here are few tips might help you.

Use one TextField and one parameter.

Instead of composing your header in jrxml with separate TextField, you can compose it in Java first, then store as the parameter. This way you can make Java help you with all the logic about composing the string.

Use one TextField and three parameters

You can simply write expressions like this in the TextField

$P{FirstName} + " " + ${MiddleName} + " " + ${LastName}

so you can prevent the gap that caused by empty TextField. Or use shorthand condition expression like this.

$P{FirstName} + (${MiddleName}.isEmpty() ? "" : " " + ${MiddleName}) + " " + ${LastName}


来源:https://stackoverflow.com/questions/10071943/how-to-remove-extra-space-between-textfield-in-jasperreports

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!