異なるデザインの複数のレポート(表紙と内容など)を合成して、一つのレポートにする方法は?
対象製品
ActiveReports for .NET 6.0J Professional
詳細
PagesコレクションのAddやAddRange、InsertやInsertRangeメソッドを使用することで、レポートやレポートの指定ページを、追加または挿入できます。こちらの機能を利用して、複数のレポートを1つに合成することが可能です。
本機能を応用すれば、両面印刷時の表面と裏面を別のレイアウトにすることや、最終ページから先頭ページへの逆順印刷が可能となります。
◆表裏別レイアウトのサンプルコード(VB.NET)
◆逆順印刷のサンプルコード(VB.NET)
なお、Pagesコレクションの各メソッドで合成されるのは、生成済みページのイメージです。
TextBoxコントロールのSummary***プロパティを使用して、ページ番号を出力していたとしても、合成後のページ数に合わせてページ番号が再計算される訳ではありません。
合成後のレポートにページ番号を出力する方法としては、PagesコレクションのDrawTextメソッドを使用して、各ページ上に直接文字列を描画する方法がございます。下記のサンプルコードを参考にご検討ください。
◆サンプルコード(VB.NET)
◆サンプルコード(C#)
また、製品ヘルプの以下の内容もあわせてご覧ください。
PowerTools ActiveReports for .NET 6.0J
- ActiveReports for .NETユーザーガイド
- よくある質問
- レイアウト
- 複数のレポートを一つに合成する
本機能を応用すれば、両面印刷時の表面と裏面を別のレイアウトにすることや、最終ページから先頭ページへの逆順印刷が可能となります。
◆表裏別レイアウトのサンプルコード(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
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
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
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;
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