保证金范围更广泛&打印在PrintDocument.Print()比在PrintPreviewDialog.ShowDialog()

时间:2012-08-08 20:52:09

标签: vb.net printing margin

PrintPreviewDialog的显示是完美的,如果我PrintDocument.Print()并使用像PDF995这样的虚拟打印机,它也是完美的。但是,如果我PrintDocument.Print()并选择了一台物理打印机(是的,我尝试过多台打印机),则框的左上角会正确放置,但不能放在右下角。右下方是5.5mm(在纸上),距离底部7mm。

我已经绘制了一个视觉辅助工具,以进一步澄清正在发生的事情。红色框是我所期望的,当我使用PrintPreviewDialg或打印到虚拟打印机时会发生什么。当我使用PrintDocument.Print()并选择物理打印机时会出现蓝框。

有谁知道为什么会这样,更重要的是我可以做些什么来解决它?

Print vs. Print Preview


我的打印按钮的代码......

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。两者都导致完全相同的行为。

1 个答案:

答案 0 :(得分:0)

我认为问题在于您在绘制矩形时使用了设置:e.PageSettings.PrintableArea.X - 这可能会因您使用的打印机而异。你会想要使用类似的东西:

Dim Bounds As New Rectangle(e.DefaultPageSettings.Margins.left, e.DefaultPageSettings.Margins.top, e.MarginBounds.Width, e.MarginBounds.Height)

请记住,除非打印机的PrintableArea设置在某种程度上不正确,否则这可能会导致打印机边缘被切断并且不会打印...