【问题标题】:Hide image when its value is NULL or Empty in JasperReports在 JasperReports 中其值为 NULL 或 Empty 时隐藏图像
【发布时间】:2017-03-24 04:24:30
【问题描述】:

我正在使用 JasperReports 6.2.2 版本。如果值为 null 或为空,我想隐藏图像。

我在 jrxml 中使用以下代码隐藏图像,但这对我不起作用。

<image>
    <reportElement x="33" y="0" width="88" height="45" uuid="182b40f8-b18e-417c-b9f4-096199533567">
        <printWhenExpression><![CDATA[($F{urlImage}!=null ? $F{urlImage} : "")]]></printWhenExpression>
    </reportElement>
</image>

$F{urlImage} 是字符串类型

报错

ERROR [btpool0-2] (JRFillSubreport.java:866) - Fill 1: exception
     [java] java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
     [java]     at net.sf.jasperreports.engine.fill.JRFillElement.evaluatePrintWhenExpression(JRFillElement.java:806)
     [java]     at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:471)
     [java]     at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:381)
     [java]     at net.sf.jasperreports.engine.fill.JRFillFrame.evaluate(JRFillFrame.java:159)
     [java]     at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:381)
     [java]     at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:500)
     [java]     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2022)
     [java]     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:748)
     [java]     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:255)
     [java] java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
     [java]     at net.sf.jasperreports.engine.fill.JRFillElement.evaluatePrintWhenExpression(JRFillElement.java:806)
     [java]     at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:471)
     [java]     at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:381)
     [java]     at net.sf.jasperreports.engine.fill.JRFillFrame.evaluate(JRFillFrame.java:159)
     [java]     at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:381)
     [java]     at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:500)
     [java]     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2022)
     [java]     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:748)
     [java]     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:255)
     [java]     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:115)
     [java]     at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:580)
     [java]     at net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:414)
     [java]     at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:736)
     [java]     at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
     [java]     at net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:221)
     [java]     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
     [java]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
     [java]     at java.lang.Thread.run(Unknown Source)
     [java]     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:115)
     [java]     at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:580)
     [java]     at net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:414)
     [java]     at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:736)
     [java]     at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
     [java]     at net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:221)
     [java]     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
     [java]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
     [java]     at java.lang.Thread.run(Unknown Source)

如果图像的值为 null 或为空,如何隐藏图像。在 urlImage 字段中包含图像的 url。例如:“[http://use.example.com/pop.png][1]”。

【问题讨论】:

  • 图像元素具有忽略错误的属性。在这种情况下(错误),它将是空的。您可以尝试编写自己的 scriptlet 并使用它

标签: image jasper-reports


【解决方案1】:

您可以在 Jaspersoft Studio 中完成:

在 jrxml 中创建以下行:

&lt;image isUsingCache="true" onErrorType="Blank"&gt;

【讨论】:

  • 它不是我的问题的解决方案,但在其他地方它仍然可以帮助我.. 谢谢
【解决方案2】:

printWhenExpression 应该返回一个Boolean,目前您正在返回一个String

$F{urlImage}!=null ? $F{urlImage} : "" 是一个ternary 表达式,如果不为空则返回$F{urlImage} 的值,否则为空字符串

相反,您只需要返回一个Boolean,因此您需要这样的表达式:

<printWhenExpression>
    <![CDATA[$F{urlImage}!=null && !$F{urlImage}.isEmpty()]]>    
</printWhenExpression>

不为空且不为空时打印

注意:使用旧的 jasper-reports lib 它不会自动autobox 您需要自己创建布尔对象

new Boolean($F{urlImage}!=null &amp;&amp; !$F{urlImage}.isEmpty())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2017-07-24
    • 2013-10-15
    相关资源
    最近更新 更多