?
Solved

printpage event apparently not firing

Posted on 2007-11-21
4
Medium Priority
?
446 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
4 Comments
 
LVL 38

Accepted Solution

by:
PaulHews earned 1000 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

NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

Question has a verified solution.

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

Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…
Suggested Courses

752 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