Imprimer plusieurs centaines d etiquette sans boite de dialogue

Signaler
Messages postés
16
Date d'inscription
samedi 26 juillet 2003
Statut
Membre
Dernière intervention
27 janvier 2020
-
cs_bfb
Messages postés
16
Date d'inscription
samedi 26 juillet 2003
Statut
Membre
Dernière intervention
27 janvier 2020
-
Bonjour,

Je cherche à accélérer l'impression de plusieurs centaines d'étiquette sur une imprimante zebra. Toutes les façons que j'ai essayer fonctionnent mais beaucoup, beaucoup, beaucoup trop lente. Je désespère. Voici ce que j'ai codé pouvez vous l'accélérer par une autre méthode avec un max d'explication (je suis débutant et très mauvais).
D'avance merci.



Public Class Form1
 Dim PageNumber As Integer




Private Sub Imprime_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Imprime.GotFocus
        If PageNumber = "0" And Tetiquettes.Text <> "" Then
            PageNumber = Tetiquettes.Text
        End If
    End Sub





    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage


        If PageNumber > 0 Then
            e.Graphics.DrawString("ART:   " & REF.Text, New Font("Impact", 16, FontStyle.Bold), Brushes.Black, 30, 20) '1er nb marge gauche 2e marge haute

            e.Graphics.DrawString("Désignation", New Font("Arial", 8, FontStyle.Regular), Brushes.Black, 42, 80) ' Désignation:

            e.Graphics.DrawString(DESIGNATION.Text, New Font("Arial", 12, FontStyle.Bold), Brushes.Black, 40, 100) '

            e.Graphics.DrawString("QTE :" & TQte.Text, New Font("Arial", 16, FontStyle.Bold), Brushes.Black, 30, 138) '

            e.Graphics.DrawString(REPACK.Text, New Font("Bahnschrift Condensed", 12, FontStyle.Bold), Brushes.Black, 30, 165 & PageNumber) 'ici on indique le nombre d'impression restante

            PageNumber -= 1 'on retire une impression

            e.HasMorePages = True 'indique qu'il reste des impression à faire

        End If

        If PageNumber = 0 Then e.HasMorePages = False 'nombre d'impression = 0 on arrete
end sub




Encore merci d'avance et excusez moi si ce post n'est pas réglementaire mais je fais au mieux de mes capacité (très petite comparer a ce que je peux voir sur le site)

3 réponses

Messages postés
2066
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
12 février 2020
85
Bonjour
Déjà en suivant ceci ton code sera largement mieux présenté : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Maintenant voyons ceci

Public Class Form1
   
    Private PageNumber as Integer
    Private NbEtiquettes , ReferenceArt , DesignationArt, QuantiteArt, PackArt as String

    Private Sub Imprime_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Imprime.GotFocus
        ' on mets les paramètres entrés au clavier dans des variables
        NbEtiquettes = Tetiquettes.Text
        ReferenceArt =  REF.Text
        DesignationArt = DESIGNATION.Text
        QuantiteArt = TQte.Text
        PackArt = REPACK.Text
        If PageNumber = 0 And NbEtiquettes <> String.Empty Then
            PageNumber = Convert.ToInt32(NbEtiquettes.)
       End If
    End Sub

    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

    If PageNumber > 0 Then
        e.Graphics.DrawString("ART: " & Reference, New Font("Impact", 16, FontStyle.Bold), Brushes.Black, 30, 20) '1er nb marge gauche 2e marge haute
        e.Graphics.DrawString("Désignation", New Font("Arial", 8, FontStyle.Regular), Brushes.Black, 42, 80) ' Désignation:
        e.Graphics.DrawString(DesignationArt, New Font("Arial", 12, FontStyle.Bold), Brushes.Black, 40, 100) '
        e.Graphics.DrawString("QTE :" & QuantiteArt, New Font("Arial", 16, FontStyle.Bold), Brushes.Black, 30, 138) '
        e.Graphics.DrawString(PackArt, New Font("Bahnschrift Condensed", 12, FontStyle.Bold), Brushes.Black, 30, 165 & PageNumber) 'ici on indique le nombre d'impression restante
        PageNumber -= 1 'on retire une impression
        e.HasMorePages = (PageNumber > 0)
    End If
End Sub 

cs_bfb
Messages postés
16
Date d'inscription
samedi 26 juillet 2003
Statut
Membre
Dernière intervention
27 janvier 2020

Je test tout ça en essayant de bien comprendre tout ce que tu as fait mais encore un ENORME merci pour ton aide je suis autodidacte et je ne me sert que de web pour avancer et c'est dur.

Encore un grand merci
vb95
Messages postés
2066
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
12 février 2020
85 > cs_bfb
Messages postés
16
Date d'inscription
samedi 26 juillet 2003
Statut
Membre
Dernière intervention
27 janvier 2020

Un lien très intéressant pour un cours VB Net : https://plasserre.developpez.com/cours/vb-net/
Moi aussi je suis autodidacte et je fais ça par passion depuis plus de 20 ans

Ps : le point est à supprimer sur cette ligne
PageNumber = Convert.ToInt32(NbEtiquettes.)

devient
PageNumber = Convert.ToInt32(NbEtiquettes)

Désolé
cs_bfb
Messages postés
16
Date d'inscription
samedi 26 juillet 2003
Statut
Membre
Dernière intervention
27 janvier 2020
> vb95
Messages postés
2066
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
12 février 2020

merci effectivement vb m'a demander de corriger.

Je sais que vous avez fait un super travail mais en vitesse de mise dans le spooler de l'imprimante on ne peut pas accélérer le processus? ce que je fait c'est pour mon boulot et ce qui existe et encore nettement plus rapide mais c'est un system type "dos ecran noir avec touche F quelque chose" pour imprimer c'est un logiciel interne à l'entreprise.

Et encore MERCI pour l'aide apportée
vb95
Messages postés
2066
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
12 février 2020
85 > cs_bfb
Messages postés
16
Date d'inscription
samedi 26 juillet 2003
Statut
Membre
Dernière intervention
27 janvier 2020

A chaque fois que tu imprimes une étiquette il faut envoyer les paramètres de ce qu'il faut imprimer à l'imprimante .
Ces paramètres étant dans des TextBox j'ai mis ces paramètres dans des variables ce qui évite d'aller à chaque fois chercher le paramètre dans la Textbox .
Maintenant si tu imprimes 100 fois la même étiquette il est possible que la Zébra elle-même puisse enregistrer les différents paramètres et imprime les 100 étiquettes directement sans retourner dans VB à chaque fois pour savoir s'il y a encore des étiquettes à imprimer .
Mais sans connaître les spécificités techniques et logiques de la Zébra on ne sait pas faire .
C'est sûrement ce que fait le logiciel "Dos avec écran noir" comme tu dis et il n'y a guère plus rapide .
cs_bfb
Messages postés
16
Date d'inscription
samedi 26 juillet 2003
Statut
Membre
Dernière intervention
27 janvier 2020
> vb95
Messages postés
2066
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
12 février 2020

oui j'ai vu ce matin avec mon chef il m'a dit que maintenant c'est dans les paramètre de l'imprimante sous windows qu'il faut voir et pour leur logiciel (type dos) il possède son propre système de paramétrage.

Encore merci
Messages postés
161
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
14 février 2020
4
Salut cs_bfb,

"Je cherche à accélérer l'impression"
Comme Vb95 l'a souligné, tu ne précises pas si les étiquettes sont identiques…
Mais, en règle générale, moins tu imprimes d'objets, plus l'impression de l'étiquette sera rapide.

Tu as trois possibilités:
- Imprimer un masque de l'étiquette sur toutes les étiquettes vierges, que tu imprimera la nuit, ou le weekend. Le rouleau imprimé sera enroulé, puis tu demandera à ton logiciel de remplir les trous, après un calage précis de la première etiquette.
- Tu imprimes le masque (image bitmap), l'imprimante remonte, puis tu lances l'impression de l'étiquette personnalisée (codes barres, article, adresse…) à la demande ou à la suite. Cela évite le traitement de plusieurs objets sur l'espace à imprimer, la mise en forme et la réduction de tes objets graphiques/textes…
Donc, impression du masque (logo entreprise, labels…) puis surimpression sur le masque.

Le masque peut s'imprimer juste après l'impression d'une étiquette personnalisée, et attendre la validation manuelle d'une nouvelle étiquette…
Tout dépend du mode d'impression, au coup-à-coup ou à la volée.

Regarde si tu peux faire une impression en deux fois, avec les codes imprimante pour le retour vers le haut ( plusieurs back-lines pour recaller l'imprimante), tu auras un gain de traitement machine à chaque reconstruction de l'espace d'impression.
Pour la préimpression (le rouleau complet), cela suppose que l'étiquette est de taille identique, et que le masque est imprimé sans massicotage automatique après impression… Pour l'impression personnalisée, cette option devra être réactivée.

- La dernière possibilité et de créer directement une image graphique en bitmap, et de ne pas envoyer l'élément graphiques et texte qui seront retravaillés par le gestionnaire d'objet de l'imprimante !

Il gère ces objets les un après les autres, et reconstitue l'image, comme une photo, de tes différents objets.
Regarde aussi si ton imprimante gère l'impression dite 'brouillon' qui prennent moins de place en mémoire et de place sur le disque dur.

Mais, si tu veux vraiment imprimer rapidement, ouvre la documentation de l'imprimante, et envoie directement la chaîne de caractère bitmap ou texte, sans passer par le gestionnaire d'impression de Windows. De la sorte, le système ne gère plus rien, et à l'aide des caractères graphiques ou semi-graphiques, ou même en bitmap noir et blanc on ordonne à l'imprimante une impression à la demande.
Tout dépend du buffer et de la rapidité de celle-ci, mais plus de latences système…
Messages postés
16
Date d'inscription
samedi 26 juillet 2003
Statut
Membre
Dernière intervention
27 janvier 2020

Mon chef m'a dit que c'est sur le paramétrage de l'imprimante qu'il faut travaillé. On doit voir ca demain si toutefois on a un peut de temps. Mais le code que m'a donné VB95 m'a vraiment bien aidé j'attend que mon chef fasse le paramétrage idéal. C'est lui qui a les accès moi je ne suis qu'un intérim encore pour quelques jours .

En tout les cas merci pour toutes vos aides. J'ai bien avancé grâce à vous.