我正在为具有产品价格(取自数据源)的图像设计模板。如果产品具有删除价格,则图像会显示它,然后显示当前价格。如果没有删除价格,则仅显示当前价格。
除了没有三振出价的价格一致外,一切正常。两种价格都需要水平放在一起,并且在任何一种情况下都是中心对齐的。但如果删除线价格为空/空白,我无法对当前价格文本字段进行居中对齐。当存在删除价格时,这不是问题,因为两个文本字段在设计器视图中都正确对齐。
另外,如何根据strikout-price的可用性放置条件格式?如果不存在删除线价格,则当前价格的字体颜色应与有删除价格时的字体颜色不同。
编辑:以下两种情况的图像
当Strikeout-price可用时,它的外观如下:
当Strikeout-price不可用时,显示价格的文本字段应该居中对齐:
答案 0 :(得分:5)
您可以在Conditional Styles的帮助下轻松完成。
测试 csv 数据源:
name,price,discount_price
Shirt,"100,00","90,99"
Trousers,"80,00",
"Sun glasses","199,99","120,00"
jrxml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="two_textfields_one_on_other" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="cb5d2807-1ef9-4ffb-8df8-fcb781054bb0">
<style name="priceStyle" hAlign="Left">
<conditionalStyle>
<conditionExpression><![CDATA[$F{discount_price} == null || $F{discount_price} == 0.]]></conditionExpression>
<style forecolor="#3333FF" hAlign="Center" vAlign="Top"/>
</conditionalStyle>
</style>
<queryString>
<![CDATA[]]>
</queryString>
<field name="name" class="java.lang.String"/>
<field name="price" class="java.lang.Double"/>
<field name="discount_price" class="java.lang.Double"/>
<detail>
<band height="40" splitType="Stretch">
<textField isStretchWithOverflow="true">
<reportElement uuid="93ad241e-5257-4664-b3ab-f6448f786775" x="0" y="0" width="114" height="20"/>
<box>
<topPen lineWidth="0.25"/>
<leftPen lineWidth="0.25"/>
<rightPen lineWidth="0.25"/>
</box>
<textElement markup="styled"/>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true">
<reportElement uuid="6b53f6c6-5d48-4879-8934-d446150e1375" style="priceStyle" positionType="Float" x="0" y="20" width="114" height="20"/>
<box>
<leftPen lineWidth="0.25"/>
<bottomPen lineWidth="0.25"/>
<rightPen lineWidth="0.25"/>
</box>
<textElement markup="styled"/>
<textFieldExpression><![CDATA[($F{discount_price} != null && $F{discount_price} > 0.) ? "<style isStrikeThrough='true'>"+ $F{price} + " $</style> " + $F{discount_price} + " $" : $F{price} + " $"]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
在此示例中,我更改了文本的 forecolor (将其设为 Blue )和文本的水平对齐方式(将其设为 Central ,如果折扣价格不存在(未设置或等于0.0),则默认为左。
iReport 中的设计如下所示:
结果将是(通过 iReport 预览):
注意:
为了更好的格式化,我在我的示例中使用了markup syntax。您还可以在this post
中阅读有关样式的内容