メニュー最初の一歩基本的な仕組み機能サンプル
プログラム仕様デザイン仕様機能拡張その他関連製品開発・運営会社 |
ページ挿入このページでは、以下の帳票を作成します。 この帳票ではグループが終わる毎に集計ページが挿入されています。 さらに、最後のページにも別のデザインのページが追加されています。 完成したサンプルが example フォルダ内に以下の名前で含まれています。
帳票定義ファイル: example_page[1-3].rrpt カスタマイザのPageAddedメソッドを利用することで、グループが終了するたびに別ページを挿入することができます。 カスタマイザを実装するには、DefaultCustomizerクラスを継承します。 コードは以下のようになります。 // C# // グループが終了するたびに集計ページを挿入するカスタマイザ private class Customizer : DefaultCustomizer { private ReportDesign reportDesign; public Customizer() { this.reportDesign = new ReportDesign(Json.Read("report\\example_page2.rrpt")); } public override void PageAdded(Report report, ReportPages pages, ReportPage page) { // このメソッドはページが追加されるたびに呼ばれます // 直前のページで"group_example"という識別子を持ったグループが終了しているかを調べます Group g = page.FindFinishedGroup("group_example"); if (g != null) { // 直前に終了したグループのデータを用いて集計ページを作成し、挿入します Report _report = new Report(this.reportDesign); _report.Fill(g.Data); pages.AddRange(_report.GetPages()); } } } ' VisualBasic ' グループが終了するたびに集計ページを挿入するカスタマイザ Private Class Customizer Inherits DefaultCustomizer Private reportDesign As ReportDesign Public Sub New() ' あらかじめ集計ページの帳票定義ファイルを読み込んでおきます Me.reportDesign = New ReportDesign(Json.Read("report\example_page2.rrpt")) End Sub Public Overrides Sub PageAdded( _ ByVal report As Report, _ ByVal pages As ReportPages, _ ByVal page As ReportPage) ' このメソッドはページが追加されるたびに呼ばれます() ' 直前のページで"group_example"という識別子のグループが終了しているかを調べます Dim g As Group = page.FindFinishedGroup("group_example") If g IsNot Nothing Then ' 直前に終了したグループのデータを用いて集計ページを作成し、挿入します Dim _report As New Report(Me.reportDesign) _report.Fill(g.Data) pages.AddRange(_report.GetPages) End If End Sub End Class // Java // グループが終了するたびに集計ページを挿入するカスタマイザ private static class Customizer extends DefaultCustomizer{ private ReportDesign reportDesign; public Customizer() throws Throwable{ // あらかじめ集計ページの帳票定義ファイルを読み込んでおきます this.reportDesign = new ReportDesign(ReadUtil.readJson("report/example_page2.rrpt")); } @Override public void pageAdded( Report report, ReportPages pages, ReportPage page) { // このメソッドはページが追加されるたびに呼ばれます // 直前のページで"group_example"という識別子のグループが終了しているかを調べます Group g = page.findFinishedGroup("group_example"); if (g != null){ // 直前に終了したグループのデータを用いて集計ページを作成し、挿入します Report _report = new Report(this.reportDesign); _report.fill(g.data); pages.addAll(_report.getPages()); } } } PageAddedメソッドは改ページが行われるたびに呼ばれます。 引数のpagesにそれまでに生成されたページのリストが渡され、 pageには直前に生成されたページが渡されます。 今回行いたいことは、group_exampleという識別子が振られたグループが直前のページで終了していた場合、 集計用のページを挿入するということです。 FindFinishedGroupメソッドを呼ぶと、そのページで終了したグループから識別子に対応したものを返します。 グループがそのページで終了していた場合、その場で集計用のReportを作成してpagesに追加します。 その際、グループの持つdataをそのままデータソースとすることができます。 最後のページはpagesが作成された後で追加すればよいので、 カスタマイザの中で対応する必要はありません。 単にGetPagesメソッドの結果に対して新たにReportを作成して追加します。 最終的なコードは以下のようになります。 // C# ReportPages pages; { // 第2引数にCustomizerオブジェクトを渡します Report report = new Report(Json.Read("report\\example_page1.rrpt"), new Customizer()); report.Fill(new ReportDataSource(getDataTable())); pages = report.GetPages(); } { Report report = new Report(Json.Read("report\\example_page3.rrpt")); report.Fill(DummyDataSource.GetInstance()); // 最後のページを追加します pages.AddRange(report.GetPages()); } // PDF出力 using (FileStream fs = new FileStream("output\\example_page.pdf", FileMode.Create)) { pages.Render(new PdfRenderer(fs)); } ' VisualBasic Dim pages As ReportPages With Nothing ' 第2引数にCustomizerオブジェクトを渡します Dim report As New Report(Json.Read("report\example_page1.rrpt"), New Customizer) report.Fill(New ReportDataSource(getDataTable)) pages = report.GetPages() End With With Nothing Dim report As New Report(Json.Read("report\example_page3.rrpt")) report.Fill(DummyDataSource.GetInstance) ' 最後のページを追加します pages.AddRange(report.GetPages) End With ' PDF出力 Using fs As New FileStream("output\example_page.pdf", IO.FileMode.Create) pages.Render(New PdfRenderer(fs)) End Using // Java ReportPages pages; { // 第2引数にCustomizerオブジェクトを渡します Report report = new Report(ReadUtil.readJson("report/example_page1.rrpt"), new Customizer()); report.fill(new ReportDataSource(getDataTable())); pages = report.getPages(); } { Report report = new Report(ReadUtil.readJson("report/example_page3.rrpt")); report.fill(DummyDataSource.getInstance()); // 最後のページを追加します pages.addAll(report.getPages()); } // PDF出力 { FileOutputStream fos = new FileOutputStream("output/example_page.pdf"); try{ pages.render(new PdfRenderer(fos)); }finally{ fos.close(); } } |
Copyright (c) 2013, SystemBase Co.,Ltd. All rights reserved. |