我希望能够为两个不同的作业指定两种不同的打印机。我正在使用以下类来处理这些打印,但无论我做什么,默认打印机始终是打印到的。
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属性仍然正确设置为我指定的打印机,但它仍然是启动作业的默认打印机。我确定我错过了一些明显的东西,但如果有人能指出它是什么,肯定会感激不尽。 :)
由于
答案 0 :(得分:1)
我刚用你发布的类代码创建了一个测试应用程序,它运行正常。它使用我选择的任何打印机。因此,我必须得出结论,无论您在何处使用此类,在初始化对象之后但在调用Print之前,都会意外地更改PrintSettings对象。
或者您指定的打印机名称无效,默认值用作备份。您可以在设置PrinterName属性后使用PrinterSettings.IsValid进行检查。
答案 1 :(得分:0)
PrinterSettings.PrinterName
属性实际上就是您应该使用的属性。
您可以使用PrinterSettings.InstalledPrinters
(System.Drawing.Printing
命名空间)获取已安装打印机的列表。也许您的提供商打印机名称与应有的略有不同,因为我可以确认这确实有效。