ActiveReportsのプレビュー・印刷機能
レポートデザイナののプレビュー機能と用紙サイズ
第1回でも紹介しましたが、ActiveReports 3.0Jでは、Visual Studioに統合されたレポートデザイナで手軽にプレビューが行えるようになりました。レポートデザイナの左下にある「プレビュー」タブをクリックすると、帳票のプレビューが表示されます。プレビュータブに移動したとき、プロジェクトがビルドされていない場合は、自動的にビルド処理が実行されます。
プレビュー機能で表示できる最大ページ数は、Viewerコントロールと違いデフォルトでは10ページに設定されています。表示するページ数は[レポート]メニューの[レポートの設定]-[グローバル設定]で変更できます。
プレビュー機能での余白(グレーアウト部分)の表示は、[レポート]-[レポートの設定]の[ページ設定]と[プリンタ設定]にあわせて表示されます。指定された用紙の幅よりも、レポート全体の幅が大きい場合、プレビュー画面に赤い線が表示されます。
PageSettings.Margins.Left + PageSettings.Margins.Right + PrintWidth <= PageSettings.PaperWidth
レイアウトの幅はレポートエクスプローラーの一番上[レポートコンテンツ]のPrintWidthプロパティで設定します。
また、[レポート]-[レポートの設定]の[プリンタ設定]には、PCのデフォルトプリンタの印刷設定にある情報を設定できます。また、次のようなコードでプリンタごとに利用可能な用紙サイズを調べることもできます。
//usingディレクティブで「System.Diagnostics」と //「System.Drawing.Printing」を補って下さい。 NewActiveReport1 report = new NewActiveReport1(); foreach (PaperSize paper in report.Document.Printer.PaperSizes) { Debug.Write(paper.Kind.ToString() + ", "); Debug.Write(paper.PaperName.ToString() + ", "); Debug.Write(paper.Height.ToString() + ", "); Debug.WriteLine(paper.Width.ToString()); }
'Importsディレクティブで「System.Diagnostics」と '「System.Drawing.Printing」を補って下さい。 Dim report As New NewActiveReport1 For Each paper As PaperSize In report.Document.Printer.PaperSizes Debug.Write(paper.Kind.ToString() & ", ") Debug.Write(paper.PaperName.ToString() & ", ") Debug.Write(paper.Height.ToString() & ", ") Debug.WriteLine(paper.Width.ToString()) Next
なお、開発者のPCに本番環境で使うプリンタや用紙サイズを設定することができないような場合は、実行時にReportStartイベントで帳票に仮想プリンタを設定して印刷設定を変更する必要があります。仮想プリンタ設定に必要なコードはActiveReportsのコードスニペット(ActiveReports for .NET 3.0J>印刷>仮想プリンタを設定する)に含まれています。
Printメソッド実行時の印刷設定
ActiveReportsで帳票を印刷するには、DocumentプロパティのPrintメソッドを呼び出します。Printメソッドに渡すパラメータを調整することで、ユーザーが印刷内容を確認することのできるダイアログを表示させたり、帳票出力中の進行状況を表示させたりすることができます。
NewActiveReport1 report = new NewActiveReport1(); report.Run(); //Printメソッドを実行する report.Document.Print(true, false, true);
Dim report As New NewActiveReport1() report.Run() 'Printメソッドを実行する report.Document.Print(True, False, True)
Printメソッドのパラメータ指定は前から順にshowPrintDialog、showPrintProgressDialog、usePrintingThreadの値を設定します。
項目 | 内容 |
showPrintDialog | ドキュメントをプリンタに送信する前に、オプションを設定できるための印刷ダイアログを表示するかどうか |
showPrintProgressDialog | 実行中にキャンセルボタンのついた進行状況ダイアログを表示するかどうか |
usePrintingThread | 別スレッドで印刷処理を実行するかどうか |
印刷ダイアログでOKボタンが押されたかどうかを確認する
帳票アプリケーションでは、帳票出力処理を実行したあと、その印刷ジョブがプリンタに送信されたどうかを確認して処理を続行(または中止)することがあります。
ActiveReportsの標準機能ではプリンタ側に送られた印刷ジョブが成功したどうかを直接取得することはできませんが、印刷ダイアログのOKボタンが押されたかどうかはイベントの戻り値で判断することができます。
//印刷ダイアログのボタンを判定 private void printButton_Click(object sender, EventArgs e) { //帳票データ作成 NewActiveReport1 report = new NewActiveReport1(); //帳票作成 report.Run(false); //印刷ダイアログのOK=true/キャンセル=falseが戻り値 bool okButtonIsPushed = report.Document.Print(true, true, true); }
Private Sub PrintButton_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles PrintButton.Click '帳票データ作成 Dim report As New NewActiveReport1 '帳票を生成 report.Run() '印刷ダイアログのOK=true/キャンセル=falseが戻り値 Dim okButtonIsPushed = report.Document.Print() End Sub
Viewerコントロールの印刷ボタンが押されたかどうかを判断したい場合は、ViewerコントロールのToolClickイベントにコードを追加します。具体的には、ToolClickEventArgsクラスのToolプロパティに含まれるID値を使用して判断します。
private void viewer1_ToolClick(object sender, DataDynamics.ActiveReports.Toolbar.ToolClickEventArgs e) { //INDEX=2のコントロール(印刷ボタン)がクリックされた if (e.Tool.Id == 2) { bool printButtonisPushed = true; } }
Private Sub Viewer1_ToolClick( _ ByVal sender As System.Object, _ ByVal e As DataDynamics.ActiveReports.Toolbar.ToolClickEventArgs) _ Handles Viewer1.ToolClick 'INDEX=2のコントロール(印刷ボタン)がクリックされた If e.Tool.Id = 2 Then Dim printButtonisPushed = True End If End Sub