You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jasper Report中根据条件动态设置TextField的字体属性

如何在JasperReports中动态设置字体的删除线属性?

要实现根据$F{product_unformatted_discount_amount}的值动态控制<font>标签的isStrikeThrough属性,你不需要额外复杂逻辑,直接把属性值换成条件表达式即可——JasperReports支持在字体属性中使用动态表达式,具体修改如下:

修改后的完整代码片段:

<textField>
  <reportElement style="DetailsPrice" x="370" y="5" width="56" height="15" uuid="2f0dc291-6a8b-48d3-b7d1-fe931b88e859">
    <property name="com.jaspersoft.studio.unit.y" value="px"/>
    <property name="com.jaspersoft.studio.unit.x" value="mm"/>
    <property name="com.jaspersoft.studio.unit.height" value="mm"/>
    <printWhenExpression>
       <![CDATA[$F{product_unformatted_discount_amount} != null && $F{product_unformatted_discount_amount} != 0]]>
    </printWhenExpression>
  </reportElement>
  <textElement textAlignment="Left" verticalAlignment="Middle">
     <font isBold="true" isStrikeThrough="$F{product_unformatted_discount_amount} != null && $F{product_unformatted_discount_amount} != 0"/>
  </textElement>
    <textFieldExpression><![CDATA["+" + $F{product_price_formatted_amount}]]></textFieldExpression>
</textField>

关键改动说明

  • 将原来固定的isStrikeThrough="true"替换为动态表达式:isStrikeThrough="$F{product_unformatted_discount_amount} != null && $F{product_unformatted_discount_amount} != 0"
  • 表达式逻辑和你printWhenExpression里的逻辑一致:当折扣金额不为空且不等于0时启用删除线,其他情况则不显示删除线

这样就能直接在<font>标签内实现条件判断,动态控制字体的删除线属性了。

内容的提问来源于stack exchange,提问作者Stefano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:20:28