0

的显示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

我也尝试过设置OriginAtMarginFalse使用e.MarginBounds而不是我的Bounds Rectangle. 两者都导致完全相同的行为。

4

1 回答 1

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 设置不正确......

于 2013-02-07T13:48:32.300 回答