none
Imprimer un fichier RRS feed

  • Question

  • Bonjour,

    J'aimerai savoir quelle fonction il faut utiliser pour imprimer un fichier en vb sachant que je suis en mode console et non graphique.

    Cordialement maxkun.
    mercredi 26 octobre 2011 13:18

Réponses

  • Un MP, je sais pas où y a des MP moi, en bas du message t'as "écrire", passe par là stp...

    Le ton chemin avec le répeertoire d'arrivée aussi s'il te plaît, que je puisse commencer par faire une routine de lecture du répertoire...

    Concernant la méthode, ma foi elle n'est pas économique, il serait plus logique de lire les fax sur ordinateur que de les imprimer ipso facto, m'enfin, c'est toi le chef... qui a un chef...

    :o)

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Marqué comme réponse maxkun vendredi 28 octobre 2011 07:30
    jeudi 27 octobre 2011 11:45

Toutes les réponses

  • Bonjour,

    Quel est le format de ce fichier ?

    Si c'est un fichier dans un format tiers (Word, Excel, PDF etc...) voir http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/e396b74f-be5c-4f01-a936-eaaf0f30830b (on lance le fichier avec Process.Start et le "verbe" Print ce qui lance l'application qui lui est associée et cette application va imprimer le fichier).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mercredi 26 octobre 2011 16:09
    Modérateur
  • Alors ça sera un format pdf mais aussi un format tiff, je sais pas si ce format et traité pour ces fonctions là??
    jeudi 27 octobre 2011 06:36
  • Bonjour MaxKum,

    Testé :

    ' impression console
    Option Explicit On
    Imports System.Data.OleDb
    Module Module1
      Sub Main()
        Dim Prt_Proc As New Process ' imprime selon l'extension
        Try
          Dim Printer_Name As String = ""
          Dim pathFile As String = "C:\Users\joe\Documents\test.txt"
          Prt_Proc.StartInfo.FileName = pathFile
          '
          ' Selon type de fichier (print OU printTo)
          'Prt_Proc.StartInfo.Verb = "PrintTo"
          Prt_Proc.StartInfo.Verb = "Print"
          '
          Prt_Proc.StartInfo.CreateNoWindow = True
          Prt_Proc.StartInfo.Arguments = """" & Printer_Name & """"
          Prt_Proc.StartInfo.UseShellExecute = True
          Prt_Proc.Start()
          Prt_Proc.WaitForExit()
          Prt_Proc.Dispose()
        Catch ex As Exception
          Prt_Proc.Dispose()
          MsgBox(Err.Number & "  " & Err.Description)
        End Try
      End Sub
    End Module
    
    

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Proposé comme réponse EhJoe jeudi 27 octobre 2011 07:55
    • Non proposé comme réponse EhJoe jeudi 27 octobre 2011 09:41
    • Proposé comme réponse Ciprian Duduiala vendredi 28 octobre 2011 08:12
    jeudi 27 octobre 2011 07:55
  • Alors ton code fonctionne plutôt bien dans l'ensemble :)

    Mais quand je test avec un fichier .doc le document s'ouvre mais ne 's'imprime pas (il me dit qu'il n'y a pas d'imprimante par défaut dans la fenêtre d'erreur or j'en ai bien une, peut être faut-il le définir l'imprimante par défaut dans le code??), et avec un pdf j'ai juste acrobat reader qui s'ouvre mais pas le fichier et aucune impression ne se lance.

    Pour mon projet, il ne faut pas nécessairement que mon fichier s'ouvre comme ça le fait la mais plutôt stocker mon fichier dans une variable et le faire imprimer sans l'ouvrir. Je sais pas si c'est possible de le stocker dans une variable??


    • Modifié maxkun jeudi 27 octobre 2011 08:33
    jeudi 27 octobre 2011 08:19
  • Alors ton code fonctionne plutôt bien dans l'ensemble :)

    Mais quand je test avec un fichier .doc le document s'ouvre mais ne 's'imprime pas (il me dit qu'il n'y a pas d'imprimante par défaut dans la fenêtre d'erreur or j'en ai bien une, peut être faut-il le définir l'imprimante par défaut dans le code??), et avec un pdf j'ai juste acrobat reader qui s'ouvre mais pas le fichier et aucune impression ne se lance.

    Pour mon projet, il ne faut pas nécessairement que mon fichier s'ouvre comme ça le fait la mais plutôt stocker mon fichier dans une variable et le faire imprimer sans l'ouvrir. Je sais pas si c'est possible de le stocker dans une variable??



    Alors j'ai mis en commentaire cette ligne
    MsgBox(Err.Number & "  " & Err.Description)
    

    et l'impression s'est bien lancé autant pour le pdf que pour le .doc

    Maintenant est-il possible d'imprimer de la même maniére des fichiers mais en temps réel???

    Je m'explique, ce programme fera office de serveur fax, donc a chaque arrivé de fax, je devrais l'imprimer (sur la bonne imprimante), en faisant une boucle infini cela peut-il fonctionner?

    jeudi 27 octobre 2011 08:39
  • Suite, en réponse...

    Oui, il faut ajuster les paramètres selon les besoins, en plus je ne maîtrise pas tout, mais en mode graphique les "Doc*" passent très bien, alors en effet il faut essayer "Print" puis "PrintTo" et peut être effectivement donner son nom à l'imprimante ?

    De toute façon, je suis arrivé à ce que je connais sur la question, je ne peux guère en apporter davantage, désolé.

    Merci pour le point :o)

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    jeudi 27 octobre 2011 08:40
  • Suite, tu dis

    Pour mon projet, il ne faut pas nécessairement que mon fichier s'ouvre comme ça le fait la mais plutôt stocker mon fichier dans une variable et le faire imprimer sans l'ouvrir. Je sais pas si c'est possible de le stocker dans une variable??

     

    Je ne compends pas, tu veux dire que ton fichier, celui que tu imprimes s'ouvre visuellement, sur un fichier Doc tu vois Word qui s'ouvre avec le fichier à imprimer, étonnant ?

    Oui tu peux imprimer en boucle, tu veux dire par là de rappeler l'exe console en lui passant le nom du fichier en somme, est-ce ça ?

    Depuis quoi et coment appelles-tu l'exe console ?

    Et en second lieu, pourquoi un application console, tu aurais pu le faire depuis l'application principale de la même façon, pourquoi ce choix de dédoublement de programme, un qui pilote et l'autre qui imprime en mode console ?

     

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    jeudi 27 octobre 2011 08:58
  • Il serait possible d'attendre l'arrivée d'un fichier dans un dossier avec http://msdn.microsoft.com/fr-fr/library/system.io.filesystemwatcher.aspx (que je n'ai jamais utilisé) ce qui déclencherait le code qui lance l'impression.

    Ou peut-être dans un premier temps juste attendre qq minutes avant de voir si un fichier est arrivé récemment (attention à ne pas traiter des fichiers qui serait en cours de création) quitte à améliorer ensuite ?

    J'ai vu aussi la partie sur "stocker le fichier dans une variable et le faire imprimer sans l'ouvrir". Le problème est qu'un fichier est juste une suite d'octets qui n'ont généralement aucun sens pour les autres applications que celles capables de gérer ce format.

    Pour imprimer il faut donc qu'il y ait qq part du code qui va "comprendre" le contenu du fichier pour générer le "dessin" qui correspond à ce document (donc soit l'application qui correspond à ce format, soit un visualisateur qui gérerait le (ou les) format voulu, soit du code VB ce qui serait facile pour les formats simples comme les images mais serait considérablement plus compliqué pour des documents Word, Excel ou autre).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    jeudi 27 octobre 2011 09:19
    Modérateur
  • Oui, dés que je lance l'application j'ai le fichier qui s'ouvre (avec word pour un fichier .doc).

    En fait, je dois créer une application pour un serveur fax, cette application doit gérer chaque fax reçu, à chaque fax reçu, je dois le faire imprimer sur la bonne imprimante suivant l'expéditeur (la plupart des fichiers seront des pdf et des .tiff), donc grâce à toi j'arrive a présent à faire imprimer un document, après il me reste a le faire imprimer sur la bonne imprimante. J'ai choisi une application console qui tournera à l'infini car je ne maitrise pas trop les form. Je ne sais pas si j'ai été très clair ou si un point reste encore obscur, mais je suis conscient que c'est un gros projet difficile à réaliser et c'est pour cela que je fais appel à vous car je suis débutant en programmation.

    jeudi 27 octobre 2011 09:21
  • Suite,

    Ah oui, il s'ouvre, mais il se referme tout seul le fichier ?

    Je crois que ce serait bien mieux sur une appliation graphique qui serait lancée au démarrage de l'ordinateur et se mettrait en barre de tâche simplement, l'avantage étant qu'on peut utiliser des objets puissants que n'offrent pas la console (qui est peu pratique). D'autant que le code d'impression fonctionnerait aussi en mode graphique. La console ça ne se fait plus guère (msDos)...

    Tu as mis la charrue avant le boeuf, on aurait pu commencer par chercher comment récupérer le fichier, c'est la première des choses, car ça ne sert à rien de l'imprimer s'il n'est pas déjà récupéré par le programme, as-tu une méthode pour récupérer le nom du fichier, car c'est par là qu'il faut commencer ?

    Concernant l'imprimante, pourquoi devrait-elle varier, n'est-ce pas sur l'imprimante par défaut que ça s'imprime, car je veux bien qu'il y ait plusieurs imprimantes, mais généralement les fax sortent tous sur la même imprimante, sauf à avoir des fichier avec des noms qui permettraient de distribuer l'impression des faxs sur plusieurs imprimants selon le cas, c'est une imprimante fixe, et souvent celle par défaut...

    Si ton fichier arrive dans un répertoire précis que l'on connait, ça peut se faire assez facilement le reste, ce n'est pas bien compliqué, on lit en boucle avec un timer, quand on trouve on imprime, bof...

    Si tu veux je peux te faire et t'envoyer ton application pour que tu puisses faire ça sur une bonne base, tu peux me contacter en bas du message, car là tu va demander dans le forum de faire tout un programme morceau par morceau, alos ça ira plus vite e le coder directement, au moins l'ossature... puis de tout t'envoyer zipé...

     

     

     

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    jeudi 27 octobre 2011 09:41
  • Non le fichier s'ouvre mais ne se referme pas tout seul.

    Je suis ok pour une application graphique, je suis juste moins bon mais si tu m'aide ça devrait aller :)

    Je n'est pas de méthode pour récupérer le nom du fichier mais je dois arriver a récupérer chaque nouveau fichier dés sa création.

    L'imprimante doit varier car en fait l'application tournera sur un serveur fax virtuel et ce serveur sera connecté a plusieurs imprimantes. Le but du projet est que dés l'arrivée d'un fax (à chaque arrivée un fichier tiff est généré), l'application doit transférer le fichier tiff sur la bonne imprimante suivant le numéro de l'expéditeur, par exemple si je reçois un fax commençant par 01.XX.XX.XX.XX je sais qu'il devra s'imprimer sur l'imprimante X (ce sont des règles que je devrai mettre en place mais ce n'est pas le sujet pour l'instant), c'est pour cela que j'ai besoin d'utiliser plusieurs imprimantes.

    Les fichiers arrivent tous dans le même répertoire, cela facilitera le travail de recherche.

    Sinon je veux bien que tu m'envoie une application pour avoir de bonne base, je t'envoie un mp :)

    jeudi 27 octobre 2011 11:31
  • Un MP, je sais pas où y a des MP moi, en bas du message t'as "écrire", passe par là stp...

    Le ton chemin avec le répeertoire d'arrivée aussi s'il te plaît, que je puisse commencer par faire une routine de lecture du répertoire...

    Concernant la méthode, ma foi elle n'est pas économique, il serait plus logique de lire les fax sur ordinateur que de les imprimer ipso facto, m'enfin, c'est toi le chef... qui a un chef...

    :o)

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Marqué comme réponse maxkun vendredi 28 octobre 2011 07:30
    jeudi 27 octobre 2011 11:45
  • Pour le répertoire je vais demander a mon tuteur mais la il est parti, dés que je l'ai je te le donne, sinon tout les fax ne seront pas a imprimé, d'autres seront envoyé par mail, mais c'est encore une autre partie du projet ça.
    jeudi 27 octobre 2011 11:56
  • Bonjour, je ré-ouvre le sujet pour une petite question. J'ai 2 solutions pour imprimer mes fichiers, la première me permet d'imprimer mes fichiers tiff, la seconde les fichiers pdf.

    Le souci avec la première méthode c'est que quand je veux imprimer des fichiers pdf une exception se génére et me dit "Mémoire insuffisante" à la ligne :

    oImage = Image.FromFile(img)

    Pour la deuxième méthode et toujours avec un fichier pdf, le fichier s'imprime bien mais le document s'imprime toujours sur la même imprimante bien que je spécifie dans le code une autre imprimante.

     

    Voici mes 2 fonctions :

    La 1ére (pour les tiff) :

    Public Sub Printing(ByVal printer As String, ByVal img As String)
    
            Try
                oImage = Image.FromFile(img)
                AddHandler pd.PrintPage, AddressOf pd_PrintPage
                pd.PrinterSettings.PrinterName = imprimante_ADV
                If pd.PrinterSettings.IsValid Then
                    pd.Print()
                    oImage.Dispose()
                Else
                    oImage.Dispose()
                End If
                oImage.Dispose()
            Catch ex As Exception
                oImage.Dispose()
                supprime_erreur()
            End Try
            System.Threading.Thread.Sleep(5000)
        End Sub
    
        Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
            ev.Graphics.DrawImage(oImage, 1, 1, 800, 1150)
        End Sub
    

    La seconde (pour les pdf) :

    Sub impression(ByVal pathFile As String)
            Dim Prt_Proc As New Process ' imprime selon l'extension
            Try
                Prt_Proc.StartInfo.FileName = pathFile
                ' Selon type de fichier (print OU printTo)
                'Prt_Proc.StartInfo.Verb = "PrintTo"
                Prt_Proc.StartInfo.Verb = "Print"
                Prt_Proc.StartInfo.CreateNoWindow = True
                Prt_Proc.StartInfo.Arguments = imprimante_informatique
                Prt_Proc.StartInfo.UseShellExecute = True
                Prt_Proc.Start()
                Prt_Proc.WaitForExit()
                Prt_Proc.Dispose()
            Catch ex As Exception
                Prt_Proc.Dispose()
                supprime_erreur()
            End Try
        End Sub
    



    Cordialement, maxkun ;)
    • Modifié maxkun mardi 7 février 2012 14:10
    vendredi 16 décembre 2011 13:35
  • Bonjour, problème toujours non résolu, si vous avez des solutions, je vous écoute :)

    Cordialement, maxkun ;)

    mardi 7 février 2012 14:11