【发布时间】:2013-02-07 22:06:33
【问题描述】:
PrintPreviewDialog 的显示很完美,如果我这样做PrintDocument.Print() 并使用像 PDF995 这样的虚拟打印机,它也很完美。但是,如果我执行PrintDocument.Print() 并选择一台物理打印机(是的,我尝试了多台打印机),那么框的左上角放置正确,但右下角放置不正确。右下角距右侧 5.5 毫米(在纸上),距底部 7 毫米。
我已经画了一个视觉辅助来进一步阐明发生了什么。红框是我所期望的,当我使用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
我还尝试将OriginAtMargin 设置为False 并使用e.MarginBounds 而不是我的Bounds Rectangle。两者都导致完全相同的行为。
【问题讨论】: