如何删除JasperReports中的textfield之间的额外空间?

问题描述:

我在标题中创建了三个文本字段。我已将参数放入所有textField元素中。当我不叫三个textField元素的三个参数之一。它会显示2 textField元素。现在的问题是文本字段之间存在空格。如何删除JasperReports中的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> 

这是我的结果:

enter image description here

+0

您可以使用一个'textField'。你正在使用什么样的字段放置(垂直或水平)? – 2012-04-09 12:33:28

+0

即时通讯使用vertical.yesterday,我使用结合所有在一个文本框,我把双线。当三个之一没有显示。它会显示2个文本框。但是文本字段中有空格。如何删除空间以便报告可以显示更多结构化? – 2012-04-10 01:11:07

可以使用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> 

报告设计在iReportReport's design in iReport

对于参数1 =无效,参数2 = NULL,参数1 = VALUE3结果将是: The result in iReport (preview mode)

UPDATE

为了解决在上述情况下的元素向上移动textField的问题是隐藏您可以使用Frame容器。您应该添加2个帧(每列一个),并在每个帧中添加2个元素(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> 

报告设计在iReportThe design in iReport. Two cases

对于PAR1 = NULL,PAR2 = 2,PAR3 = 3,PAR4 = 4的结果将是: The result in iReport preview. Two cases

您可以比较结果 - 左侧没有使用frame和右侧frame元素。

+0

@Amin刚添加了报告的设计截图 – 2012-04-10 11:18:53

+0

谢谢@亚历k。但我还有一个问题,如果我把总共4个TextField放在一起,怎么样。我把第2行的textfield放在第1行,第2行的textfield放在第2行。如何删除第1行的一个文本字段? – 2012-04-11 13:57:18

+1

例如你在第一行有'txtFieldName1'和'txtFieldValue1',在第二行(行)有'txtFieldName2'和'txtFieldValue2'。如果'txtFieldName1'元素的表达式为null,那么是否要在这种情况下隐藏两个元素('txtFieldName1'和'txtFieldValue1')并仅显示一行(使用'txtFieldName2'和'txtFieldValue2'元素),还是想要在第一行显示“txtFieldName2”和“txtFieldValue1”,在第二行显示“txtFieldValue2”?你能解释我的规则吗? – 2012-04-11 17:45:01

有很多方法来解决这样的问题,但除非你提供有关报表的更多详细信息。我无法真正提出一些好的建议。

但是,这里有几个提示可能会帮助你。

使用一个TextField和一个参数。

不是在jrxml中使用单独的TextField来编写标题,而是先编写它,然后将其作为参数存储在Java中。通过这种方式,您可以使用Java帮助您了解有关组成字符串的所有逻辑。

使用一个TextField和三个参数

你可以简单地写这样的表达式在TextField

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

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

你可以更新你的代码到你的问题?评论不是一个阅读代码的好地方。并请**解释您的问题**,比如您期望您的报告看起来像什么结果,但现在看起来如何。 – 2012-04-10 01:44:17

+0

我已经把我的代码和我的报告改为javascript,这是我的图片,http://i.stack.imgur.com/guooK.jpg – 2012-04-10 02:30:16