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

Jasper reports 当其包含值0(零)时,在字段中设置为空,jasper-reports,ireport,Jasper Reports,Ireport,我正在使用iReport并生成大约20个pdf报告。现在我希望报告中的所有字段都为空,其中的值为0(零) 为此,我使用代码设置文本字段表达式 $F{diamondQty}.doubleValue()==0.0?null:$F{diamondQty}.doubleValue() 并启用字段的空时为空 它工作正常,但需要对所有20个报告的所有字段执行相同的操作 还有其他更好的解决方法吗?也许你可以用一个。 格式工厂允许您指定自己的日期和数字格式。您可以将其设置为报表属性(formatFactory

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

为此,我使用代码设置文本字段表达式

$F{diamondQty}.doubleValue()==0.0?null:$F{diamondQty}.doubleValue()
并启用字段的
空时为空

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

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

也许你可以用一个。

格式工厂允许您指定自己的日期和数字格式。您可以将其设置为报表属性(
formatFactoryClass
),或将其设置为参数(
report\u FORMAT\u FACTORY

以下操作似乎有效:

  • 单击窗口>>首选项
  • 选择功能
  • 检查开发
  • 单击确定
  • 下一步:

  • 打开项目浏览器
  • 右键单击项目名称
  • 选择属性
  • 选择Java构建路径
  • 单击选项卡
  • 单击添加文件夹
  • 选择创建新文件夹
  • 将文件夹名称设置为:
    src
  • 单击完成
  • 选择src
  • 单击确定
  • 设置默认输出文件夹:项目名称/
    build
  • 单击确定
  • 像往常一样创建报告(使用使用日期、参数或字段的文本字段),然后:

  • 在“大纲”面板中选择报告
  • 打开属性面板
  • 格式化工厂类设置为:
    com.company.reports.ReportFormatFactory
  • 接下来,在名为
    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类)

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

  • 创建一个名为
    i18n
  • ​右键单击项目名称
  • 选择新建>>文件夹
  • 将文件夹名称设置为
    i18n
  • 单击完成
  • 右键单击i18n
  • 选择新建>>其他
  • 展开消息编辑器
  • 选择ResourceBundle
  • 单击下一步
  • 将名称设置为:
    ReportsLocale
  • 添加一个区域设置(例如en_US)
  • 单击完成
  • i18n目录添加到构建过程:

  • 右键单击i18n
  • 选择生成路径>>配置生成路径
  • 单击添加文件夹
  • 检查i18n
  • 单击确定
  • 再次单击确定
  • 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 );
      }
    
    并将这些常量添加到类定义中(紧跟在公共类声明之后,第15/16行附近):

    重新启动Jaspersoft Studio,然后:

  • 编辑报告缩放文件
  • 添加
    date.format
    属性
  • 将属性设置为
    dd/MM/YYYY
  • 设置所有区域设置的属性值
  • 例如,在运行报告时,日期应类似于1976年2月29日


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

    我无法理解此答案?,问题是关于删除值(如果值为0),您正在发布关于格式化日期的帖子,好的,您可以用java创建自己的类以在0上显示空字符串,但此答案似乎离0问题的解决方案有点远,也许可以编辑它来包含一个数字格式的例子去点,彼特。它需要重写
    createNumberFormat
    ,而不是从超类重写
    createDateFormat
    。我会在时间允许的情况下修改。谢谢,如果你完成后打电话给我,我很乐意在jasper reports部分投票选出好的答案
      private final static String DATE_FORMAT = "date.format";
      private final static String DATE_FORMAT_DEFAULT = "YYYY/MM/dd";