Bonjour,
Je suis en train d’écrire un programme en VB afin d'imprimer des étiquettes de produits (référence + désignation + gamme + Code A Barre ou CAB).
Ma base de donnée sous sql (logiciel Sage100) étant à reprendre, j'en ai extrait les données pour les mettre en forme et les envoyer à l'imprimante.
J'ai déjà réussi à mettre ne forme mon étiquette et à l'envoyer sur l'imprimante mais le délai d'impression est long car l'imprimante ne stocke pas le modèle de l'étiquette afin de l'imprimer X fois. Le programme renvoi simplement X fois l'étiquette à l'imprimante.
La solution semble de mémoriser l'étiquette dans l'imprimante. J'ai fait le tour de la documentation Intermec dans ce sens en prenant en compte les subtilités du langage IPL (Intermec Programming Language). Les champs à mémoriser sont simplement incluent dans des balises faites de caractères ascii non visibles.
Jusque là se serait à peu près bon. Mais l'imprimante même si elle lit les données, elle ne semble pas les interpréter correctement. Et la je bloque.
est-ce que le drivers interprète mes données, les modifies et renvoie un code faux à l'imprimante ? Dois-je utiliser un drivers générique (j'ai essayé sans succès) ?
Pour simplifier les essais j'ai récupéré un code d'exemple d'étiquette de chez le fabricant contenant des caractères ascii non-imprimables que j'enregistre sur un fichier texte. Et j'envoie le fichier sur mon imprimante. Je me sers du debug.print afin de voir ce qu'il lit (et je ne vois donc pas les caractères non visibles).
Comment être sûr que les caractères arrivent bien jusqu'à mon imprimante sans les sniffer ?
Mon code de lecture de fichiers :
Je mets aussi en pj mon code exemple en IPL dans un fichier txt.
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
33
34
35
36
37
38
39
40 Public Class Form1 Dim fileToPrint As System.IO.StreamReader Dim printFont As System.Drawing.Font Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim PrintPath As String = System.Environment. _ GetFolderPath(Environment.SpecialFolder.DesktopDirectory) fileToPrint = New System.IO.StreamReader(PrintPath & "\myfile2.txt") 'fichier sur le bureau contenant le texte' printFont = New System.Drawing.Font("Arial", 10) Debug.Print(fileToPrint.ReadToEnd) 'lecture du fichier' PrintDocument1.Print() 'impression du fichier' 'j imprime alors une étiquette blanche' fileToPrint.Close() End Sub Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As _ System.Drawing.Printing.PrintPageEventArgs) Handles _ PrintDocument1.PrintPage Dim linesPerPage As Single = 0 Dim yPos As Single = 0 Dim count As Integer = 0 Dim leftMargin As Single = 0 'e.MarginBounds.Left mises à 0 volontairement' Dim topMargin As Single = 0 'e.MarginBounds.Top mises à 0 volontairement' Dim line As String = Nothing linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics) While count < linesPerPage line = fileToPrint.ReadLine() If line Is Nothing Then Exit While End If yPos = topMargin + count * printFont.GetHeight(e.Graphics) e.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, _ yPos, New StringFormat()) count += 1 End While If Not (line Is Nothing) Then e.HasMorePages = True End If End Sub End Class
Mon problème fait-il craquer chez quelqu'un la petite étincelle qui me fait grandement défaut ?
Dans touts les cas, merci de votre aide à tous.
Aurélien
Partager