【问题标题】:How to remove extra space between textfield in JasperReports?如何删除 JasperReports 中文本字段之间的额外空格?
【发布时间】:2012-04-09 10:33:29
【问题描述】:

我在 Header 中创建了三个文本字段。我已将参数放入所有 textField 元素中。当我不调用三个textField 元素的三个参数之一时。它将显示 2 个textField 元素。现在的问题是文本字段之间有空格。

如何去掉空格?

这是我的代码:

<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>

这是我的结果:

【问题讨论】:

  • 您可以使用一个textField。您使用哪种字段放置方式(垂直或水平)?
  • 我使用vertical.yesterday,我在一个文本字段中使用combine all,我放了双线。当三个之一不显示。它将显示 2 个文本字段。但文本字段中有空间。如何去掉空格让报表显示更有条理?

标签: jasper-reports


【解决方案1】:

您可以使用 3 个 textField 元素,并将 isRemoveLineWhenBlank 属性设置为 true 值。

示例(jrxml 文件):

<?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>

iReport中的报表设计:

对于 parameter1=null, parameter2=null, parameter1=value3,结果将是:

更新

为了解决向上移动 textField 的问题,以防上面的元素被隐藏,您可以使用 Frame 容器。您应该添加 2 个框架(每列一个)并在每个框架中放置 2 个 textField 元素(2 行)。

示例(jrxml 文件):

<?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>

iReport中的报表设计:

对于 par1=null, par2=2, par3=3, par4=4,结果将是:

您可以比较结果 - 左侧不使用 frame,右侧使用 frame 元素。

【讨论】:

  • @Amin 刚刚添加了报告的设计截图
  • 谢谢@Alex k。但我还有一个问题,如果我总共放 4 个 TextField 怎么样。我在第 1 行放置了 2 个文本字段,在第 2 行放置了 2 个文本字段。如果删除第 1 行中的一个文本字段,如何删除空格?。
  • 例如,您在第一行有txtFieldName1txtFieldValue1,在第二行(行)有txtFieldName2txtFieldValue2。如果txtFieldName1元素的表达式为null,在这种情况下你想隐藏两个元素(txtFieldName1txtFieldValue1)并只显示一行(txtFieldName2txtFieldValue2元素)还是你想要在第一行显示txtFieldName2txtFieldValue1,在第二行仅显示txtFieldValue2?你能解释一下规则吗?
  • 很抱歉回复晚了,我已经在我的图片中显示了规则。这是我的图片。[2]:i.stack.imgur.com/PpOkq.jpg.Hope你可以帮助我。
  • @Amin 我刚刚为您的第二个案例添加了样本
【解决方案2】:

有很多方法可以解决此类问题,但除非您提供有关报告的更详细信息。我实在想不出什么好的建议。

但这里有一些提示可能会对您有所帮助。

使用一个TextField和一个参数。

您可以先将其组合在Java 中,然后将其存储为参数,而不是在jrxml 中使用单独的TextField 编写您的标头。这样您就可以让Java 帮助您了解有关组成字符串的所有逻辑。

使用一个TextField和三个参数

您可以在TextField 中简单地编写这样的表达式

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

这样你就可以防止空TextField造成的差距。或者像这样使用速记条件表达式。

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

【讨论】:

  • 你能把你的代码更新成你的问题吗?注释不是阅读代码的好地方。请解释您的问题,例如您期望报告的结果如何,但现在的情况如何。
  • 我已经输入了我的代码,我将报告更改为 javascript,这是我的图片,i.stack.imgur.com/guooK.jpg
  • 我们尝试了这个例子,它对我来说工作正常。我们如何用“fields”而不是“Param”实现同样的效果