You draw on the graphics supplied via the "e" parameter in the PrintPage() event right?
Just pass that to a routine that accepts a graphics. This way both the PrintPage() event can use and you can pass it a graphics from an image:
Private Sub PD_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PD.PrintPage
DrawingRoutine(e.Graphics)
End Sub
...
Dim bmp As New Bitmap(someWidth, someHeight)
Dim G As Graphics = Graphics.FromImage(bmp)
DrawingRoutine(G)
G.Dispose()
Private Sub DrawingRoutine(ByVal g As Graphics)
End Sub