|   | 
 
|  
 .NET TIPS 
Windowsアプリケーションで印刷を行うには?
デジタルアドバンテージ 一色 政彦 
2006/01/06 | 
  | 
 
 
 
 | 
   Windowsアプリケーションなどで印刷を行うには、PrintDocumentコンポーネント(System.Drawing.Printing名前空間)を利用する。
ドキュメント印刷用コンポーネントの生成
 まずはPrintDocumentコンポーネントのオブジェクトを生成する必要がある。これは具体的には次のようなコードになる。
 
private System.Drawing.Printing.PrintDocument printDocument1; 
 
public Form1() 
{ 
  printDocument1 = new System.Drawing.Printing.PrintDocument(); 
}
 | 
 
 
 
Friend WithEvents PrintDocument1 As System.Drawing.Printing.PrintDocument 
 
Public Sub New() 
  MyBase.New() 
 
  PrintDocument1 = New System.Drawing.Printing.PrintDocument 
End Sub
 | 
 
 
 | 
 
| PrintDocumentコンポーネント・オブジェクトの生成(上:C#、下:VB.NET) | 
 Visual Studio(.NET 2002/.NET 2003/2005)を使用する場合は、このオブジェクト生成のコードを手動で記述する必要はない。ツールボックスにPrintDocumentコンポーネントが初めから用意されているので、これをフォーム上にドラッグ&ドロップするだけでよい。
実際の印刷処理の実装
 次に実際の印刷処理を実装しよう。これはPrintDocumentコンポーネントのPrintPageイベントのイベント・ハンドラ内に実装すればよい。本稿では次のようなコードを記述した。
 
public Form1() 
{ 
  ……中略…… 
  // PrintPageイベント・ハンドラの追加 
  this.printDocument1.PrintPage += 
    new System.Drawing.Printing.PrintPageEventHandler( 
      this.printDocument1_PrintPage); 
} 
 
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
{ 
  // 印刷ページの描画を行う 
  e.Graphics.DrawString("サンプル印刷", 
    new Font("MS 明朝", 32), Brushes.Black, 
    e.MarginBounds.Left, e.MarginBounds.Top, 
    new StringFormat()); 
}
 | 
 
 
 
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage 
  ' 印刷ページの描画を行う 
  e.Graphics.DrawString("サンプル印刷", _ 
    New Font("MS 明朝", 32), Brushes.Black, _ 
    e.MarginBounds.Left, e.MarginBounds.Top, _ 
    New StringFormat) 
End Sub
 | 
 
 
 | 
 
| PrintDocumentコンポーネントのPrintPageイベント・ハンドラの実装(上:C#、下:VB.NET) | 
 このコードでは、PrintPageイベント・ハンドラ(本稿の例のC#版ではprintDocument1_PrintPageメソッド、VB.NET版ではPrintDocument1_PrintPageメソッド)を追加し、そのイベント・ハンドラ内に印刷ページに対して描画を行うためのコードを記述している。
 印刷ページに描画を行うには、Graphicsオブジェクト(System.Drawing名前空間)を使用する。このGraphicsオブジェクトは、PrintPageイベント・ハンドラの第2パラメータのPrintPageEventArgsオブジェクト(System.Drawing.Printing名前空間)が持つGraphicsプロパティから取得できる。これは上記コードでは「e.Graphics」の部分に該当する。ここでは、GraphicsオブジェクトのDrawStringメソッドを呼び出して、印刷ページに文字列を描画している。
 なおDrawStringメソッドにはいくつかのオーバーロードがあるので詳しくはMSDNの「Graphics.DrawString メソッド」の項を参照してほしいが、本稿で使用したバージョンのDrawStringメソッドでは、その第1パラメータに描画する文字列(本稿の例では「サンプル印刷」)を、第2パラメータにフォント(「MS明朝」の「32」)を、第3パラメータにブラシ(「標準の黒色ブラシ」)を、第4パラメータに描画開始X座標(「ページ余白の左上隅のX座標」)を、第5パラメータに描画開始Y座標(「ページ余白の左上隅のY座標」)を、第6パラメータに書式属性(「標準の書式」)を指定している。
 またPrintDocumentコンポーネントのPrintPageイベント・ハンドラの追加に関しても、Visual Studioを利用すればその作業が簡略化される。具体的には次の画面を参照してほしい。
 
  | 
 
| Visual StudioによるPrintPageイベント・ハンドラの追加 | 
 
| Visual Studioを利用すればPrintPageイベント・ハンドラも簡単に追加できる。 | 
 
 
 
|    | 
  | 
ツールボックスからPrintDocumentコンポーネントをフォーム上にドラッグ&ドロップする。これにより、PrintDocumentコンポーネント(この例では「printDocument1」)がフォームに追加される。 | 
 
 
|    | 
  | 
追加されたPrintDocumentコンポーネントをダブルクリックすると、PrintPageイベント・ハンドラが自動的に追加される。後はそのイベント・ハンドラ内に印刷処理コードを記述するだけだ。 | 
 
 
 | 
 以上で印刷処理の実装は完了だ。ただしここで示した印刷方法では1ページしか印刷されない。複数ページを印刷する方法については、また後日公開予定のTIPSで紹介しよう。
印刷処理の実行
 後は実装した印刷処理を実行するだけである。これを行うには、PrintDocumentコンポーネントのPrintメソッド(パラメータなし、戻り値なし)を呼び出せばよい。
 本稿ではフォーム上にボタンを追加して、そのClickイベント・ハンドラにPrintメソッドの呼び出しを記述する。具体的には次のようなコードになる。ちなみにVisual Studioを使用している場合、Windowsフォーム上に配置したボタンをダブルクリックすることでClickイベント・ハンドラが自動的に追加される。
 
private void button1_Click(object sender, System.EventArgs e) 
{ 
  // 印刷処理を実行 
  printDocument1.Print(); 
}
 | 
 
 
 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
  ' 印刷処理を実行 
  PrintDocument1.Print() 
End Sub
 | 
 
 
 | 
 
| PrintDocumentコンポーネントのPrintメソッドの呼び出し(上:C#、下:VB.NET) | 
サンプル・プログラムの実行
 以上の手順で実装したサンプル・プログラムを実行したのが次の画面だ。
 
  | 
 
| 印刷を実行するWindowsアプリケーションのサンプル・プログラム | 
 
| ボタン(この例では[button1]ボタン)をクリックすると、印刷処理が呼び出されて実行される。 | 
 この画面ではボタン・クリックによる印刷処理の呼び出しの後に[印刷中]ダイアログが表示されているが、これはPrintDocumentコンポーネントのPrintメソッドを実行すると.NET Frameworkが自動的に表示してくれるものである。
 
カテゴリ:Windowsフォーム 処理対象:印刷 
カテゴリ:クラス・ライブラリ 処理対象:印刷 
使用ライブラリ:PrintDocumentクラス(System.Drawing.Printing名前空間) 
使用ライブラリ:PrintPageEventArgsクラス(System.Drawing.Printing名前空間) 
使用ライブラリ:Graphicsオブジェクト(System.Drawing名前空間) | 
 
|  
 | 
 
generated by  
 | 
 
 
 | 
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間