セクションレポートのプレビュー時、ページの右側に赤い線が表示される
対象製品
ActiveReports for .NET 7.0J
詳細
Windowsフォーム用のViewerコントロールにセクションレポートを表示させた時に赤い線が表示される場合、以下の原因が考えられます。ご確認ください。
なお、赤い線が表示されたままでも印刷することは可能です。ただし、その場合は赤い線で区切られた左側と右側は別々の用紙に印刷されます。その結果、1ページおきに白紙が印刷されるように見える場合がございます。ご注意ください。
- 用紙の幅よりレポート全体の幅が大きい
プレビュー時の赤い線は、指定された用紙の幅を示します。指定された用紙の幅よりも、レポート全体の幅が大きい場合に、プレビュー時に赤い線が表示されます。
この赤い線を消すには、レポートの幅(ActiveReportオブジェクトのPrintWidthプロパティ)と左右のマージン(PageSettingsオブジェクトのMargins.Left,Margins.Rightプロパティ)および、とじしろ(PageSettingsオブジェクトのGutterプロパティ)を足した値が、用紙の幅(PrinterオブジェクトのPaperWidthプロパティまたはPaperHeightプロパティ)を超えないようにする必要があります。
つまり、「PageSettings.Margins.Left + PageSettings.Margins.Right + PageSettings.Gutter + PrintWidth <= Document.Printer.PaperWidth(Document.Printer.PaperHeight)」を守る必要があります。
下記のいずれかの方法で、レポート上に赤い線が表示されないよう調整してください。
- [レポートの設定]ダイアログで、マージンおよびとじしろの値を小さくしたり、用紙サイズを大きいものに変更する。
- デザイナ画面で、レポートの幅(PrintWidthプロパティ)を小さく設定する。
- コード上で、適切な用紙の向き、レポートの幅、マージンおよびとじしろを設定する。
以下のサンプルコードでは、レポートの幅(PrintWidthプロパティ)を、用紙の向きやマージンおよびとじしろに合わせて調整しています。
◆サンプルコード(VB.NET)
Private Sub ActiveReport1_ReportStart(...) Handles MyBase.ReportStart
If Me.PageSettings.Orientation = PageOrientation.Landscape Then
' 用紙が横方向の場合
Me.PrintWidth = Me.Document.Printer.PaperHeight _
- (Me.PageSettings.Margins.Left + Me.PageSettings.Margins.Right _
+ Me.PageSettings.Gutter)
Else
' 用紙が縦方向の場合
Me.PrintWidth = Me.Document.Printer.PaperWidth _
- (Me.PageSettings.Margins.Left + Me.PageSettings.Margins.Right _
+ Me.PageSettings.Gutter)
End If
End Sub
◆サンプルコード(C#)
private void NewActiveReport1_ReportStart(object sender, EventArgs e)
{
if (this.PageSettings.Orientation == PageOrientation.Landscape)
{
// 用紙が横方向の場合
this.PrintWidth = this.Document.Printer.PaperHeight
- (this.PageSettings.Margins.Left + this.PageSettings.Margins.Right
+ this.PageSettings.Gutter);
}
else
{
// 用紙が縦方向の場合
this.PrintWidth = this.Document.Printer.PaperWidth
- (this.PageSettings.Margins.Left + this.PageSettings.Margins.Right
+ this.PageSettings.Gutter);
}
}
- レポートの合成を行っている
AddRange や Addメソッド等を使用することで複数のレポートを1つのレポートに合成することが可能です。この場合、合成先のレポートの用紙サイズが、印刷時の用紙サイズとなります。
合成先のレポートインスタンスが 基本クラスである ActiveReportクラスそのものである場合や、合成先のレポートについて Runメソッドを実行していない場合には、ActiveReportクラスのデフォルト用紙サイズである Letterサイズ(幅8.5インチ×高さ11インチ)がレポートの用紙サイズとして適用されます。
この時、用紙サイズがA4サイズ(幅8.27×高さ11.69インチ)のレポートを合成すると、A4サイズのレポートをLetterサイズで印刷することになります。
Letterサイズは、A4サイズより幅がわずかに広く、長さがやや短くなっております。このため、合成元のレポート(A4)の用紙方向が縦である場合は、合成先のレポート(Letter)の方が幅が広く、余裕があるので赤い線は表示されません。(8.5インチ>8.27インチ)
しかしながら、合成元のレポートの用紙方向が横である場合、合成先のレポートの印刷幅の方が狭くなるため、赤い線が表示されてしまいます。(11インチ<11.69インチ)
つまり、幅11.69インチのレポートを幅11インチで印刷すると判断され、Viewer上に赤い線が表示されます。
上記の事象を回避するためには、以下のような方法が考えられます。
- 合成先のレポートインスタンスについてRunメソッドを実行する方法
※この場合、合成先のレポートは、ActiveReportクラスではなく、用紙サイズの設定がされているレポートクラスを使用する。
◆サンプルコード(VB.NET)
' 用紙サイズの設定のみを行った合成用の空レポート。
Dim oRpt1 As New rptDummy
' 合成元のレポート
Dim oRpt2 As New rptSample
' 合成先のレポートを実行し、生成されたページを全て削除します。
oRpt1.Run()
oRpt1.Document.Pages.Clear()
' 合成元のレポートを実行し、合成先のレポートに追加します。
oRpt2.Run(False)
oRpt1.Document.Pages.AddRange(oRpt2.Document.Pages)
◆サンプルコード(C#)
// 用紙サイズの設定のみを行った合成用の空レポート。
rptDummy oRpt1 = new rptDummy();
// 合成元のレポート
rptSample oRpt2 = new rptSample();
// 合成先のレポートを実行し、生成されたページを全て削除します。
oRpt1.Run();
oRpt1.Document.Pages.Clear();
// 合成元のレポートを実行し、合成先のレポートに追加します。
oRpt2.Run(false);
oRpt1.Document.Pages.AddRange(oRpt2.Document.Pages); - 合成先レポートの用紙サイズを指定する方法
Runメソッドを実行せずに、Document.Printerクラスのプロパティを変更するだけでも用紙サイズを設定することが可能です。
◆サンプルコード(VB.NET)
oRpt1.Document.Printer.PaperKind = System.Drawing.Printing.PaperKind.A4
◆サンプルコード(C#)
oRpt1.Document.Printer.PaperKind = System.Drawing.Printing.PaperKind.A4;
上記の方法については、製品ヘルプの以下のトピックもご参照ください。
PowerTools ActiveReports for .NET 7.0J
- ActiveReportsユーザーガイド
- よくある質問
- セクションレポート
- 印刷
- 用紙サイズ(規定サイズ)や余白を変更する
- 合成先のレポートインスタンスについてRunメソッドを実行する方法
なお、赤い線が表示されたままでも印刷することは可能です。ただし、その場合は赤い線で区切られた左側と右側は別々の用紙に印刷されます。その結果、1ページおきに白紙が印刷されるように見える場合がございます。ご注意ください。
関連情報
- [09206]AddやAddRangeで用紙方向が異なるレポート同士(例:A4横とA4縦)を合成した場合、印刷時に不要な空白ページが出力される場合がある
- セクションレポートの印刷時、1ページ毎に白紙が印刷される
キーワード
問題