の表示もバッチリですし、PDF995などの仮想プリンターを使えPrintPreviewDialog
ばバッチリです。PrintDocument.Print()
ただし、PrintDocument.Print()
物理プリンターを選択すると (複数のプリンターを試しました)、ボックスの左上隅は正しく配置されますが、右下隅は正しく配置されません。右下は 5.5 mm 右 (紙面上) で、7 mm 下です。
何が起こっているのかをさらに明確にするために、視覚的な補助を描画しました。PrintPreviewDialg
赤いボックスは私が期待するものであり、仮想プリンターを使用したり、印刷したりするとどうなりますか。青いボックスはPrintDocument.Print()
、物理プリンターを使用して選択したときに発生するものです。
なぜこれが起こっているのか、さらに重要なことに、それを解決するために何ができるかを誰かが知っていますか?
私の印刷ボタンのコード...
Dim doc As New Printing.PrintDocument
doc.OriginAtMargins = True
doc.DefaultPageSettings.Margins = New Printing.Margins(50, 50, 50, 50)
AddHandler doc.PrintPage, AddressOf PrintPage
Dim printer As New PrintDialog
printer.Document = doc
printer.UseEXDialog = True
If printer.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
printer.Document.Print()
End If
私の印刷プレビューボタンのコード...
Dim doc As New Printing.PrintDocument
doc.OriginAtMargins = True
doc.DefaultPageSettings.Margins = New Printing.Margins(50, 50, 50, 50)
AddHandler doc.PrintPage, AddressOf PrintPage
Dim preview As New PrintPreviewDialog
preview.Document = doc
preview.ShowDialog(Me)
PrintPage()
ルーチンのコード...
Public Sub PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Dim Bounds As New Rectangle(e.PageSettings.PrintableArea.X, e.PageSettings.PrintableArea.Y, e.MarginBounds.Width, e.MarginBounds.Height)
e.Graphics.DrawRectangle(Pens.Black, Bounds)
e.HasMorePages = False
End Sub
また、 my の代わりに設定OriginAtMargin
しFalse
て使用しようとしました。どちらもまったく同じ動作になります。e.MarginBounds
Bounds
Rectangle