異なるデザインの複数のレポート(表紙と内容など)を合成して、一つのレポートにする方法は?

文書番号 : 27188     文書種別 : 使用方法     最終更新日 : 2009/08/03
文書を印刷する
対象製品
ActiveReports for .NET 6.0J Professional
詳細
PagesコレクションのAddやAddRange、InsertやInsertRangeメソッドを使用することで、レポートやレポートの指定ページを、追加または挿入できます。こちらの機能を利用して、複数のレポートを1つに合成することが可能です。

本機能を応用すれば、両面印刷時の表面と裏面を別のレイアウトにすることや、最終ページから先頭ページへの逆順印刷が可能となります。

◆表裏別レイアウトのサンプルコード(VB.NET)
 Dim rpt1 As New SampleReport1() ' 表面
 Dim rpt2 As New SampleReport2() ' 裏面

 ' それぞれのレポートを作成します。
 rpt1.Run(False)
 rpt2.Run(False)

 For i As Integer = 0 To rpt1.Document.Pages.Count - 1
   ' 各レポートが交互に出力されるように、ページを挿入します。
   rpt1.Document.Pages.Insert(i * 2 + 1, rpt2.Document.Pages(i).Clone)
 Next
 
 Me.Viewer1.Document = rpt1.Document

◆逆順印刷のサンプルコード(VB.NET)
 Dim rpt As New SampleReport1  ' 元のレポート
 Dim rpt1 As New SampleReport1  ' 合成先のレポート

 ' 元のレポートを作成します。
 rpt.Run(False)

 Dim j As Integer = rpt.Document.Pages.Count
 For i As Integer = 0 To rpt.Document.Pages.Count - 1
  ' 最終ページから順番に追加します。
  j -= 1
  rpt1.Document.Pages.Add(rpt.Document.Pages(j).Clone)
 Next
 
 Me.Viewer1.Document = rpt1.Document


なお、Pagesコレクションの各メソッドで合成されるのは、生成済みページのイメージです。
TextBoxコントロールのSummary***プロパティを使用して、ページ番号を出力していたとしても、合成後のページ数に合わせてページ番号が再計算される訳ではありません。

合成後のレポートにページ番号を出力する方法としては、PagesコレクションのDrawTextメソッドを使用して、各ページ上に直接文字列を描画する方法がございます。下記のサンプルコードを参考にご検討ください。

◆サンプルコード(VB.NET)
 Dim rpt1 As New SampleReport1() ' レポート1
 Dim rpt2 As New SampleReport2() ' レポート2

 ' それぞれのレポートを作成します。
 rpt1.Run(False)
 rpt2.Run(False)

 ' レポート1にレポート2をマージします。
 rpt1.Document.Pages.AddRange(rpt2.Document.Pages.Clone)

 ' レポートの下部にページ番号を描画します。
 For i As Integer = 0 To rpt1.Document.Pages.Count - 1
   rpt1.Document.Pages(i).Font = New Font("MS ゴシック", 10.5)
   rpt1.Document.Pages(i).ForeColor = Color.Black
   rpt1.Document.Pages(i).BackColor = Color.Transparent
   rpt1.Document.Pages(i).TextAlignment = _
     DataDynamics.ActiveReports.TextAlignment.Left
   rpt1.Document.Pages(i).VerticalTextAlignment = _
     DataDynamics.ActiveReports.VerticalTextAlignment.Top
   rpt1.Document.Pages(i).DrawText((i + 1).ToString(), _
     DataDynamics.ActiveReports.ActiveReport.CmToInch(21.0 / 2.0), _
     DataDynamics.ActiveReports.ActiveReport.CmToInch(29.7 - 1.0), _
     DataDynamics.ActiveReports.ActiveReport.CmToInch(2.0), _
     DataDynamics.ActiveReports.ActiveReport.CmToInch(1.0))
 Next

 ' レポート1をプレビュー表示します。
 Me.Viewer1.Document = rpt1.Document

◆サンプルコード(C#)
 SampleReport1 rpt1 = new SampleReport1(); //レポート1
 SampleReport2 rpt2 = new SampleReport2(); //レポート2

 // それぞれのレポートを作成します。
 rpt1.Run(false);
 rpt2.Run(false);

 // レポート1にレポート2をマージします。
 rpt1.Document.Pages.AddRange
  ((DataDynamics.ActiveReports.Document.PagesCollection)rpt2.Document.Pages.Clone());

 // レポートの下部にページ番号を描画します。
 for (int i = 0; i < rpt1.Document.Pages.Count; i++)
 {
   rpt1.Document.Pages[i].Font
     = new Font("MS ゴシック", 10.5f);
   rpt1.Document.Pages[i].ForeColor = Color.Black;
   rpt1.Document.Pages[i].BackColor = Color.Transparent;
   rpt1.Document.Pages[i].TextAlignment
     = DataDynamics.ActiveReports.TextAlignment.Left;
   rpt1.Document.Pages[i].VerticalTextAlignment
     = DataDynamics.ActiveReports.VerticalTextAlignment.Top;
   rpt1.Document.Pages[i].DrawText((i + 1).ToString(),
     DataDynamics.ActiveReports.ActiveReport.CmToInch(21.0f / 2.0f),
     DataDynamics.ActiveReports.ActiveReport.CmToInch(29.7f - 1.0f),
     DataDynamics.ActiveReports.ActiveReport.CmToInch(2.0f),
     DataDynamics.ActiveReports.ActiveReport.CmToInch(1.0f));
 }

 // レポート1をプレビュー表示します。
 this.viewer1.Document = rpt1.Document;


また、製品ヘルプの以下の内容もあわせてご覧ください。

PowerTools ActiveReports for .NET 6.0J
 - ActiveReports for .NETユーザーガイド
  - よくある質問
   - レイアウト
    - 複数のレポートを一つに合成する
キーワード
HowTo デザイン・レイアウト

この文書は、以前は次のFAQ IDで公開されていました : 11865