DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

印刷する

ここでは印刷を行う基本的な方法を説明します。

印刷はPrintDocumentクラスPrintメソッドで開始し、どのように印刷するかをPrintPageイベントハンドラ内に記述します。PrintPageイベントで受け取るPrintPageEventArgsオブジェクトのGraphicsを利用して、DrawImageやDrawStringメソッドなどを使って描画を行います。Graphics.DrawImageメソッドで画像を描画する方法については、「画像(Imageオブジェクト)を描画する」を参考にしてください。

次の例はフォームにあるボタン(Button1)をクリックすると、ページ余白の内側の部分いっぱいに画像"test.bmp"を表示させるものです。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing

'Button1のClickイベントハンドラ
Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
    'PrintDocumentオブジェクトの作成
    Dim pd As New System.Drawing.Printing.PrintDocument
    'PrintPageイベントハンドラの追加
    AddHandler pd.PrintPage, AddressOf pd_PrintPage
    '印刷を開始する
    pd.Print()
End Sub

Private Sub pd_PrintPage(ByVal sender As Object, _
        ByVal e As System.Drawing.Printing.PrintPageEventArgs)
    '画像を読み込む
    Dim img As Image = Image.FromFile("test.bmp")
    '画像を描画する
    e.Graphics.DrawImage(img, e.MarginBounds)
    '次のページがないことを通知する
    e.HasMorePages = False
    '後始末をする
    img.Dispose()
End Sub
C#
コードを隠すコードを選択
//using System.Drawing;

//Button1のClickイベントハンドラ
private void Button1_Click(object sender, System.EventArgs e)
{
    //PrintDocumentオブジェクトの作成
    System.Drawing.Printing.PrintDocument pd =
        new System.Drawing.Printing.PrintDocument();
    //PrintPageイベントハンドラの追加
    pd.PrintPage +=
        new System.Drawing.Printing.PrintPageEventHandler(pd_PrintPage);
    //印刷を開始する
    pd.Print();
}

private void pd_PrintPage(object sender,
    System.Drawing.Printing.PrintPageEventArgs e)
{
    //画像を読み込む
    Image img = Image.FromFile("test.bmp");
    //画像を描画する
    e.Graphics.DrawImage(img, e.MarginBounds);
    //次のページがないことを通知する
    e.HasMorePages = false;
    //後始末をする
    img.Dispose();
}

この方法では、既定のプリンタ(通常使うプリンタ)を使って印刷します。プリンタを選択して印刷する方法は、プリンタ選択ダイアログを表示して印刷するをご覧ください。

ここではPrintDocumentオブジェクトを自分で作成しましたが、Visual StudioのフォームデザイナでPrintDocumentコンポーネントをフォームに追加して利用する方法もあります。この方法についてはヘルプの「PrintDocument コンポーネント (Windows フォーム)」をご覧ください。

補足:印刷できる範囲をどのように取得できるかを補足します。まず、ページ全体の大きさはPrintPageEventArgs.PageBoundsプロパティで取得できます。また、印刷可能な範囲はPrintPageEventArgs.Graphics.VisibleClipBoundsプロパティで、ページ余白の内側の部分はPrintPageEventArgs.MarginBoundsプロパティでそれぞれ取得できます。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。