印刷ダイアログを表示させると、コードから指定した印刷範囲の設定が印刷ダイアログに反映されない

文書番号 : 36894     文書種別 : 不具合     登録日 : 2013/12/20     最終更新日 : 2014/04/16
文書を印刷する
対象製品
ActiveReports for .NET 7.0J
状況
修正済み
詳細
※この現象はセクションレポートおよびページレポートの両方で発生します。

Printer.DefaultPageSettings.PrintRangeプロパティなどを使用するとコード上から印刷時の印刷範囲をあらかじめ指定することが可能ですが、その印刷時に印刷設定ダイアログを表示させると、指定した印刷範囲がダイアログに反映されません。

Printメソッドの第一引数を"False"に設定して印刷を行った場合、印刷設定ダイアログを表示せずに印刷されるため、コード上で指定した印刷範囲で正常に印刷されます。

セクションレポートの場合


◆サンプルコード(VB.NET)
Dim rpt As New SectionReport1()

' 2ページ目から3ページ目を印刷範囲に指定します。
rpt.Document.Printer.PrinterSettings.PrintRange = System.Drawing.Printing.PrintRange.SomePages
rpt.Document.Printer.PrinterSettings.FromPage = 2
rpt.Document.Printer.PrinterSettings.ToPage = 3

rpt.Run()
rpt.Document.Print()
'rpt.Document.Print(false) ' 印刷ダイアログを表示しない場合、現象は発生しません。


◆サンプルコード(C#)
SectionReport1 rpt = new SectionReport1();

// 2ページ目から3ページ目を印刷範囲に指定します。
rpt.Document.Printer.PrinterSettings.PrintRange = System.Drawing.Printing.PrintRange.SomePages;
rpt.Document.Printer.PrinterSettings.FromPage = 2;
rpt.Document.Printer.PrinterSettings.ToPage = 3;

rpt.Run();
rpt.Document.Print();
//rpt.Document.Print(false); // 印刷ダイアログを表示しない場合、現象は発生しません。


ページレポートの場合


◆サンプルコード(VB.NET)
Dim rpt As New GrapeCity.ActiveReports.PageReport()
rpt.Load(New System.IO.FileInfo("PageReport1.rdlx"))
Dim pageDocument As New GrapeCity.ActiveReports.Document.PageDocument(rpt)

' 2ページ目から3ページ目を印刷範囲に指定します。
pageDocument.Printer.PrinterSettings.PrintRange = System.Drawing.Printing.PrintRange.SomePages
pageDocument.Printer.PrinterSettings.FromPage = 2
pageDocument.Printer.PrinterSettings.ToPage = 3

pageDocument.Print()
'pageDocument.Print(false) ' 印刷ダイアログを表示しない場合、現象は発生しません。


◆サンプルコード(C#)
GrapeCity.ActiveReports.PageReport rpt = new GrapeCity.ActiveReports.PageReport();
rpt.Load(new System.IO.FileInfo("PageReport1.rdlx"));
GrapeCity.ActiveReports.Document.PageDocument pageDocument
  = new GrapeCity.ActiveReports.Document.PageDocument(rpt);

// 2ページ目から3ページ目を印刷範囲に指定します。
pageDocument.Printer.PrinterSettings.PrintRange = System.Drawing.Printing.PrintRange.SomePages;
pageDocument.Printer.PrinterSettings.FromPage = 2;
pageDocument.Printer.PrinterSettings.ToPage = 3;

pageDocument.Print();
//pageDocument.Print(false); // 印刷ダイアログを表示しない場合、現象は発生しません。
回避方法
この問題はService Pack 3(v7.3.7964.1)で修正されました。
不具合を修正した最新のサービスパックをご使用ください。

SP3を使用しない場合の回避方法は以下のとおりです。

.NET標準の印刷設定ダイアログ(System.Windows.Forms.PrintDialog)を使用する方法が考えられます。

ただし、この方法の場合、ページ設定ダイアログ(印刷時に複数ページを1枚の用紙に出力する設定やマージン指定、ウォーターマークを出力指定ができる)は利用できません。

詳細については、以下のKB文書にある「2. .NET標準の印刷設定ダイアログ(System.Windows.Forms.PrintDialog)を使用する方法」のコードをご覧ください。

Windowsフォームアプリでレポートを印刷する際、印刷ダイアログ上で押されたボタンを判断する方法は?

<注意>
Service Pack 2(v7.2.8529.1)を適用し、.NET標準の印刷設定ダイアログを使用した場合、以下の問題が発生することが確認されています。Service Pack 2を適用した環境で本回避策を実装する場合はご注意ください。

SP2を適用し、.NET標準の印刷設定ダイアログ(System.Windows.Forms.PrintDialog)を実装すると、印刷設定ダイアログから設定した内容が実際の印刷動作・結果に反映されない
SP2を適用し、.NET標準の印刷設定ダイアログ(System.Windows.Forms.PrintDialog)を実装すると、印刷ダイアログからプリンタ固有の一部のオプションが変更できなくなる
キーワード
10089