Solved

printpage event apparently not firing

Posted on 2007-11-21
4
438 Views
Last Modified: 2013-11-07
I am trying to programatically print a code generated image.  The graphics is populated and I can save the .bmp to disk and it is correct.  However, when I send it to the printer, I get a blank page.  Apparently this is occurning because the printpage event is not firing.
I say that the event is not firing because when I place        
objBitmap.Save("c:\testing.bmp")
in the Sub pd_PrintPage it does not happen.
Private objBitmap As New Bitmap(765, 800)
 
    Private Sub butPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butPrint.Click
        Try
            Dim objGraphics As Graphics
            Dim objFont As New Font("Arial", 12, FontStyle.Regular)
            objGraphics = Graphics.FromImage(objBitmap)
            objGraphics.DrawImage(objBitmap, 0, 0)
            objGraphics.DrawString(str1.ToString, objFont, Brushes.Black, 50, 50)
            objGraphics.DrawString(str2.ToString, objFont, Brushes.Black, 90, 100)
            objGraphics.DrawString(str3.ToString, objFont, Brushes.Black, 90, 240)
            Dim objPoint As Drawing.Point
            objPoint.X = "90"
            objPoint.Y = "200"
            objGraphics.DrawImageUnscaled(image1, objPoint)
            objGraphics.Save()
            Dim objDoc As New PrintDocument
            objDoc.PrinterSettings.PrinterName = prnName
            AddHandler objDoc.PrintPage, AddressOf Me.pd_PrintPage
            objDoc.Print()
            lblStatus.Text = "Printing Complete"
        Catch ex As Exception
            lblStatus.Text = ex.Message
        End Try
 
    End Sub
 
    Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs) _
        Handles objDoc.PrintPage
 
        ' Draw a picture.
        ev.Graphics.DrawImage(objBitmap, _
        ev.Graphics.VisibleClipBounds)
 
        ' Indicate that this is the last page to print.
        ev.HasMorePages = False
    End Sub

Open in new window

0
Comment
Question by:zane_o
  • 2
  • 2
4 Comments
 
LVL 38

Accepted Solution

by:
PaulHews earned 250 total points
ID: 20330503
You need to declare your PrintDocument at the form/class level:
 Private objBitmap As New Bitmap(765, 800)
    Private WithEvents objDoc As New PrintDocument
 
    Private Sub butPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            
 
            Dim objGraphics As Graphics
            Dim objFont As New Font("Arial", 12, FontStyle.Regular)
            objGraphics = Graphics.FromImage(objBitmap)
            objGraphics.DrawImage(objBitmap, 0, 0)
            objGraphics.DrawString(str1.ToString, objFont, Brushes.Black, 50, 50)
            objGraphics.DrawString(str2.ToString, objFont, Brushes.Black, 90, 100)
            objGraphics.DrawString(str3.ToString, objFont, Brushes.Black, 90, 240)
            Dim objPoint As Drawing.Point
            objPoint.X = 90
            objPoint.Y = 200
            objGraphics.DrawImageUnscaled(image1, objPoint)
            objGraphics.Save()
            objDoc.PrinterSettings.PrinterName = prnName
            objDoc.Print()
            lblStatus.Text = "Printing Complete"
        Catch ex As Exception
            lblStatus.Text = ex.Message
        End Try
 
    End Sub
 
    Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs) _
        Handles objDoc.PrintPage
 
        ' Draw a picture.
        ev.Graphics.DrawImage(objBitmap, _
        ev.Graphics.VisibleClipBounds)
 
        ' Indicate that this is the last page to print.
        ev.HasMorePages = False
    End Sub

Open in new window

0
 
LVL 38

Expert Comment

by:PaulHews
ID: 20330727
One typo.
Private Sub butPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Should be:

Private Sub butPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butPrint.Click
0
 
LVL 6

Author Comment

by:zane_o
ID: 20331231
Sorry I didn't include this in the original post, but I have
    Private WithEvents objDoc As PrintDocument
in the code already.
0
 
LVL 6

Author Comment

by:zane_o
ID: 20331384
OK. That did the trick.  Thanks.
0

Featured Post

How Do You Stack Up Against Your Peers?

With today’s modern enterprise so dependent on digital infrastructures, the impact of major incidents has increased dramatically. Grab the report now to gain insight into how your organization ranks against your peers and learn best-in-class strategies to resolve incidents.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

820 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question