帳票出力の仕組み

RapidReportを用いた帳票出力の仕組みを、手順に沿って説明します。

ReportDesignオブジェクトの生成

帳票を出力する際に、まず行う必要があるのはReportDesignオブジェクトの生成です。 そのコンストラクタは以下の2つの引数を受け取ります。

1つ目の引数には、レポートデザイナで作成した帳票定義ファイル(拡張子RRPT)の内容をデコードして得られるオブジェクトを渡します。 この引数は省略できません。なお、帳票定義ファイルの内容はJSON形式となっています。

2つ目の引数には、ReportSettingというオブジェクトを渡します。 ReportSettingは、帳票の機能に関わる設定項目を管理するためのオブジェクトです。 デフォルトの設定を利用するならば、この引数は省略できます。

ReportSettingやReportDesign、 そして後述するReportオブジェクトについての詳しい説明は「Reportの仕様」にあります。

Reportオブジェクトの生成

ReportDesignオブジェクトが生成できたら、それを元にしてReportオブジェクトを生成します。 コンストラクタは以下の2つの引数を受け取ります。

1つ目の引数には、ReportDesignオブジェクトを渡します。 この引数は省略できません。

2つ目の引数には、カスタマイザというオブジェクトを渡します。 カスタマイザを用いると、帳票の内容を動的に変更することができます。 例えば、データの内容に応じて表示項目を修正したり、 明細行や集計行などの高さを変更したり、 グループが切り替わるたびに他のデザインから生成したページを差し込むなどといったことが可能です。 動的カスタマイズが必要ないということであれば、この引数は省略できます。 カスタマイザについての詳しい説明は「カスタマイザの仕様」にあります。

実際には、ReportDesignオブジェクトの生成と、 Reportオブジェクトの生成は同時にできます。 Reportクラスのコンストラクタには、 帳票定義ファイルから得られるオブジェクト(と、ReportSetting、カスタマイザ)を受け取るオーバーロードがあり、 これを利用すれば、ReportDesignオブジェクトは内部で自動的に生成されます。

Reportにデータを渡す

続いて、作成したReportオブジェクトに対してデータを渡すためにReport.Fillメソッド呼び出します。 Fillメソッドが受け取る引数は以下の2つです。

1つ目の引数には、データソースというオブジェクトを渡します。 帳票上に出力されるデータは、このデータソースを通じてReportに渡されます。 この引数は省略できません。

2つ目の引数には、データプロバイダというオブジェクトを渡します。 データプロバイダを用いることで、Report内の特定のグループ以下に個別のデータを与えることができます。 その必要がなければ、この引数は省略できます。

データソースやデータプロバイダについての詳しい説明は「帳票にデータを渡す方法」にあります。

ページ分割

Reportの内容を先頭からスキャンし、ページ分割を行います。 GetPagesメソッドを呼び、戻り値としてReportPagesというオブジェクトを得ます。

ページは、以下の条件のいずれかを満たすたびに分割されます。

  • (サブコンテント以外の)コンテントのサイズが最大値を超えた
  • ([許容ウエイト]が設定されていた場合)ページ内に表示されるコンテントの[ウエイト]総和が[許容ウエイト]を超えた
  • ([配置]の[並べる最大数]が設定されていた場合)ページ内に表示されるグループの数が[並べる最大数]を超えた
  • [改ページ]にチェックの付いたグループが開始された

ReportPagesについての詳しい説明は「ReportPageの仕様」にあります。

レンダリング

ReportPagesが生成できたら、いよいよレンダリングを行うことができます。 Renderメソッドをレンダラオブジェクトを渡して呼び出します。

レンダラはIRendererを実装したオブジェクトです。 レンダラの実装によって、帳票をどのような形式で出力するかが決まります。 現状で用意されている実装クラスを以下に示します。

出力形式 レンダラの実装クラス
PDF PdfRenderer
XLS XlsRenderer
XLSX XlsxRenderer

それぞれのクラスは、固有の設定項目などを持っています。 詳しい説明は「レンダラの仕様」にあります。

直接印刷・プレビュー(.NET版のみ)

.NET版を利用している場合に限定されますが、 帳票の直接印刷とプレビューを行うことができます。

直接印刷を行うには、Printerオブジェクトを生成します。 そのコンストラクタにはReportPagesオブジェクトを渡します。

さらにプレビュー画面を表示するには、 FmPrintPreviewというフォームを生成して表示します。 そのコンストラクタには、Printerオブジェクトを渡します。

Printer、FmPrintPreviewについての詳しい説明は、 「レンダラの仕様」にあります。