レポート生成・印刷時の問題点
ActiveReportsは、レポート生成時(Runメソッド実行時)や、デザイン画面上で[レポートの設定]ダイアログを表示したときに、その環境のプリンタドライバから用紙サイズ等の情報を取得します。その際に参照されるプリンタは、(特に指定しない限り)その環境上で「通常使うプリンタ」に指定されているものです。この機能は、開発者が用紙に関する情報をひとつひとつレポートに設定しなくてもよい反面、下記に挙げる問題を引き起こします。
- 実行環境にプリンタがインストールされていない場合、用紙サイズ情報を取得することができず、レポートを生成することができない。
- 接続されたプリンタ(プリンタドライバ)がサポートしている用紙サイズ以外のレポートを作成することができない。
- 開発環境と実行環境とで、接続されたプリンタ(プリンタドライバ)やその設定が異なる場合、レポート生成時にエラーが発生する場合がある。
- レポート実行環境とプレビュー・印刷環境が異なる場合、それぞれの環境に接続されたプリンタ(プリンタドライバ)の相違から、想定外の問題が発生する可能性がある。
- アプリケーションの実行ユーザーによっては、アクセス権限の問題が生じて、接続されたプリンタ(プリンタドライバ)から情報を読み取れない場合や、エラーが発生する場合がある。
- レポート生成時に、プリンタ情報を取得するための処理オーバーヘッドが生じる。
仮想プリンタとは
上述の問題を回避するために、ActiveReportsには仮想プリンタ機能が用意されています。仮想プリンタを指定した場合、レポートは実行環境に接続されたプリンタからの情報取得は行わず、用紙情報はユーザーが任意に指定します。この結果、レポートの実行環境に接続されたプリンタに依存しないレポートの生成が可能となります。
注意: 仮想プリンタを指定して生成したレポートをWindowsフォーム用のレポートビューワで印刷する場合、印刷を行うプリンタに関する情報がビューワに受け渡されないため、特に何も設定をしない場合、印刷を実際に行う環境上の「プリンタのデフォルト値」で印刷されます。
仮想プリンタの設定方法
コードから設定します。
Visual Basic
Visual Basicコード |
コードのコピー
|
Private Sub NewActiveReport1_ReportStart(...) Handles Me.ReportStart
' 仮想プリンタを使用します。
Me.Document.Printer.PrinterName = ""
' 用紙サイズを A4縦 に設定します。
Me.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.A4
Me.PageSettings.Orientation = GrapeCity.ActiveReports.Document.Section.PageOrientation.Portrait
End Sub
|
C#
C#コード |
コードのコピー
|
private void NewActiveReport1_ReportStart(object sender, EventArgs e)
{
// 仮想プリンタを使用します。
this.Document.Printer.PrinterName = "";
// 用紙サイズを A4縦 に設定します。
this.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.A4;
this.PageSettings.Orientation = GrapeCity.ActiveReports.Document.Section.PageOrientation.Portrait;
}
|
仮想プリンタが有効となるケース
仮想プリンタが特に有効となるのは、以下のような場合です。
- レポートを生成する環境と、プレビュー・印刷する環境が異なる
Webアプリケーションは、サーバーでレポートの生成を行いますが、プレビュー・印刷は各クライアントのブラウザで行われます。一般的に、Webサーバーに接続されたプリンタ(レポートの生成に使用するプリンタ)と、クライアントに接続されたプリンタ(レポートを印刷するプリンタ)は異なります。この場合、サーバーに接続されたプリンタの情報を取得することはあまり意味を持たない上、想定外の問題を引き起こす可能性があります。Webアプリケーションの場合は、仮想プリンタの使用をお勧めします。
- プリンタドライバがサポートしていない用紙サイズに出力する
仮想プリンタを使えば、プリンタドライバがサポートしていない用紙サイズのレポートを作成することができます。詳細については、「印刷」の「プリンタドライバがサポートしていない用紙サイズに出力する」を参照してください。
- レポートの印刷が最終目的ではない
たとえば、レポートをPDFに出力することが目的であり、印刷を行う必要が無い場合は、実プリンタの情報は取得せずに、仮想プリンタを使用することで、実行環境に接続された各種プリンタに依存しないPDFファイルを生成することができます。