当包含值0(零)时,在字段中设置为空白

时间:2010-10-25 12:24:53

标签: jasper-reports ireport

我正在使用iReport并生成大约20个pdf报告。现在我希望报告中的所有字段都为空,其中包含值0(零)。

为此,我使用代码

设置文本字段表达式
$F{diamondQty}.doubleValue() == 0.0 ? null : $F{diamondQty}.doubleValue()

并启用该字段的 Blank when null 选项。

它工作正常但需要对所有20个报告中的所有字段执行相同操作。

还有其他更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

也许你可以使用FormatFactory 格式工厂允许您指定自己的日期和数字格式。您可以将其设置为报告属性(formatFactoryClass),或将其设置为参数(REPORT_FORMAT_FACTORY

答案 1 :(得分:0)

以下似乎有效:

  1. 点击窗口>> Prefereces
  2. 选择功能
  3. 检查开发
  4. 点击确定
  5. 下一步:

    1. 打开Project Explorer
    2. 右键单击“项目名称”
    3. 选择属性
    4. 选择 Java构建路径
    5. 点击来源标签
    6. 点击添加文件夹
    7. 选择创建新文件夹
    8. 将文件夹名称设置为:src
    9. 点击完成
    10. 选择 src
    11. 点击确定
    12. 设置默认输出文件夹:项目名称/ build
    13. 点击确定
    14. 像往常一样创建报告(使用日期,参数或字段的文本字段),然后:

      1. 大纲面板
      2. 中选择报告
      3. 打开属性面板
      4. 格式化工厂类设置为:com.company.reports.ReportFormatFactory
      5. 接下来,在名为com.company.reports的包(文件夹)中的“src”目录中创建一些源代码。将以下内容粘贴到保存在该目录中的名为ReportFormatFactory.java的文件中:

        import java.text.DateFormat;
        import java.util.Locale;
        import java.util.TimeZone;
        
        import net.sf.jasperreports.engine.util.DefaultFormatFactory;
        
        /**
         * Delegates creation of date and number formatters to JasperReports' default
         * formatters. This class ensures that dates are formatted consistently across
         * all reports.
         */
        public class ReportFormatFactory extends DefaultFormatFactory {
          /**
           * Returns a DateFormat instance that creates dates in YYYY/MM/dd format.
           *
           * @param pattern Unused.
           * @param locale Passed to the DefaultFormatFactory instance.
           * @param timezone Passed to the DefaultFormatFactory instance.
           *
           * @return An object that can format dates.
           */
          @Override
          public DateFormat createDateFormat(
            String pattern, Locale locale, TimeZone timezone ) {
            return super.createDateFormat( "YYYY/MM/dd", locale, timezone );
          }
        }
        

        运行报告时,日期格式应为YYYY/MM/dd

        如果要更改格式(例如,更改为dd/MM/YYYY),请更新源代码中的日期格式行,然后重新启动Jaspersoft Studio(类加载器似乎在修改后不会重新加载ReportFormatFactory类)。

        为避免每次日期格式更改时都必须重新启动,请使用资源包:

        1. 创建一个名为i18n的新项目文件夹
          1. 右键单击项目名称
          2. 选择新>>文件夹
          3. 将文件夹名称设置为i18n
          4. 点击完成
        2. 右键点击 i18n
        3. 选择新>>其他
        4. 展开消息编辑器
        5. 选择 ResourceBundle
        6. 点击下一步
        7. 将名称设为:ReportsLocale
        8. 添加区域设置(例如,en_US)
        9. 点击完成
        10. i18n 目录添加到构建过程:

          1. 右键点击 i18n
          2. 选择构建路径>>配置构建路径
          3. 点击添加文件夹
          4. 检查 i18n
          5. 点击确定
          6. 再次点击确定
          7. 按如下方式更改createDateFormat方法:

              @Override
              public DateFormat createDateFormat(
                String pattern, Locale locale, TimeZone timezone ) {
                String dateFormat = DATE_FORMAT_DEFAULT;
            
               try {
                 ResourceBundle rb = ResourceBundle.getBundle( "EducationReports" );
                 String df = rb.getString( DATE_FORMAT );
            
                 if( df != null ) {
                   dateFormat = df;
                 }
               }
               catch( Exception e ) {
                 // If the resource bundle isn't found, use the default date format.
                 // TODO: Pass this exception into a logger.
               }
            
                return super.createDateFormat( dateFormat, locale, timezone );
              }
            

            并将这些常量添加到类定义中(紧跟在 public class 声明之后,在第15/16行附近):

              private final static String DATE_FORMAT = "date.format";
              private final static String DATE_FORMAT_DEFAULT = "YYYY/MM/dd";
            

            重新启动Jaspersoft Studio,然后:

            1. 修改 ReportsLocale 文件
            2. 添加date.format属性
            3. 将属性设置为dd/MM/YYYY
            4. 设置所有区域设置的属性值。
            5. 运行报告时,日期应该与29/02/1976类似。

              您可以根据需要调整此值以更改字段值。