如何指定默认打印机以外的打印机?

时间:2009-07-24 21:25:57

标签: vb.net printing default

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

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属性仍然正确设置为我指定的打印机,但它仍然是启动作业的默认打印机。我确定我错过了一些明显的东西,但如果有人能指出它是什么,肯定会感激不尽。 :)

由于

2 个答案:

答案 0 :(得分:1)

我刚用你发布的类代码创建了一个测试应用程序,它运行正常。它使用我选择的任何打印机。因此,我必须得出结论,无论您在何处使用此类,在初始化对象之后但在调用Print之前,都会意外地更改PrintSettings对象。

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

答案 1 :(得分:0)

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

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