IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Comment envoyer un fichier à une imprimante sans interprétation ni driver ni application associée ?


Sujet :

Access

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 38
    Points : 94
    Points
    94
    Par défaut Comment envoyer un fichier à une imprimante sans interprétation ni driver ni application associée ?
    Bonjour,
    Comment envoyer à une imprimante des lignes (une chaîne / un fichier), sans ouvrir d'application, et en choisissant l'imprimante.
    La config : un PC avec des imprimantes (virtuelles comme PDFCreator, physique comme une laser en USB / un copieur en réseau / et une thermique en USB).
    Le but : imprimer une étiquette avec l'imprimante thermique, lui télécharger une config, une suite de masques, une bibliothèque de logo.
    Il serait simple de faire un état et de l'imprimer. Mais j'ai construit une appli qui construit de toute pièce une étiquettes (en fonction de critères multiples, boucles, ..) qui créer un fichier d'instruction dans le langage de l'imprimante (ZPL, imprimante Zebra, mais ce serait pareil en IPL pour des imprimantes Intermec).
    Anciennement, j'utilisais un utilitaire gratuit (PrintFile), et j'avais un fichier cmd.bat "PrintFile32.exe /n:T402 /p:toto.cfg".
    Mais on a changé le PC pour mettre W7-64, PrintFile n'existe plus (n'existe qu'en 32).
    Pas trop grave, je trouvais ça alambiqué de lancer un BAT sous DOS pour télécharger un fichier d'instructions... Par goût je trouvais plus logique d'utiliser une instruction pour télécharger, directement depuis Access.

    Donc, question "simple" : comment imprimer sous Access, sans passer par un état ni un formulaire, ni une requête ; sans ouvrir une application associée (comme le ferait un ShellExec) ; et en choisissant une imprimante spécifique (paramétrée dans un table des imprimantes par langage, par dimensions de papier, par atelier, par résolution).
    * soit en imprimant le fichier
    => du style File.PrintOut, ou Print #1, File ou Copy File to printer
    * soit en lisant le fichier ligne à ligne, et en envoyant les lignes une à une sur le port
    => du stylr Ligne.Print ou Print #2, Ligne après avec défini que #2 = BBP11-24L sur USB, ou #3 = TLP3844 sur Serveur_Impress.

    Merci à toutes les bonnes idées

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Print sous Dos.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 452
    Points : 43 099
    Points
    43 099
    Par défaut
    ton printfile.exe 32 bits devrait fonctionner sous Windows 64 bits.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 38
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par loufab Voir le message
    Print sous Dos.
    Justement non, c'est l'intérêt de PrintFile : DOS ne reconnait pas les USB, ni les réseaux "Imprimante BBP11-24L en USB sur PC035".

    Citation Envoyé par chrtophe Voir le message
    ton printfile.exe 32 bits devrait fonctionner sous Windows 64 bits.
    Justement, j'avais tenté "d'installer" PrintFile, et là, j'ai un gros message d'erreur entre 32 et 64 bits.
    J'ai tenté différentes install, modes de compatibilité, ... Rien.
    Par contre, j'ai créé un répertoire "PrintFile" dans "C:\Program Files\", et j'y ai copié les fichiers PrFile32.exe et dll... et ça fonctionne !

    Donc même si j'ai mis en oeuvre cette solution provisoire, de "placer" PrintFile sans l'installer,...
    Je maintiens la question :
    Il n'y a pas une instruction en VBA MS-Access pour envoyer à l'imprimante un fichier de config (inutile de créer un état et de l'imprimer : ce que je veux envoyer, ce sont des caractères de contrôle (par définition non imprimables), des instructions dans le langage de l'imprimante) ?

    Merci d'avance...

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,
    En effet l'usb sous dos...

    Il n'y a plus qu'à l'aide des API (si Windows le fait c'est que les api sont là)

    Je t'ai trouvé un lien en VB6 à adapter :

    http://blog.peter.skarpetis.com/arch...n-usbprintsys/

    N'hésite pas à poster tes résultats.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 38
    Points : 94
    Points
    94
    Par défaut API32 WritePrinter
    Bonjour,

    J'ai finalement réussi à imprimer directement sur l'imprimante, sans passer par une appli externe, et en paramétrant et en choisissant l'imprimante dans l'appli.

    Etape 1 : Créer les modules API pour imprimer.


    Etape 2 : utilisation de ces API, et création d'une routine d'impression : File2Printer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Public Sub FileToPrinter(ByVal NomFichier As String, ByVal Imprimante As String)
    Dim lhPrinter As Long
    Dim lReturn As Long
    Dim lpcWritten As Long
    Dim lDoc As Long
    Dim strLine As String
    Dim MyDocInfo As DOCINFO
     
    lReturn = OpenPrinter(Imprimante, lhPrinter, 0)
    If lReturn = 0 Then
        MsgBox "Cette imprimante est inconnue : " & Imprimante
        Exit Sub
    End If
     
    MyDocInfo.pDocName = "EtqZebra"
    MyDocInfo.pOutputFile = vbNullString
    MyDocInfo.pDatatype = vbNullString
    lDoc = StartDocPrinter(lhPrinter, 1, MyDocInfo)
    Call StartPagePrinter(lhPrinter)
     
    Open NomFichier For Input As #1
    Do While Not EOF(1)    ' Check for end of file.
        Line Input #1, strLine    ' Read line of data.
        strLine = strLine + vbFormFeed
        lReturn = WritePrinter(lhPrinter, ByVal strLine, Len(strLine), lpcWritten)
    Loop
    Close #1
     
    lReturn = EndPagePrinter(lhPrinter)
    lReturn = EndDocPrinter(lhPrinter)
    lReturn = ClosePrinter(lhPrinter)
    End Sub
    Etape 3 : Renseigner les files d'attentes des imprimantes
    Pour chaque imprimante physique (P01, P02, P03), on renseigne le chemin windows :
    * P01 : Zebra T402 sur port USB
    * P02 : TLP2844Z partagée sur PC08
    * P03 : BBP11-34L branchée en TCP/IP
    Voici la boîte de dialogue qui permet de paramétrer cette correspondance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Load()
     Dim NomImp As Printer
     ChoixSpooler.RowSource = ""
     
     For Each NomImp In Printers
       ChoixSpooler.AddItem NomImp.DeviceName
     Next
     
     Me.Refresh
     Me.Requery
    End Sub
    Etape 4 : l'utilisateur
    C'est l'applpication qui choisit l'imprimante en fonction du produit qu'on va vendre (étiquette papier, étiquette polyester, étiquette Kapton, étiquette aluminisée, le tout en différents formats 51x12, 52x25, 31x19, ...) => L'application est sur un PC avec une dizaine d'imprimantes avec chacune son rouleau d'étiquette. Selon le produit vendu, l'application envoie à l'une des imprimantes.
    Donc au niveau de la structure, j'ai :
    * une table des produits, qui indique pour chacun "Kapton", "51x12", 300DPI ; pour un autre produit "Polyester", "31x19", 200DPI.
    * une table des imprimantes "P01" => 200DPI, consommable="C29"
    * une table des consommables "C29" => "Polyester", "32x19".
    A partir de là, si une des imprimantes contient le bon consommable, elle est sélectionnée. Sinon, il met le bon consommable dans une des imprimantes, et une boîte de dialogue lui permet de renseigner ce changement.

    Et comme tout ça est en réseau, avec l'appli qui tourne dans différents locaux, avec certaines imprimantes qui sont partagées et d'autres non, et que sur chaque PC la déclaration Windows peut être différente (sur PC01 c'est P02 sur USB local, alors que que sur PC02 c'est P02 partagée par PC01).
    Sacré projet, j'en suis assez fier ma foi.
    Cette appli existe depuis 10 ans, et chaque année j'ajoute une petite fonction en plus.
    Avec cette modif (et donc l'abandon de PrinFile), l'appli est mature, peut être partagée, est plus robuste.
    Merci aux différents coups de main des uns et des autres.
    Merci à ce forum qui permet tant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment envoyer un fichier vers une adresse web?
    Par iclic dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/06/2009, 12h00
  2. [AJAX] Comment envoyer au serveur une seul info sans recharger la page
    Par Ekimasu dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 15/11/2007, 12h10
  3. Installer une imprimante sans le cd
    Par Lanny dans le forum Périphériques
    Réponses: 5
    Dernier message: 02/01/2006, 20h49
  4. Serveur/Client UDP: comment envoyer un fichier avec mon code
    Par danje dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 21/12/2005, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo