次の方法で共有


PrintDocument.PrintPage イベント

現在のページに印刷する出力が必要なときに発生します。

Public Event PrintPage As PrintPageEventHandler
[C#]
public event PrintPageEventHandler PrintPage;
[C++]
public: __event PrintPageEventHandler* PrintPage;

[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。

イベント データ

イベント ハンドラが、このイベントに関連するデータを含む、PrintPageEventArgs 型の引数を受け取りました。次の PrintPageEventArgs プロパティには、このイベントの固有の情報が記載されます。

プロパティ 説明
Cancel 印刷ジョブをキャンセルするかどうかを示す値を取得または設定します。
Graphics ページの描画に使用される Graphics を取得します。
HasMorePages 追加のページを印刷するかどうかを示す値を取得または設定します。
MarginBounds ページ余白の内側の部分を表す四角形領域を取得します。
PageBounds ページの全領域を表す四角形領域を取得します。
PageSettings 現在のページのページ設定を取得します。

解説

印刷する出力ファイルを指定するには、 PrintPageEventArgs に含まれている Graphics を使用します。たとえば、印刷するテキストの行を指定するには、 Graphics.DrawString メソッドを使用してテキストを描画します。

出力を指定する他に、 PrintPageEventArgs.HasMorePages プロパティを true に設定することによって、印刷する追加ページがあるかどうかを指定できます。また、 PageSettings を使用して、個別のページ設定を変更できます。 PrintPageEventArgs.Cancel プロパティを true に設定することによって、印刷ジョブを取り消すこともできます。既定値は false です。印刷するページが終了したことを示します。ページごとに異なるページ設定を使用してドキュメントを印刷するには、 QueryPageSettings イベントを処理します。

イベントをイベント ハンドラに関連付けるには、 PrintPageEventHandler デリゲートのインスタンスをイベントに追加します。イベント ハンドラは、該当するイベントが発生すると必ず呼び出されます。デリゲートを使用したイベント処理の詳細については、「 イベントとデリゲート 」を参照してください。

使用例

[Visual Basic, C#, C++] コマンド ラインで指定したファイルを既定のプリンタに出力する例を次に示します。

[Visual Basic, C#, C++] メモ   この例は、各行がページ幅内に収まることを前提にしています。

[Visual Basic, C#, C++] この例では、 System.ComponentModelSystem.DrawingSystem.Drawing.PrintingSystem.IO 、および System.Windows.Forms の各名前空間を使用します。

 
Public Class PrintingExample
    Private printFont As Font
    Private streamToPrint As StreamReader
    Private Shared filePath As String
    
    Public Sub New()
        Printing()
    End Sub    
    
    ' The PrintPage event is raised for each page to be printed.
    Private Sub pd_PrintPage(sender As Object, ev As PrintPageEventArgs)
        Dim linesPerPage As Single = 0
        Dim yPos As Single = 0
        Dim count As Integer = 0
        Dim leftMargin As Single = ev.MarginBounds.Left
        Dim topMargin As Single = ev.MarginBounds.Top
        Dim line As String = Nothing
        
        ' Calculate the number of lines per page.
        linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics)
        
        ' Iterate over the file, printing each line.
        While count < linesPerPage
            line = streamToPrint.ReadLine()
            If line Is Nothing Then
                Exit While
            End If
            yPos = topMargin + count * printFont.GetHeight(ev.Graphics)
            ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, _
                yPos, New StringFormat())
            count += 1
        End While
        
        ' If more lines exist, print another page.
        If Not (line Is Nothing) Then
            ev.HasMorePages = True
        Else
            ev.HasMorePages = False
        End If
    End Sub
     
    ' Print the file.
    Public Sub Printing()
        Try
            streamToPrint = New StreamReader(filePath)
            Try
                printFont = New Font("Arial", 10)
                Dim pd As New PrintDocument()
                AddHandler pd.PrintPage, AddressOf pd_PrintPage
                ' Print the document.
                pd.Print()
            Finally
                streamToPrint.Close()
            End Try
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub 'Printing    
    
    ' This is the main entry point for the application.
    Public Shared Sub Main()
        Dim args() As String = System.Environment.GetCommandLineArgs()
        Dim sampleName As String = args(0)
        If args.Length <> 1 Then
            Console.WriteLine("Usage: " & sampleName & " <file path>")
            Return
        End If
        filePath = args(0)
    End Sub
End Class


[C#] 
public class PrintingExample 
{
    private Font printFont;
    private StreamReader streamToPrint;
    static string filePath;


    public PrintingExample() 
    {
        Printing();
    }

    // The PrintPage event is raised for each page to be printed.
    private void pd_PrintPage(object sender, PrintPageEventArgs ev) 
    {
        float linesPerPage = 0;
        float yPos =  0;
        int count = 0;
        float leftMargin = ev.MarginBounds.Left;
        float topMargin = ev.MarginBounds.Top;
        String line=null;
            
        // Calculate the number of lines per page.
        linesPerPage = ev.MarginBounds.Height  / 
           printFont.GetHeight(ev.Graphics) ;

        // Iterate over the file, printing each line.
        while (count < linesPerPage && 
           ((line=streamToPrint.ReadLine()) != null)) 
        {
           yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
           ev.Graphics.DrawString (line, printFont, Brushes.Black, 
              leftMargin, yPos, new StringFormat());
           count++;
        }

        // If more lines exist, print another page.
        if (line != null) 
           ev.HasMorePages = true;
        else 
           ev.HasMorePages = false;
    }

    // Print the file.
    public void Printing()
    {
        try 
        {
           streamToPrint = new StreamReader (filePath);
           try 
           {
              printFont = new Font("Arial", 10);
              PrintDocument pd = new PrintDocument(); 
              pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
              // Print the document.
              pd.Print();
           } 
           finally 
           {
              streamToPrint.Close() ;
           }
       } 
       catch(Exception ex) 
       { 
           MessageBox.Show(ex.Message);
       }
    }
  
    // This is the main entry point for the application.
    public static void Main(string[] args) 
    {
       string sampleName = Environment.GetCommandLineArgs()[0];
       if(args.Length != 1)
       {
          Console.WriteLine("Usage: " + sampleName +" <file path>");
          return;
       }
       filePath = args[0];
       new PrintingExample();
    }
}


[C++] 
public __gc class PrintingExample 
{
private:
   Font* printFont;
   StreamReader* streamToPrint;
   static String* filePath;


public:
   PrintingExample() 
   {
      Printing();
   }

   // The PrintPage event is raised for each page to be printed.
private:
   void pd_PrintPage(Object* /*sender*/, PrintPageEventArgs* ev) 
   {
      float linesPerPage = 0;
      float yPos =  0;
      int count = 0;
      float leftMargin = (float)ev->MarginBounds.Left;
      float topMargin = (float)ev->MarginBounds.Top;
      String* line=0;

      // Calculate the number of lines per page.
      linesPerPage = ev->MarginBounds.Height  / 
         printFont->GetHeight(ev->Graphics) ;

      // Iterate over the file, printing each line.
      while (count < linesPerPage && 
         ((line=streamToPrint->ReadLine()) != 0)) 
      {
         yPos = topMargin + (count * printFont->GetHeight(ev->Graphics));
         ev->Graphics->DrawString (line, printFont, Brushes::Black, 
            leftMargin, yPos, new StringFormat());
         count++;
      }

      // If more lines exist, print another page.
      if (line != 0) 
         ev->HasMorePages = true;
      else 
         ev->HasMorePages = false;
   }

   // Print the file.
public:
   void Printing()
   {
      try 
      {
         streamToPrint = new StreamReader (filePath);
         try 
         {
            printFont = new Font(S"Arial", 10);
            PrintDocument* pd = new PrintDocument(); 
            pd->PrintPage += new PrintPageEventHandler(this, &PrintingExample::pd_PrintPage);
            // Print the document.
            pd->Print();
         } 
         __finally 
         {
            streamToPrint->Close() ;
         }
      } 
      catch(Exception* ex) 
      { 
         MessageBox::Show(ex->Message);
      }
   }

   static void Main() 
   {
      String* args[] = Environment::GetCommandLineArgs();
      String* sampleName = args[0];
      if(args->Length != 2)
      {
         Console::WriteLine(S"Usage: {0} <file path>", sampleName);
         return;
      }
      filePath = args[1];
      new PrintingExample();
   }
};

int main()
{
   PrintingExample::Main();
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

PrintDocument クラス | PrintDocument メンバ | System.Drawing.Printing 名前空間 | PrintPageEventHandler | PrintPageEventArgs | BeginPrint | EndPrint | QueryPageSettings | Graphics