2009-07-24 6 views
1

J'aimerais pouvoir spécifier deux imprimantes différentes pour deux tâches différentes. J'utilise la classe suivante pour gérer l'impression de ceux-ci, mais indépendamment de ce que je fais, l'imprimante par défaut est toujours celle qui est imprimée.Comment puis-je spécifier une imprimante autre que l'imprimante par défaut?

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 j'inspecter mon PrinterSettings attribut immédiatement avant l'appel à cordonnet, l'attribut PrinterName est toujours correctement réglé sur l'imprimante je précise, mais il est toujours l'imprimante par défaut qui démarre le travail. Je suis sûr que je manque quelque chose d'évident, mais j'apprécierais certainement si quelqu'un pourrait indiquer ce que c'est. :)

Merci

Répondre

1

Je viens de créer une application de test avec le code de classe que vous avez posté et cela fonctionne très bien. Il utilise n'importe quelle imprimante que je sélectionne. Je dois donc conclure que chaque fois que vous utilisez cette classe, vous modifiez accidentellement l'objet PrintSettings après avoir initialisé l'objet mais avant d'appeler Print.

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 sauvegarde. Vous pouvez vérifier cela en utilisant PrinterSettings.IsValid après avoir défini la propriété PrinterName.

+0

Je suis certainement déconcerté. Avant de quitter le bureau le vendredi, j'avais mis des drapeaux pour vérifier que PrinterSettings.IsValid revenait vrai, et en effet il l'a fait, mais le problème persiste. Maintenant, comme je viens lundi matin, je l'ai essayé à nouveau en lisant votre confirmation et celle de Thorarin, à savoir que ce que j'ai fait devrait fonctionner, et faible, et c'est ce qu'il fait. Je ne sais pas ce qui était différent le vendredi, mais merci de m'avoir confirmé que j'étais sur la bonne voie et m'empêchant d'emprunter des chemins que je n'avais pas besoin de descendre. :) – Blumer

0

La propriété PrinterSettings.PrinterName est en fait ce que vous devriez utiliser.

Vous pouvez obtenir la liste des imprimantes installées à l'aide de l'espace de noms PrinterSettings.InstalledPrinters (System.Drawing.Printing). Peut-être que le nom de l'imprimante de votre fournisseur est légèrement différent de ce qu'il devrait être, car je peux confirmer que cela fonctionne réellement.