How to change printer's physical print margins thru VB coding?

G

Guest

Hi,
I am creating application in VB 2005. and when I print report it adds extra
0.45 cm margin on left and top, and the reason for this is physical margins
of printer.

Is it possible to change printer's physical margins using VB coding?

Cheers
 
T

tommaso.gastaldi

You can use the margin property of

PrintDocument.DefaultPageSettings

PrintDocument.DefaultPageSettings.Margins.Top = ...
(hundredths of an inch)
PrintDocument.DefaultPageSettings.Margins.Bottom = ...
PrintDocument.DefaultPageSettings.Margins.Left = ...
PrintDocument.DefaultPageSettings.Margins.Right = ...


(Imports System.Drawing.Printing)

http://msdn2.microsoft.com/en-us/library/system.drawing.printing.margins_members(d=ide).aspx

-tom

Mark ha scritto:
 
G

Guest

Hi Tom,
Thanks for reply
Using the code u sent sets the margins that we can see in print preview but
the physical margins of printer will be added to this margins. So I need to
change printer's physical margins by VB coding.

Another problem is that I am creating PrintDocument object but I am using
report viewer's print button to display print dialogue. I do not have any
idea how to handle this type of situation.

Any idea?
 
T

tommaso.gastaldi

Mark ha scritto:
Hi Tom,
Thanks for reply
Using the code u sent sets the margins that we can see in print preview but
the physical margins of printer will be added to this margins. So I need to
change printer's physical margins by VB coding.

make sure to set the also the right page size. There is no such a thing
like
"margins are added".
Another problem is that I am creating PrintDocument object but I am using
report viewer's print button to display print dialogue. I do not have any
idea how to handle this type of situation.

Never used report viewer. Be more specific: someone else may help you
 
G

Guest

Hi Tom,
If we use this code
Dim p As New PrinterSettings()
For Each s As String In PrinterSettings.InstalledPrinters
p.PrinterName = s
MsgBox(p.DefaultPageSettings.PrintableArea.ToString)
Next
we will get each printer's default settings.

and if use
p.DefaultPageSettings.Margins.ToString
then this will give margins we can see in the print preview.

So if printer's default physical margin is 0 then we will not get any
difference between print preview and the printed page.

But if printer's default left physical margin is 17 (hundredth of inch) then
it will add extra 0.17 inch (0.43 cm) in addition to the left margin that we
set for the report.
 
T

tommaso.gastaldi

Use a PaperSize which matches *exactly* your paper (e.g. A4 or
whatever)
then set the margin to a value that includes (that is >=) the
"physical" margin
of the printer. Usually normal printers are not capable to use the
entire surface of the sheet
and leave some small margin, which I am calling "physical". Your margin
must be equal or greater than that in order not to have your drawing
clipped.

PrintDocument.DefaultPageSettings.PaperSize = New
Printing.PaperSize("Custom", 827, 1169) 'A4
'set margin so that they are at least equal to the "physical"
margins of the printer

[The PrintableArea property is not so important, unless you want to
make an attempt
to establish the size "physical" margins are. For you purposes you
might disregard this detail.
You can set it later, after you are already able to print fine with
arbitrary margins (anyway greater than the "physical" ones)]

-tom


Mark ha scritto:
Hi Tom,
If we use this code
Dim p As New PrinterSettings()
For Each s As String In PrinterSettings.InstalledPrinters
p.PrinterName = s
MsgBox(p.DefaultPageSettings.PrintableArea.ToString)
Next
we will get each printer's default settings.

and if use
p.DefaultPageSettings.Margins.ToString
then this will give margins we can see in the print preview.

So if printer's default physical margin is 0 then we will not get any
difference between print preview and the printed page.

But if printer's default left physical margin is 17 (hundredth of inch) then
it will add extra 0.17 inch (0.43 cm) in addition to the left margin that we
set for the report.
 
G

Guest

Margins that I have set are greater than physical margins, but physical
margins are added to the margins that I have set.

And other issue is that I can not use PrintDocumnet object because I am
using report viewer.

Any idea?

Use a PaperSize which matches *exactly* your paper (e.g. A4 or
whatever)
then set the margin to a value that includes (that is >=) the
"physical" margin
of the printer. Usually normal printers are not capable to use the
entire surface of the sheet
and leave some small margin, which I am calling "physical". Your margin
must be equal or greater than that in order not to have your drawing
clipped.

PrintDocument.DefaultPageSettings.PaperSize = New
Printing.PaperSize("Custom", 827, 1169) 'A4
'set margin so that they are at least equal to the "physical"
margins of the printer

[The PrintableArea property is not so important, unless you want to
make an attempt
to establish the size "physical" margins are. For you purposes you
might disregard this detail.
You can set it later, after you are already able to print fine with
arbitrary margins (anyway greater than the "physical" ones)]

-tom


Mark ha scritto:
 
T

tommaso.gastaldi

Ah, that's all another story. I thought you were using a standard
PrintDocument.

About report viewer I know nothing (I prefer to code the report myself:
these tools are too primitive :).

-tom

Hinesh ha scritto:
Margins that I have set are greater than physical margins, but physical
margins are added to the margins that I have set.

And other issue is that I can not use PrintDocumnet object because I am
using report viewer.

Any idea?

Use a PaperSize which matches *exactly* your paper (e.g. A4 or
whatever)
then set the margin to a value that includes (that is >=) the
"physical" margin
of the printer. Usually normal printers are not capable to use the
entire surface of the sheet
and leave some small margin, which I am calling "physical". Your margin
must be equal or greater than that in order not to have your drawing
clipped.

PrintDocument.DefaultPageSettings.PaperSize = New
Printing.PaperSize("Custom", 827, 1169) 'A4
'set margin so that they are at least equal to the "physical"
margins of the printer

[The PrintableArea property is not so important, unless you want to
make an attempt
to establish the size "physical" margins are. For you purposes you
might disregard this detail.
You can set it later, after you are already able to print fine with
arbitrary margins (anyway greater than the "physical" ones)]

-tom


Mark ha scritto:
Hi Tom,
If we use this code
Dim p As New PrinterSettings()
For Each s As String In PrinterSettings.InstalledPrinters
p.PrinterName = s
MsgBox(p.DefaultPageSettings.PrintableArea.ToString)
Next
we will get each printer's default settings.

and if use
p.DefaultPageSettings.Margins.ToString
then this will give margins we can see in the print preview.

So if printer's default physical margin is 0 then we will not get any
difference between print preview and the printed page.

But if printer's default left physical margin is 17 (hundredth of inch) then
it will add extra 0.17 inch (0.43 cm) in addition to the left margin that we
set for the report.

--
Osmotion Blue


:


Mark ha scritto:

Hi Tom,
Thanks for reply
Using the code u sent sets the margins that we can see in print preview but
the physical margins of printer will be added to this margins. So I need to
change printer's physical margins by VB coding.

make sure to set the also the right page size. There is no such a thing
like
"margins are added".


Another problem is that I am creating PrintDocument object but I am using
report viewer's print button to display print dialogue. I do not have any
idea how to handle this type of situation.

Never used report viewer. Be more specific: someone else may help you


Any idea?

--
Osmotion Blue


:

You can use the margin property of

PrintDocument.DefaultPageSettings

PrintDocument.DefaultPageSettings.Margins.Top = ...
(hundredths of an inch)
PrintDocument.DefaultPageSettings.Margins.Bottom = ...
PrintDocument.DefaultPageSettings.Margins.Left = ...
PrintDocument.DefaultPageSettings.Margins.Right = ...


(Imports System.Drawing.Printing)

http://msdn2.microsoft.com/en-us/library/system.drawing.printing.margins_members(d=ide).aspx

-tom

Mark ha scritto:

Hi,
I am creating application in VB 2005. and when I print report it adds extra
0.45 cm margin on left and top, and the reason for this is physical margins
of printer.

Is it possible to change printer's physical margins using VB coding?

Cheers
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top