DOBON.NET DOBON.NETプログラミング掲示板過去ログ

プリントドキュメントのマージン

分類:[.NET]

下記のように単純に、MarginBoundsの四角形をプリントした場合、
既定値のマージンは、上下左右とも1インチなのに、右下にずれて印刷されます、
プリンターの印刷可能域左上からさらにマージンをとっている感じがします

Dim pd As New Printing.PrintDocument
AddHandler pd.PrintPage, AddressOf pd_PrintPage
pd.Print()

Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As System.Drawing.Printing.PrintPageEventArgs)
Dim x As Integer = ev.MarginBounds.Left
Dim y As Integer = ev.MarginBounds.Top
Dim w As Integer = ev.MarginBounds.Width
Dim h As Integer = ev.MarginBounds.Height

ev.Graphics.DrawRectangle(Pens.Black, x, y, w, h)
ev.HasMorePages = False
End Sub

正しいマージンで印刷するには、何らかの設定が必要なのでしょうか
または、ハードクリップのサイズを知りたいのですが見つけられません
■No699に返信(DEGさんの記事)
> 正しいマージンで印刷するには、何らかの設定が必要なのでしょうか
> または、ハードクリップのサイズを知りたいのですが見つけられません

答えになっていないかもしれませんが、私のサイトの

どぼん!の .NET Tips - 印刷する
http://dobon.net/vb/dotnet/graphics/printdocument.html

で説明している通り、ページ全体の大きさはPrintPageEventArgs.PageBoundsプロパティで、印刷可能な範囲はPrintPageEventArgs.Graphics.VisibleClipBoundsプロパティで、ページ余白の内側の部分はPrintPageEventArgs.MarginBoundsプロパティでそれぞれ取得できることになっています。
管理人さんへ
> で説明している通り、ページ全体の大きさはPrintPageEventArgs.PageBoundsプロパティで、印刷可能な範囲はPrintPageEventArgs.Graphics.VisibleClipBoundsプロパティで、ページ余白の内側の部分はPrintPageEventArgs.MarginBoundsプロパティでそれぞれ取得できることになっています。

VisibleClipBounds.Left と .Top は、ゼロだったので、
(PageBounds.Width - VisibleClipBounds.Width) / 2.0 をマージンから
差引くことで、ほぼ真中に印刷できました。
VisibleClipBounds.Leftに値が入っていれば、このような操作をしなくても
正しいマージンで印刷されるのかも、という気もします。
どうもありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板