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. [ OK] をクリックします。

次:

  1. プロジェクト エクスプローラーを開く
  2. プロジェクト名を右クリック
  3. プロパティを選択
  4. Java ビルド パスの選択
  5. [ソース] タブをクリックします。
  6. フォルダの追加をクリック
  7. [新しいフォルダーの作成] を選択します
  8. フォルダ名を次のように設定:src
  9. [完了] をクリックします
  10. ソースを選択
  11. [ OK] をクリックします。
  12. デフォルトの出力フォルダを設定: プロジェクト名/build
  13. [ OK] をクリックします。

通常どおり (パラメータまたはフィールドのいずれかの日付を使用するテキスト フィールドを使用して) レポートを作成します。

  1. アウトラインパネルでレポートを選択します。
  2. プロパティパネルを開く
  3. フォーマット ファクトリ クラスを次のように設定します。com.company.reports.ReportFormatFactory

次に、 という名前のパッケージ (フォルダ) 内の「src」ディレクトリ内にソース コードを作成しますcom.company.reportsReportFormatFactory.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. 国際化を右クリック
  2. ビルド パスを選択>> ビルド パスの構成
  3. フォルダの追加をクリック
  4. 国際化をチェック
  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プロパティを追加する
  3. プロパティを次のように設定しますdd/MM/YYYY
  4. すべてのロケールのプロパティ値を設定します。

レポートを実行すると、日付はたとえば 29/02/1976 のようになります。

これを調整して、必要に応じてフィールド値を変更できます。

于 2016-04-25T17:30:21.633 に答える