【问题标题】:Margin Bounds Wider & Taller In PrintDocument.Print() Than In PrintPreviewDialog.ShowDialog()PrintDocument.Print() 中的边距边界比 PrintPreviewDialog.ShowDialog() 中的边距边界更宽、更高
【发布时间】: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。两者都导致完全相同的行为。

【问题讨论】:

    标签: vb.net printing margin


    【解决方案1】:

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

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

    请记住,这可能会导致边缘在打印机中被切断而不打印,除非打印机的 PrintableArea 设置不正确...

    【讨论】:

    • 感谢您的回复,但我看不出更改 X 或 Y 坐标将如何解决任何问题?顶部和左侧都很好,右侧和底部不正确。另外,我在e 中没有看到DefaultPageSettings 对象,这是一个System.Drawing.Printing.PrintPageEventArgs 对象。
    猜你喜欢
    • 1970-01-01
    • 2021-08-18
    • 2019-02-08
    • 2016-05-23
    • 2013-05-03
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多