|
.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 記事ランキング
本日
月間