установить пустым в поле, когда оно содержит значение 0 (ноль) - PullRequest
1 голос
/ 25 октября 2010

Я работаю с iReport и создаю около 20 отчетов в формате PDF. Теперь я хочу, чтобы все поля в отчете были пустыми, и в них содержалось значение 0 (ноль).

Для этого я устанавливаю выражение текстового поля с кодом

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

и включите Blank when null опцию поля.

Работает нормально, но требуется сделать то же самое для всех полей всех 20 отчетов.

Есть ли другое лучшее решение для этого?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2016

Кажется, работает следующее:

  1. Нажмите Окно >> Предпочтения
  2. Выбрать Возможности
  3. Проверить Разработка
  4. Нажмите OK

Далее:

  1. Откройте Project Explorer
  2. Щелкните правой кнопкой мыши имя проекта
  3. Выберите Свойства
  4. Выберите Путь сборки Java
  5. Нажмите Источник tab
  6. Нажмите Добавить папку
  7. Выбрать Создать новую папку
  8. Установить имя папки на: src
  9. Нажмите Готово
  10. Выберите src
  11. Нажмите OK
  12. Установить папку вывода по умолчанию:Имя проекта / build
  13. Нажмите OK

Создайте отчет как обычно (с текстовым полем, в котором используется дата, либо параметром, либо полем), затем:

  1. Выберите отчет на панели Outline
  2. Откройте Properties panel
  3. Установить Формат фабричного класса в: com.company.reports.ReportFormatFactory

Затем создайте некоторый исходный код внутри каталога "src" в пакете(папка) с именем 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. Выберите ResourceBundle
  6. Нажмите Далее
  7. Установите имя: ReportsLocale
  8. Добавьте Locale (например, en_US)
  9. Нажмите Готово

Добавьте каталог i18n впроцесс сборки:

  1. Щелкните правой кнопкой мыши i18n
  2. Выбрать Путь сборки >> Настроить путь сборки
  3. Нажмите Добавить папку
  4. Проверить i18n
  5. Нажмите OK
  6. Нажмите OK снова

Измените метод 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 property
  3. Установите для свойства dd/MM/YYYY
  4. Установите значение свойства для всех локалей.

При запуске отчета дата должна выглядеть следующим образом29/02/1976, например.

Вы можете адаптировать это, чтобы изменить значение поля кактребуется.

0 голосов
/ 25 октября 2010

Может быть, вы можете использовать FormatFactory .
Фабрика форматов позволяет вам указать свои собственные форматы даты и числа. Вы можете установить его как свойство отчета (formatFactoryClass) или установить как параметр (REPORT_FORMAT_FACTORY)

...