Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
PrintPage Event
Collapse the table of content
Expand the table of content

PrintDocument.PrintPage Event

Occurs when the output to print for the current page is needed.

Namespace:  System.Drawing.Printing
Assembly:  System.Drawing (in System.Drawing.dll)

'Declaration
Public Event PrintPage As PrintPageEventHandler

To specify the output to print, use the Graphics property of the PrintPageEventArgs. For example, to specify a line of text that should be printed, draw the text using the Graphics.DrawString method.

In addition to specifying the output, you can indicate if there are additional pages to print by setting the PrintPageEventArgs.HasMorePages property to true. The default is false, which indicates that there are no more pages to print. Individual page settings can also be modified through the PageSettings and the print job can be canceled by setting the PrintPageEventArgs.Cancel property to true. To print each page of a document using different page settings, handle the QueryPageSettings event.

To associate the event with your event handler, add an instance of the PrintPageEventHandler delegate to the event. The event handler is called whenever the event occurs. For more information about handling events with delegates, see Handling and Raising Events.

The following code example demonstrates handling the PrintPage event.

For another example, see How to: Print a Multi-Page Text File in Windows Forms.

Use the System.Drawing, System.Drawing.Printing, and System.IO namespaces for this example.

Imports System
Imports System.IO
Imports System.Drawing
Imports System.Drawing.Printing
Imports System.Windows.Forms

Public Class Form1
    Inherits System.Windows.Forms.Form
    Private WithEvents printButton As System.Windows.Forms.Button
    Private printFont As Font
    Private streamToPrint As StreamReader

    Public Sub New()
        ' The Windows Forms Designer requires the following call.
        InitializeComponent()
        InitializeForm()
    End Sub 

    ' The Click event is raised when the user clicks the Print button. 
    Private Sub printButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles printButton.Click
        Try
            streamToPrint = New StreamReader("C:\My Documents\MyFile.txt")
            Try
                printFont = New Font("Arial", 10)
                Dim pd As New PrintDocument()
                AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage
                pd.Print()
            Finally
                streamToPrint.Close()
            End Try 
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try 
    End Sub 

    ' The PrintPage event is raised for each page to be printed. 
    Private Sub pd_PrintPage(ByVal sender As Object, ByVal 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)

        ' Print each line of the file. 
        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 (line IsNot Nothing) Then
            ev.HasMorePages = True 
        Else
            ev.HasMorePages = False 
        End If 
    End Sub 

    Private Sub InitializeForm()
        Me.components = New System.ComponentModel.Container()
        Me.printButton = New System.Windows.Forms.Button()

        Me.ClientSize = New System.Drawing.Size(504, 381)
        Me.Text = "Print Example"

        printButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
        printButton.Location = New System.Drawing.Point(32, 110)
        printButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
        printButton.TabIndex = 0
        printButton.Text = "Print the file."
        printButton.Size = New System.Drawing.Size(136, 40)
        AddHandler printButton.Click, AddressOf printButton_Click

        Me.Controls.Add(printButton)
    End Sub 


    ' This is the main entry point for the application.     
    Public Shared Sub Main()
        Application.Run(New Form1())
    End Sub 

End Class

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1

.NET Framework Client Profile

Supported in: 4, 3.5 SP1
Show:
© 2015 Microsoft