报告

时间:2016-09-02 16:43:34

标签: jasper-reports

我报告中的所有负数都需要为红色。有什么方法可以通过数字格式来做到这一点吗?如果没有,是否可以在某个地方创建一个检查当前文本字段的动态条件?

例如:

If this Textfield < 0 then this texfield font is red

请记住,它需要是动态的,因为我可以在不改变条件的情况下将其放在所有文本字段上。

我确实理解条件样式,而不是使用条件的特定字段(如在问题中标记为重复)我想允许将条件拖到任何文本字段上并区分是否它小于0.

1 个答案:

答案 0 :(得分:1)

使用条件样式无法实现此目的。

解决方案是创建一个自定义格式化程序,输出样式化文本,并将textField配置为markup="styled",如下所示:

<textField>
  <reportElement x="72" y="16" width="100" height="24" uuid="698866c8-7d26-4bc7-8727-b4a56d239a53"/>
  <textElement markup="styled"/>
  <textFieldExpression><![CDATA[NegativeNumberFormatter.format($F{A1}, "#,##0.###")]]></textFieldExpression>
</textField>

NegativeNumberFormatter可能如下所示(使用默认包):

import java.text.DecimalFormat;

public class NegativeNumberFormatter {

  public static String format(Number n, String pattern) {
    if (n != null) {
      if (n.doubleValue() < 0) {
        DecimalFormat df = new DecimalFormat();

        if (pattern != null) {
          df.applyPattern(pattern);
        }

        return "<font color=\"red\">" + df.format(n) + "</font>";
      } else {
        return "" + n;
      }
    }

    return null;
  }
}