none
Choisir une imprimante RRS feed

  • Question

  • Bonjour,

    voila je voudrais pouvoir définir des imprimantes dans des variables un peu de ce genre la :

    dim imprimante_A as imprimante = 192.168.1.2

    Je sais pas si c'est possible mais je demande sait-on jamais?

    Cordialement maxkun

    mercredi 2 novembre 2011 08:06

Réponses

  • Bonjour maxkun

    Voila le code complet (extrait du msdn)

     

    Imports System.Drawing
    Imports System.Drawing.Printing
    Imports System.IO
    
    Public Class Form1
        Private streamToPrint As StreamReader
        Private printFont As Font
        Public Sub Printing(ByVal printer As String)
            Try
                streamToPrint = New StreamReader("C:\test.txt")
                Try
                    printFont = New Font("Arial", 10)
                    Dim pd As New PrintDocument()
                    AddHandler pd.PrintPage, AddressOf pd_PrintPage
                    ' Specify the printer to use.
                    pd.PrinterSettings.PrinterName = printer
    
                    If pd.PrinterSettings.IsValid Then
                        pd.Print()
                    Else
                        MessageBox.Show("Printer is invalid.")
                    End If
                Finally
                    streamToPrint.Close()
                End Try
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    
        Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
            Dim linesPerPage As Single = 0
            Dim yPos As Single = 0
            Dim count As Integer = 0
            Dim leftMargin As Single = ev.MarginBounds.Left
            Dim topMargin As Single = ev.MarginBounds.Top
            Dim line As String = Nothing
    
            ' Calculate the number of lines per page.
            linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics)
    
            ' Print each line of the file.
            While count < linesPerPage
                line = streamToPrint.ReadLine()
                If line Is Nothing Then
                    Exit While
                End If
                yPos = topMargin + count * printFont.GetHeight(ev.Graphics)
                ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, New StringFormat())
                count += 1
            End While
    
            ' If more lines exist, print another page.
            If (line IsNot Nothing) Then
                ev.HasMorePages = True
            Else
                ev.HasMorePages = False
            End If
        End Sub
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim pd As New PrintDocument()
            Console.Write(pd.PrinterSettings.PrinterName)
            Printing(pd.PrinterSettings.PrinterName)
    
        End Sub
    End Class
    
    


     

     


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn

    • Modifié TroxsaEditor vendredi 4 novembre 2011 08:24
    • Proposé comme réponse TroxsaEditor samedi 5 novembre 2011 21:17
    • Marqué comme réponse maxkun lundi 7 novembre 2011 07:18
    vendredi 4 novembre 2011 08:23
    Auteur de réponse

Toutes les réponses

  • Bonjour,

    Pourquoi définir des imprimantes quand la boite de dialogue Printdialog renvoi une propriété PrinterSettings ?

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            PrintDialog1.ShowDialog()
            MessageBox.Show(PrintDialog1.PrinterSettings.ToString())
        End Sub
    



    fred on youTube
    HTML Document Creator
    PHP MySQL Web Site Creator
    fred
    mercredi 2 novembre 2011 15:18
  • Car mon programme devra orienter les impressions des fichiers automatiquement, l'utilisateur ne devra rien faire.
    jeudi 3 novembre 2011 07:31
  • Bonjour,

    J'ai trouvé un exemple pour lister toutes les imprimantes

    http://www.freevbcode.com/ShowCode.Asp?ID=52

     


    fred on youTube
    HTML Document Creator
    PHP MySQL Web Site Creator
    fred
    jeudi 3 novembre 2011 09:53
  • Bonjour,

    Vous avez aussi la possibilité d'utiliser WMI (WIN32_Printer) voir aussi les autres class portant le meme nom (print, printDrivers, PrintConfigurations, ...)
    Que cherchez vous a faire exactement ? (Installation, Lister les imprimantes, Lister la queue d'impression, ...)

    Mettre une adresse IP c'est peut être un peux risqué sauf si c'est imprimante est en IP fix, le mieux, je pense, serait par son nom comme ça si cette imprimante change d'adresse IP elle gardera son nom (sauf si celui-ci est changé) enfin tout dépendra ce que vous recherchez a faire.

    Si vous voulez un exemple sur l'utilisation des class WMI dite moi ce que vous voulez faire et je posterais le code.

    A bientôt.


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn

    jeudi 3 novembre 2011 10:28
    Auteur de réponse
  • Les imprimantes auront des ip fixes qui ne bougeront pas, c'est pour cela que je voulais passer par les adresses ip.
    jeudi 3 novembre 2011 10:40
  • maxkun,

    Ok pourquoi, mais que souhaitez vous faire avec cette adresse IP, juste un ping, faire l'installation de l'imprimante, lister la file d'impression, savoir quelles sont les drivers installer, le choix et multiple, pourriez vous apporter des précisions pour que nous puissions vous aidez au mieux ?


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    jeudi 3 novembre 2011 10:56
    Auteur de réponse
  • En fait je dois créer un serveur fax, dés qu'un fichier arrivera sur ce serveur, je devrai, en fonction de l'expéditeur du fax, le faire imprimer une imprimante, c'est pourquoi il faut que le choix de l'imprimante soit automatique.

    Je voudrais, avec l'adresse IP, juste dire à mon application, "c'est sur cette imprimante la que tu imprime", le serveur connaitra les imprimantes car elle sont déjà toutes installées sur ce dernier.

    jeudi 3 novembre 2011 12:18
  •  

    Dans l'exemple de code suivant, un document est imprimé avec l'imprimante spécifiée.L'exemple se compose de trois composants requis :

    • Le chemin d'accès du fichier à imprimer a été affecté à une variable nommée filePath.

    • Une méthode nommée pd_PrintPage, qui gère l'événement PrintPage, a été définie.

    • Le nom de l'imprimante a été affecté à une variable nommée printer.

    Utilisez les espaces de noms System.Drawing, System.Drawing.Printing et System.IO pour cet exemple.

     

    Public Sub Printing(printer As String)
        Try
            streamToPrint = New StreamReader(filePath)
            Try
                printFont = New Font("Arial", 10)
                Dim pd As New PrintDocument()
                AddHandler pd.PrintPage, AddressOf pd_PrintPage
                ' Specify the printer to use.
                pd.PrinterSettings.PrinterName = printer
    
                If pd.PrinterSettings.IsValid then
                   pd.Print()
                Else
                   MessageBox.Show("Printer is invalid.")
                End If
            Finally
                streamToPrint.Close()
            End Try
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    

    Si vous voulez absolument le faire avec son adresse IP il faudra faire un peut plus de code.

     

     


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    jeudi 3 novembre 2011 12:43
    Auteur de réponse
  • Alors j'ai rentré le code que vous m'avez donnée mais j'ai plein de fautes :

    http://www.hostingpics.net/viewer.php?id=286778erreur3.png

    Faut-il ajouter une librairie?

    jeudi 3 novembre 2011 12:59
  • Bonjour,

    Oui il faut ajouter les espaces de noms avant la ligne Public Class Form1

    Imports System.Drawing
    Imports System.Drawing.Printing
    Imports System.IO
    
    





    fred on youTube
    HTML Document Creator
    PHP MySQL Web Site Creator
    fred
    jeudi 3 novembre 2011 21:21
  • Même aprés avoir rajouter les espaces nom j'ai toujours des erreurs, quand il me propose de l'aide pour les corriger il me propose de les remplacer par d'autres expression mais ça ne change rien il ne les reconnait toujours pas, que faire???

    http://www.hostingpics.net/viewer.php?id=325537erreur4.png

    vendredi 4 novembre 2011 07:27
  • Bonjour maxkun

    Voila le code complet (extrait du msdn)

     

    Imports System.Drawing
    Imports System.Drawing.Printing
    Imports System.IO
    
    Public Class Form1
        Private streamToPrint As StreamReader
        Private printFont As Font
        Public Sub Printing(ByVal printer As String)
            Try
                streamToPrint = New StreamReader("C:\test.txt")
                Try
                    printFont = New Font("Arial", 10)
                    Dim pd As New PrintDocument()
                    AddHandler pd.PrintPage, AddressOf pd_PrintPage
                    ' Specify the printer to use.
                    pd.PrinterSettings.PrinterName = printer
    
                    If pd.PrinterSettings.IsValid Then
                        pd.Print()
                    Else
                        MessageBox.Show("Printer is invalid.")
                    End If
                Finally
                    streamToPrint.Close()
                End Try
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    
        Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
            Dim linesPerPage As Single = 0
            Dim yPos As Single = 0
            Dim count As Integer = 0
            Dim leftMargin As Single = ev.MarginBounds.Left
            Dim topMargin As Single = ev.MarginBounds.Top
            Dim line As String = Nothing
    
            ' Calculate the number of lines per page.
            linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics)
    
            ' Print each line of the file.
            While count < linesPerPage
                line = streamToPrint.ReadLine()
                If line Is Nothing Then
                    Exit While
                End If
                yPos = topMargin + count * printFont.GetHeight(ev.Graphics)
                ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, New StringFormat())
                count += 1
            End While
    
            ' If more lines exist, print another page.
            If (line IsNot Nothing) Then
                ev.HasMorePages = True
            Else
                ev.HasMorePages = False
            End If
        End Sub
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim pd As New PrintDocument()
            Console.Write(pd.PrinterSettings.PrinterName)
            Printing(pd.PrinterSettings.PrinterName)
    
        End Sub
    End Class
    
    


     

     


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn

    • Modifié TroxsaEditor vendredi 4 novembre 2011 08:24
    • Proposé comme réponse TroxsaEditor samedi 5 novembre 2011 21:17
    • Marqué comme réponse maxkun lundi 7 novembre 2011 07:18
    vendredi 4 novembre 2011 08:23
    Auteur de réponse
  • Pourriez vous aussi changer le type de votre premier "post" et le mettre en question pour dire que la réponse au problème est résolut (si possible) ?

    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn

    vendredi 4 novembre 2011 08:27
    Auteur de réponse
  • Comment fait-on pour mettre le sujet en question posée?

    Sinon que fait le code que tu m'as fourni?Il permet d'imprimer avec l'imprimante par défaut ou on peut également imprimer avec une autre imprimante? Et j'ai essayé d'imprimer un fichier image avec ton code et cela imprime des petits symboles et non l'image, peut-on contourner ce problème?

    vendredi 4 novembre 2011 09:06
  •  

    Si c'est pour imprimer des images dans ce cas il faudra en changer le format type (de string vers le type approprier)

    L'imprimant peut tout a fait être choisi en y changeant le nom dans "Printer" (path), voir les informations qui ce trouve dans

            Printing(pd.PrinterSettings.PrinterName)

    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    vendredi 4 novembre 2011 09:12
    Auteur de réponse
  • Avez des exemples de code pour les fichiers images et pour les noms d'imprimantes car j'ai fais des tests et cela n'a pas fonctionner.

     

    J'ai essayé ça :

     

    Dim accueil As String = "LM_SALLE_ATTENTE RICOH MPC3300 PCL5c"
    
    pd.PrinterSettings.PrinterName = accueil

    Donc la je veux utiliser une imprimante connecté au réseau et non mon imprimante par défaut, mais du coup je rentre dans le else :

    If pd.PrinterSettings.IsValid Then
                            pd.Print()
                        Else
                            MessageBox.Show("L'imprimante n'est pas valide.")
                        End If


     

    • Modifié maxkun vendredi 4 novembre 2011 10:07
    vendredi 4 novembre 2011 09:39
  • Je ne sais pas comment ce nome votre imprimante d'accueil ...
    Si vous faite un msgbox de "pd.PrinterSettings.PrinterName" vous comprendrez comment il faudra nommé votre imprimante accueil

    Je vous laisse chercher un peux et si vous ne trouvez toujours pas dite le moi je vous donnerez le code pour lister toutes vos imprimante pour en extraire les noms

    A bientôt


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    vendredi 4 novembre 2011 10:36
    Auteur de réponse
  • Alors j'avais en effet une petite erreur au niveau du nom de l'imprimante, j'avais son nom mais pas son nom réseau (le nom différe légérement), mais au final j'ai toujours le message d'erreur et l'attribut isValid reste a false.

     

    Si on liste toutes les imprimantes installées sur le pc et l'on stock leur nom dans un tableau, cela pourrait-il fonctionner?

    J'ai listé toutes les imprimantes de l'ordinateur et en fait il apparait dans le nom "\\fmsrvapp1\" avant le nom de l'imprimante, c'est pour cela que ça ne fonctionnait pas :( (un peu vicieuse cette erreur la). En revanche le problème concernant l'impression d'image persiste toujours, j'ai relu ce que tu m'a dit Xavier mais je n'ai pas très bien compris.


    • Modifié maxkun vendredi 4 novembre 2011 12:43
    vendredi 4 novembre 2011 10:54
  •  

    Pour imprimer chez moi sur une imprimante local qui n'est pas par défaut ça fonctionne

    je pense pour imprimer des images il faudra changé la ligne suivant

       ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, New StringFormat())
    

    je n'ai encore jamais eu besoin de faire des impressions avec des images

    Qu'elles sont les types ou format de fichier que vous devez imprimer, que vous recevez par fax ?

    Je souhaiterais faire des essayes avec un meme type de fichier pourriez vous m'en envoyer un ?

     

    A bientot


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn

    • Modifié TroxsaEditor vendredi 4 novembre 2011 17:17
    • Proposé comme réponse TroxsaEditor samedi 5 novembre 2011 21:17
    vendredi 4 novembre 2011 14:57
    Auteur de réponse
  • Bonjour,

    Xavier, j'ai changé le type en "question".

    maxkun, éventuellement désigner (lien "Marquer comme réponse") peut-être la réponse de Xavier qui répond à votre question initiale (sélectionner l'imprimante voulue comme destination) et poser la question concernant l'impression d'image dans une nouvelle discussion (je pense que le problème est sans doute que vous utilisez encore DrawString qui est destiné à l'impression d'un texte, alors qu'il faut utiliser http://msdn.microsoft.com/fr-fr/library/system.drawing.graphics.drawimage.aspx pour "dessiner" l'image).

    Si par exemple vous avez encore d'autres problèmes (avec les marges par exemple, la mise à l'échelle ou la gestion de plusieurs pages), la conversation va devenir difficile à suivre et parfois il est même difficile de comprendre si un problème est effectivement résolu ou non avant de passer au suivant.

    Je suggère donc d'essayer de clôturer la question dès que la question initiale est effectivement résolue et d'ouvrir une nouvelle question pour chaque nouveau problème.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 4 novembre 2011 21:46
    Modérateur
  • J'ai marqué le sujet en tant que résolu et ouvert un autre sujet pour mon autre question :)
    lundi 7 novembre 2011 07:48