1

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

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

$F{diamondQty}.doubleValue() == 0.0 ? null : $F{diamondQty}.doubleValue()

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

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

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

4

2 回答 2

0

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

于 2010-10-25T19:45:42.460 回答
0

以下似乎有效:

  1. 单击窗口>>首选项
  2. 选择能力
  3. 检查开发
  4. 点击确定

下一个:

  1. 打开项目资源管理器
  2. 右键单击项目名称
  3. 选择属性
  4. 选择Java 构建路径
  5. 单击选项卡
  6. 单击添加文件夹
  7. 选择创建新文件夹
  8. 将文件夹名称设置为:src
  9. 点击完成
  10. 选择
  11. 点击确定
  12. 设置默认输出文件夹:项目名称/build
  13. 点击确定

像往常一样创建一个报告(带有一个使用日期、参数或字段的文本字段),然后:

  1. 大纲面板中选择报告
  2. 打开属性面板
  3. 格式工厂类设置为:com.company.reports.ReportFormatFactory

接下来,在名为com.company.reports. 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. 选择资源包
  6. 单击下一步
  7. 将名称设置为:ReportsLocale
  8. 添加区域设置(例如,en_US)
  9. 点击完成

i18n目录添加到构建过程中:

  1. 右键单击i18n
  2. 选择构建路径>>配置构建路径
  3. 单击添加文件夹
  4. 检查i18n
  5. 点击确定
  6. 再次单击确定

改变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. 为所有语言环境设置属性值。

例如,当报表运行时,日期应类似于 1976 年 2 月 29 日。

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

于 2016-04-25T17:30:21.633 回答