2

我希望能够为两个不同的作业指定两个不同的打印机。我正在使用以下类来处理打印这些,但无论我做什么,默认打印机始终是打印到的那个。

Public Class Receipt : Inherits Printing.PrintDocument
Private _font As Font = New Font("Courier", 8)
Private _text As String = ""

Public Property Text() As String
    Get
        Return _text
    End Get
    Set(ByVal Value As String)
        _text = Value.Trim
    End Set
End Property

Public Sub New(ByVal str As String, ByVal settings As Printing.PrinterSettings)
    MyBase.New()
    _text = str
    Me.PrinterSettings = settings
End Sub

Protected Overrides Sub OnPrintPage(ByVal e As Printing.PrintPageEventArgs)
    Dim printHeight As Integer
    Dim printWidth As Integer
    Dim leftMargin As Integer
    Dim rightMargin As Integer


    With Me.DefaultPageSettings
        .PaperSize = New System.Drawing.Printing.PaperSize("Custom", 300, 1200)
        .Margins.Left = 25
        .Margins.Right = 25

        printHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom
        printWidth = .PaperSize.Width - .Margins.Left - .Margins.Right
        leftMargin = .Margins.Left
        rightMargin = .Margins.Top
    End With

    Dim printArea As New RectangleF(leftMargin, rightMargin, printWidth, printHeight)
    Dim format As New StringFormat(StringFormatFlags.LineLimit)

    Try
        e.Graphics.DrawString(_text, _font, Brushes.Black, printArea, format)
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub
End Class

如果我在调用 DrawString 之前立即检查我的 PrinterSettings 属性,PrinterName 属性仍然正确设置为我指定的打印机,但它仍然是执行该作业的默认打印机。我确定我遗漏了一些明显的东西,但如果有人能指出它是什么,我当然会感激不尽。:)

谢谢

4

2 回答 2

1

我刚刚使用您发布的课程代码创建了一个测试应用程序,它工作正常。它使用我选择的任何打印机。所以我必须得出结论,无论你在哪里使用这个类,你都会在初始化对象之后但在调用 Print 之前不小心更改了 PrintSettings 对象。

或者您指定的打印机名称可能无效,默认值用作备份。您可以在设置 PrinterName 属性后使用 PrinterSettings.IsValid 进行检查。

于 2009-07-24T21:47:38.317 回答
0

PrinterSettings.PrinterName属性实际上是您应该使用的。

您可以使用PrinterSettings.InstalledPrintersSystem.Drawing.Printing命名空间)获取已安装打印机的列表。也许您的提供商打印机名称与应有的名称略有不同,因为我可以确认这确实有效。

于 2009-07-24T21:41:16.393 回答