469,636 Members | 1,544 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,636 developers. It's quick & easy.

Printing using margins

tm
I am trying to print a form using the following code, everything works fine
but the margins are not acted upon. What I am I doing wrong?

Private Sub CaptureScreen()
Dim myGraphics As Graphics = Me.CreateGraphics()
Dim s As Size = Me.Size
memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, s)
End Sub

Private Sub printDocument1_PrintPage(ByVal sender As System.Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles
printDocument1.PrintPage

Dim margins As New Margins(0, 0, 600, 0)
printDocument1.DefaultPageSettings.Margins = margins
e.Graphics.DrawImage(memoryImage, 0, 0)

End Sub

Feb 3 '06 #1
7 2549
tm,
You didn't say which version of the framework you are using. For 1.x
you will need to compensate for the 'hard margins' on the printer by
PInvoking GetDeviceCaps to get the margins. Also you won't be able to print
except for inside those margins as the printer isn't capable of printing
there. Except for some very high end printers most aren't capable of
printing to the edge of the paper.
You can look for GetHardMargins in this newsgroup or in
microsoft.public.dotnet.framework.drawing to find some code to get the
actual printer margin values. If you are using FW 2.0 you can use the
properties of the PrintDocument to find the margins.

Ron Allen
"tm" <tb***@cwnet.com> wrote in message
news:%2***************@TK2MSFTNGP14.phx.gbl...
I am trying to print a form using the following code, everything works fine
but the margins are not acted upon. What I am I doing wrong?

Private Sub CaptureScreen()
Dim myGraphics As Graphics = Me.CreateGraphics()
Dim s As Size = Me.Size
memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0,
s)
End Sub

Private Sub printDocument1_PrintPage(ByVal sender As System.Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles
printDocument1.PrintPage

Dim margins As New Margins(0, 0, 600, 0)
printDocument1.DefaultPageSettings.Margins = margins
e.Graphics.DrawImage(memoryImage, 0, 0)

End Sub

Feb 4 '06 #2
tm
Ron,

I am using Framework 2.0

I have tried searching "GetHardMargins " with no luck.
If I add the following to my sub printDocument1_PrintPage
I do see my margins settings, but this just proves that I can
set and read back the PageSetupDialog1 information. It
seems that the info is not getting back to the printer.
What ties the PageSetupDialog to the system default printer?

With PageSetupDialog1

Dim leftMargin As Single = .PageSettings.Margins.Left

Dim rightMargin As Single = .PageSettings.Margins.Right

Dim topMargin As Single = .PageSettings.Margins.Top

Dim BottomMargin As Single = .PageSettings.Margins.Bottom

End With

tom
Feb 5 '06 #3
You can get the printable page size from the PrintPageEventArgs.PageBounds
which is passed to the PrintPage Event.
--
Dennis in Houston
"tm" wrote:
Ron,

I am using Framework 2.0

I have tried searching "GetHardMargins " with no luck.
If I add the following to my sub printDocument1_PrintPage
I do see my margins settings, but this just proves that I can
set and read back the PageSetupDialog1 information. It
seems that the info is not getting back to the printer.
What ties the PageSetupDialog to the system default printer?

With PageSetupDialog1

Dim leftMargin As Single = .PageSettings.Margins.Left

Dim rightMargin As Single = .PageSettings.Margins.Right

Dim topMargin As Single = .PageSettings.Margins.Top

Dim BottomMargin As Single = .PageSettings.Margins.Bottom

End With

tom

Feb 5 '06 #4
tm
Dennis,

I capture the image in the CaptureScreen sub.

What I want to do is use Margins to begin printing
6 inches down from the top. But the default printer
seems not to see the new margins I set in the
printDocument1 event and continus to print
at the top.

If you have any suggestions of what I am doing
wrong I would appreciate your feed back.

tom
Private Sub CaptureScreen()
Dim myGraphics As Graphics = Me.CreateGraphics()
Dim s As Size = Me.Size
memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, s)
End Sub
Private Sub printDocument1_PrintPage(ByVal sender As System.Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
printDocument1.PrintPage

Dim margins As New Margins(0, 0, 600, 0)
printDocument1.DefaultPageSettings.Margins = margins
e.Graphics.DrawImage(memoryImage, 0, 0)

End Sub
Feb 5 '06 #5
You are drawing to the page graphics object and you need to use the point for
the drawing to start. If you want the drawing to be 6 inches from the top of
the paper and 2 inches from the left side of the paper, use

e.Graphics.DrawImage(memoryImage, 200, 600).

The margins have nothing to do with it.
--
Dennis in Houston
"tm" wrote:
Dennis,

I capture the image in the CaptureScreen sub.

What I want to do is use Margins to begin printing
6 inches down from the top. But the default printer
seems not to see the new margins I set in the
printDocument1 event and continus to print
at the top.

If you have any suggestions of what I am doing
wrong I would appreciate your feed back.

tom
Private Sub CaptureScreen()
Dim myGraphics As Graphics = Me.CreateGraphics()
Dim s As Size = Me.Size
memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, s)
End Sub
Private Sub printDocument1_PrintPage(ByVal sender As System.Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
printDocument1.PrintPage

Dim margins As New Margins(0, 0, 600, 0)
printDocument1.DefaultPageSettings.Margins = margins
e.Graphics.DrawImage(memoryImage, 0, 0)

End Sub

Feb 5 '06 #6
tm
Thanks Dennis, I have been working on this for a week.

Now that I can print at the bottom I have another question,
is it possible to do two CaptureScreen() and send one two
print at the top and the other to print at the bottom.

Or prevent the form feed from ejecting the paper which would
allow printing on top then print at bottom then eject the paper.

tom

"Dennis" <De****@discussions.microsoft.com> wrote in message
news:50**********************************@microsof t.com...
You are drawing to the page graphics object and you need to use the point
for
the drawing to start. If you want the drawing to be 6 inches from the top
of
the paper and 2 inches from the left side of the paper, use

e.Graphics.DrawImage(memoryImage, 200, 600).

The margins have nothing to do with it.
--
Dennis in Houston
"tm" wrote:
Dennis,

I capture the image in the CaptureScreen sub.

What I want to do is use Margins to begin printing
6 inches down from the top. But the default printer
seems not to see the new margins I set in the
printDocument1 event and continus to print
at the top.

If you have any suggestions of what I am doing
wrong I would appreciate your feed back.

tom
Private Sub CaptureScreen()
Dim myGraphics As Graphics = Me.CreateGraphics()
Dim s As Size = Me.Size
memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0,
s)
End Sub
Private Sub printDocument1_PrintPage(ByVal sender As System.Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
printDocument1.PrintPage

Dim margins As New Margins(0, 0, 600, 0)
printDocument1.DefaultPageSettings.Margins = margins
e.Graphics.DrawImage(memoryImage, 0, 0)

End Sub

Feb 6 '06 #7
You can print as many images as you want wherever you want, even overlapping
so long as you do it before exiting the routine. If you want to change
pages, just set the PrintPageEventArgs.HasMorePages = True and the PrintPages
sub will be called again. You can use a static variable in the sub to keep
track of which page you are on.

Dennis in Houston
"tm" wrote:
Thanks Dennis, I have been working on this for a week.

Now that I can print at the bottom I have another question,
is it possible to do two CaptureScreen() and send one two
print at the top and the other to print at the bottom.

Or prevent the form feed from ejecting the paper which would
allow printing on top then print at bottom then eject the paper.

tom

"Dennis" <De****@discussions.microsoft.com> wrote in message
news:50**********************************@microsof t.com...
You are drawing to the page graphics object and you need to use the point
for
the drawing to start. If you want the drawing to be 6 inches from the top
of
the paper and 2 inches from the left side of the paper, use

e.Graphics.DrawImage(memoryImage, 200, 600).

The margins have nothing to do with it.
--
Dennis in Houston
"tm" wrote:
Dennis,

I capture the image in the CaptureScreen sub.

What I want to do is use Margins to begin printing
6 inches down from the top. But the default printer
seems not to see the new margins I set in the
printDocument1 event and continus to print
at the top.

If you have any suggestions of what I am doing
wrong I would appreciate your feed back.

tom
Private Sub CaptureScreen()
Dim myGraphics As Graphics = Me.CreateGraphics()
Dim s As Size = Me.Size
memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0,
s)
End Sub
Private Sub printDocument1_PrintPage(ByVal sender As System.Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
printDocument1.PrintPage

Dim margins As New Margins(0, 0, 600, 0)
printDocument1.DefaultPageSettings.Margins = margins
e.Graphics.DrawImage(memoryImage, 0, 0)

End Sub


Feb 7 '06 #8

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by Jody Gelowitz | last post: by
reply views Thread by Programatix | last post: by
reply views Thread by Programatix | last post: by
reply views Thread by JF Turcotte | last post: by
2 posts views Thread by qumpus | last post: by
8 posts views Thread by Tinus | last post: by
4 posts views Thread by iwdu15 | last post: by
7 posts views Thread by DazedAndConfused | last post: by
8 posts views Thread by Frank Rizzo | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.