How to remove extra space between textfield in JasperReports?

后端 未结 2 1629
花落未央
花落未央 2020-11-29 10:39

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

相关标签:
2条回答
  • 2020-11-29 11:07

    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: Report's design in iReport

    For the parameter1=null, parameter2=null, parameter1=value3 the result will be: The result in iReport (preview mode)

    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: The design in iReport. Two cases

    For the par1=null, par2=2, par3=3, par4=4 the result will be: The result in iReport preview. Two cases

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

    0 讨论(0)
  • 2020-11-29 11:20

    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}
    
    0 讨论(0)
提交回复
热议问题