Visual Basic.NET 印刷編 目次 印刷の概要... 2 印刷の流れ... 2 標準の Windows フォーム印刷ジョブの作成... 3 実行時に於ける Windows フォーム印刷オプションの変更... 3 Windows フォームに於ける接続されたプリンタの選択... 4 Windows フォームでのグラフィックスの印刷... 5 Windows フォームでのテキストの印刷... 5 Windows フォームの印刷ジョブの完了... 6 Windows アプリケーションでの印刷プレビューの表示... 6-1-
印刷の概要 印刷の流れ Windows フォームで印刷を行う為の主な作業は PrintDocument コンポーネントを使用してユーザーが印刷出来る様にする事と PrintPreviewDialog コントロール PrintDialog コンポーネント 及び PageSetupDialog コンポーネントを使用して Windows オペレーティングシステムに慣れて居るユーザーに使い慣れたグラフィカルインターフェイスを提供する事で有る 通常 印刷を行う場合には PrintDocument コンポーネントの新しいインスタンスを作成し PrinterSettings クラスと PageSettings クラスを使用して印刷対象を定義してから Print メソッドを呼び出してドキュメントを実際に印刷する Windows アプリケーションから印刷を行って居る間 PrintDocument コンポーネントは 印刷中止ダイアログボックスを表示して 印刷が実行中で有る事をユーザーに通知し ユーザーが印刷ジョブをキャンセル出来る様にして居る 実際に印刷の実行を指示した時 (PrintDocument オブジェクトの Print メソッドを実行した時 ) の印刷の流れは 下記の様に成る PrintDocument オブジェクトの Print メソッドの実行 PrintDocument オブジェクトの BeginPrint イベントの発生 PrintDocument オブジェクトの PrintPage イベントの発生 e.graphics オブジェクトに依る描画 e.hasmorepages が True か? はい (True) いいえ (False) PrintDocument オブジェクトの EndPrint イベントの発生 印刷の開始 猶 PrintPreviewDialog オブジェクトの Document プロパティが有効な PrintDocument オブジェクトと関連付けられて居る場合 ShowDialog メソッドを実行した場合も 上記の流れが生じる -2-
標準の Windows フォーム印刷ジョブの作成 Windows フォームでの印刷の基盤と成るのは PrintDocument コンポーネントで有る 更に具体的に謂えば PrintPage イベントで有る 此のイベントを処理するコードを記述する事に依り 印刷対象と印刷方法を指定する事が出来る デザイン時に印刷ジョブを作成する手順は 下記の通りで有る 1. フォームに PrintDocument コンポーネントを追加する 3.PrintPage イベントを処理するコードを記述する 下記の例では 印刷対象と仕て PrintPage イベントハンドラ内でサンプルグラフィック ( 赤色の四角形 ) を作成して居る Private Sub PrintDocument1_PrintPage( e.graphics.fillrectangle(brushes.red, New Rectangle(500, 500, 500, 500)) 亦 BeginPrint イベントや EndPrint イベントに対するコードを記述する事が必要な場合も有る 其の場合 各ページが印刷される度に 印刷する合計ページ数を表す整数がデクリメントされる様にする事も出来る フォームに PrintDialog コンポーネントを追加して 明快で効率的なユーザーインターフェイスをユーザーに提供する事も出来る PrintDialog コンポーネントの Document プロパティを設定する事に依り フォーム上で作業中の印刷ドキュメントに関連するプロパティを設定する事が出来る 実行時に於ける Windows フォーム印刷オプションの変更 印刷に関連するオプションは デザイン時に設定する事も出来るが オプションを実行時に変更する事が必要な場合も有る 此れは 主に ユーザーに依る選択内容に基づく 此の設定は PrintDialog コンポーネントと PrinterSettings クラスを使用して行う 印刷オプションをプログラムで変更する手順は 下記の通りで有る 1. ツールボックスから PrintDialog コンポーネントをフォームにドラッグする 3.ShowDialog メソッドを使用して PrintDialog コンポーネントを表示する PrintDialog1.ShowDialog( ) 4.PrintDialog コンポーネントの PrinterSettings プロパティを使用して ユーザーが選択した印刷設定を取得する PrinterSettings クラスは ドキュメントの印刷方法に関する情報 ( 印刷に使用するプリンタ等 ) を指定するクラスで 通常 PrintDocument.PrinterSettings プロパティや PageSettings.PrinterSettings プロパティを使用して PrinterSettings にアクセスし プリンタ設定を変更する 各プロパティに付いては ヘルプの PrinterSettings メンバを参照され度い -3-
Windows フォームに於ける接続されたプリンタの選択 ユーザーが既定のプリンタ以外のプリンタを印刷先と仕て選択する事は良く有る 現在インストールされて居るプリンタの中からプリンタを選択する処理は PrintDialog コンポーネントを使用して実行される PrintDialog コンポーネントの DialogResult が取り込まれ 其れに基づいてプリンタが選択される ダイアログボックスの DialogResult プロパティの取り込みと使用の詳細に付いては ヘルプの ダイアログボックスを閉じてユーザー入力を保持する を参照され度い 下記の例では テキストファイルを既定のプリンタで印刷する様に選択する 其の後で PrintDialog クラスがインスタンス化される プリンタを選択してファイルを印刷する手順は 下記の通りで有る 1.PrintDialog コンポーネントを使用して 使用するプリンタを選択する 下記の例では 2 種のイベントが処理される 最初のイベントで有る Button コントロールの Click イベントでは PrintDialog クラスがインスタンス化され ユーザーに依り選択されたプリンタが DialogResult プロパティに取り込まれる 2 番目のイベントで有る PrintDocument コンポーネントの PrintPage イベントでは 指定されたプリンタでサンプルドキュメントが印刷される Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Button1.Click Dim PrintDialog1 As New PrintDialog( ) PrintDialog1.Document = PrintDocument1 Dim result As DialogResult = PrintDialog1.ShowDialog( ) If (result = DialogResult.OK) Then PrintDocument1.Print( ) End If Private Sub PrintDocument1_PrintPage( _ e.graphics.fillrectangle(brushes.red, New Rectangle(500, 500, 500, 500)) -4-
Windows フォームでのグラフィックスの印刷 Windows アプリケーションでグラフィックスの印刷が必要になる事は良く有る Graphics クラスは 画面やプリンタ等のデバイスにオブジェクトを描画する手段を提供する グラフィックスを印刷する手順は 下記の通りで有る 1. フォームに PrintDocument コンポーネントを追加する 3.PrintPage イベントハンドラで PrintPageEventArgs クラスの Graphics プロパティを使用して 印刷するグラフィックスの種類をプリンタに指示する 下記の例では イベントハンドラを使用して 外接する四角形の中に青色の楕円を作成する 此の四角形は 位置が 100, 150 で始まり 面積が幅 250 高さ 250 で有る Private Sub PrintDocument1_PrintPage( _ e.graphics.fillellipse(brushes.blue, New Rectangle(100, 150, 250, 250)) Windows フォームでのテキストの印刷 Windows アプリケーションでテキストを印刷するのは 極く一般的な操作で有る Graphics クラスは 画面やプリンタ等のデバイスにオブジェクト ( グラフィックスやテキスト ) を描画する手段を提供する テキストを印刷する手順は 下記の通りで有る 1. フォームに PrintDocument コンポーネントを追加する 3.PrintPage イベントハンドラで PrintPageEventArgs クラスの Graphics プロパティを使用して 印刷するテキストの種類をプリンタに指示する 下記の例では イベントハンドラを使用して Arial フォントの黒色の文字列 "SampleText" を点 150, 125 から印刷する Private Sub PrintDocument1_PrintPage( _ e.graphics.drawstring("sampletext", New Font("Arial", 80, FontStyle.Bold), _ Brushes.Black, 150, 125) -5-
Windows フォームの印刷ジョブの完了 印刷ジョブを扱うワードプロセッサ等のアプリケーションは 多くの場合 印刷ジョブが完了したと謂うメッセージを表示するオプションを用意して居る 此れは PrintDocument コンポーネントの EndPrint イベントを処理する事に依り Windows フォーム上で簡単に実現する事が出来る 下記に示す手順では PrintDocument コンポーネントを使用して Windows アプリケーションが作成されて居ると仮定して居る 此れは Windows アプリケーションから印刷を行う為の標準的な方法で有る 印刷ジョブを完了する手順は 下記の通りで有る 1.[ プロパティ ] ウィンドウで PrintDocument コンポーネントの DocumentName プロパティを設定する 又は 下記の様に コードでも設定する事が出来る PrintDocument1.DocumentName = "MyTextFile" 3.EndPrint イベントを処理するコードを記述する 下記の例では ドキュメントの印刷が完了した事を示すメッセージボックスが表示される Private Sub PrintDocument1_EndPrint( _ ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) _ Handles PrintDocument1.EndPrint MessageBox.Show(PrintDocument1.DocumentName + " has finished printing.") Windows アプリケーションでの印刷プレビューの表示 アプリケーションで良く使用される機能に 印刷プレビューが有る 此れに依り ユーザーは 印刷するドキュメントの画面上のサンプルを表示出来る Windows フォームでは PrintPreviewDialog コントロールに依り此の機能が提供される 亦 印刷プレビュー機能のカスタム実装を行う場合は ツールボックス内の PrintPreviewControl を使用出来る PrintPreview コントロールの詳細に付いては ヘルプの PrintPreviewControl コントロール を参照され度い 下記に示す手順では PrintDocument コンポーネントを使用して Windows アプリケーションが作成されて居ると仮定して居る 此れは Windows アプリケーションから印刷を行う為の標準的な方法で有る [ 印刷プレビュー ] ダイアログボックスを表示する手順は 下記の通りで有る 1. フォームに PrintPreviewDialog コントロールを追加する 2.PrintPreviewDialog コントロールの Document プロパティに ドキュメントの印刷に使用する PrintDocument コンポーネントを設定する 3. フォームを右クリックし [ コードの表示 ] をクリックする 4.ShowDialog メソッドを使用して PrintPreviewDialog コントロールを表示する 場合に依り 此のイベントをボタンやメニュー項目のクリックの結果と仕て発生させる必要が有る PrintPreviewDialog コントロールを何の様に実装するかは アプリケーションの特性と ユーザーに提供するインターフェイスに依り異なる -6-
下記の例では メニュー項目 (miprintprev) の選択の結果と仕て PrintPreviewDialog コントロールを表示して居る Private Sub miprintprev_click( _ Handles miprintprev.click PrintPreviewDialog1.ShowDialog() -7-