メニュー最初の一歩基本的な仕組み機能サンプル
プログラム仕様デザイン仕様機能拡張その他関連製品開発・運営会社 |
コンテントのサイズ変更このページでは、以下の帳票を作成します。 この帳票の特徴は、 コンテントの高さが渡されたデータの値に応じて動的に決まるという点です。 今回の例では、データにはHEIGHTという列が含まれており、 その値がコンテントの高さになるようにします。 完成したサンプルが example フォルダ内に以下の名前で含まれています。
帳票定義ファイル: example_region.rrpt カスタマイザのContentRegionメソッドによって、コンテントの領域を動的に変更することができます。 カスタマイザを実装するには、DefaultCustomizerクラスを継承します。 コードは以下のようになります。 // C# // コンテントのサイズを動的に変更するカスタマイザ private class Customizer : DefaultCustomizer { public override Region ContentRegion(Content content, Evaluator evaluator, Region region) { // "content_example"という識別子を持ったコンテントに対して処理を行います if ("content_example".Equals(content.Design.Id)) { // regionはコンテントの表示領域を表します // ".HEIGHT"という式を評価することでHEIGHT列の値を取得し、 // コンテントの高さを設定します Region ret = new Region(region); // regionのクローンを作成します ret.SetHeight((float)evaluator.EvalTry(".HEIGHT")); return ret; } else { return region; } } } ' VisualBasic ' コンテントのサイズを動的に変更するカスタマイザ Private Class Customizer Inherits DefaultCustomizer Public Overrides Function ContentRegion( _ ByVal content As Content, _ ByVal evaluator As Evaluator, _ ByVal region As Region) As Region ' "content_example"という識別子を持ったコンテントに対して処理を行います If "content_example".Equals(content.Design.Id) Then ' regionはコンテントの表示領域を表します ' ".HEIGHT"という式を評価することでHEIGHT列の値を取得し、 ' コンテントの高さを設定します Dim ret As New Region(region) ' regionのクローンを作成します ret.SetHeight(evaluator.EvalTry(".HEIGHT")) Return ret Else Return region End If End Function End Class // Java // コンテントのサイズを動的に変更するカスタマイザ private static class Customizer extends DefaultCustomizer{ @Override public Region contentRegion( Content content, Evaluator evaluator, Region region) { // "content_example"という識別子を持ったコンテントに対して処理を行います if ("content_example".equals(content.design.id)){ // regionはコンテントの表示領域を表します // ".HEIGHT"という式を評価することでHEIGHT列の値を取得し、 // コンテントの高さを設定します float height = Cast.toFloat(evaluator.evalTry(".HEIGHT")); Region ret = new Region(region); // regionのクローンを作成します ret.setHeight(height); return ret; }else{ return region; } } } ContentRegionメソッドは、コンテントの表示領域を決定する必要が生じるたびに呼ばれます。 引数のregionがデフォルトの表示領域です。 表示領域を変更しないならば、このregionをそのまま戻り値とします。 ここでは、"content_example"という識別子が振られたコンテントに対し、 HEIGHT列の値を高さとして設定しています。 Regionへの修正はクローンを作成してから行うようにしてください。 なお、今回の例では示しませんが、NULLを戻り値とするとそのコンテントを非表示にすることができます。 evaluator.evalTryメソッドは、引数で指定された式を評価してその値を返すメソッドです。 もしも式の評価に失敗したとしても例外を発生させることはなく、単にNULLを返します。 例外をキャッチしたい場合は、代わりにevaluator.evalメソッドを利用します。 作成したカスタマイザはReportオブジェクトのコンストラクタに渡します。 帳票出力のコードは以下のようになります。 // C# // 第2引数にCustomizerオブジェクトを渡します Report report = new Report(Json.Read("report\\example_region.rrpt"), new Customizer()); report.Fill(new ReportDataSource(getDataTable())); ReportPages pages = report.GetPages(); // PDF出力 using (FileStream fs = new FileStream("output\\example_region.pdf", FileMode.Create)) { PdfRenderer renderer = new PdfRenderer(fs); renderer.Setting.ReplaceBackslashToYen = true; pages.Render(renderer); } ' VisualBasic ' 第2引数にCustomizerオブジェクトを渡します Dim report As New Report(Json.Read("report\example_region.rrpt"), New Customizer) report.Fill(New ReportDataSource(getDataTable)) Dim pages As ReportPages = report.GetPages() ' PDF出力 Using fs As New FileStream("output\example_region.pdf", IO.FileMode.Create) pages.Render(New PdfRenderer(fs)) End Using // Java // 第2引数にCustomizerオブジェクトを渡します Report report = new Report(ReadUtil.readJson("report/example_region.rrpt"), new Customizer()); report.fill(new ReportDataSource(getDataTable())); ReportPages pages = report.getPages(); // PDF出力 { FileOutputStream fos = new FileOutputStream("output/example_region.pdf"); try{ pages.render(new PdfRenderer(fos)); }finally{ fos.close(); } } |
Copyright (c) 2013, SystemBase Co.,Ltd. All rights reserved. |