Comment puis-je spécifier une imprimante autre que l'imprimante par défaut?
Je voudrais être en mesure de spécifier deux imprimantes différentes pour les deux types de tâches. Je suis l'aide de la classe suivante pour gérer l'impression, mais peu importe ce que je fais, l'imprimante par défaut est toujours celui qui est imprimé.
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
Si je l'inspection de mon PrinterSettings attribut immédiatement avant l'appel à Cordon de serrage, le PrinterName attribut est toujours correctement fixé à l'imprimante, je précise, mais c'est toujours la valeur par défaut de l'imprimante que des coups de pied dans le travail. Je suis sûr que je suis absent quelque chose d'évident, mais serait certainement reconnaissant si quelqu'un pouvait point de ce qu'il est. 🙂
Grâce
Vous devez vous connecter pour publier un commentaire.
Je viens de créer une application de test avec le code de classe que vous avez posté, et il fonctionne très bien. Il utilise ce que l'imprimante que je sélectionne. Donc, je dois conclure que, où que vous soyez à l'aide de cette classe, vous êtes accidentellement modifier le PrintSettings objet après l'initialisation de l'objet, mais avant de vous appeler d'Impression.
Ou peut-être le nom de l'imprimante que vous spécifiez n'est pas valide et la valeur par défaut est utilisée comme une sauvegarde. Vous pouvez le vérifier à l'aide de PrinterSettings.IsValid après le réglage de la PrinterName propriété.
La
PrinterSettings.PrinterName
propriété est effectivement ce que vous devriez être en utilisant.Vous pouvez obtenir une liste des imprimantes installées à l'aide de
PrinterSettings.InstalledPrinters
(System.Drawing.Printing
espace de noms). Peut-être que votre fournisseur de nom de l'imprimante est un peu différent de ce qu'il devrait être, parce que je peux confirmer cela fonctionne réellement.