Les lignes sont coupées lorsque Printer.Print est une imprimante «Texte générique seulement»
Question
Je suis en train de maintenir une ancienne application vb6 qui imprime ZPL-II.
Je viens de découvrir qu'il y a un problème si j'imprime de longues lignes sur l'imprimante avec " Printer.Print ", les lignes ne seront coupées qu'à 89 premiers octets / ligne. Cela fonctionne parfaitement et conserve les lignes telles quelles lorsque j'utilise Imprimer ou Copier sous DOS vers LPT.
D'où vient ce comportement? Comment puis-je résoudre ce problème? J'aimerais prendre en charge toutes les imprimantes, y compris les imprimantes LPT, USB et réseau.
PS. Je revérifie les octets réellement envoyés à l’imprimante par impression dans un fichier, et non pas dans LPT.
La solution 2
Je travaillais pour ne PAS utiliser Printer.Print. Mais utiliser FileSystemObject pour imprimer un fichier texte sur un chemin UNC d’une imprimante réseau.
Cela fonctionne comme une crème mais l’imprimante doit être cartographiée. Même une imprimante locale.
Autres conseils
Vous devez utiliser la fonction Printer.TextWidth et la comparer à la propriété Printer.ScaleWidth pour pouvoir traiter ce problème dans Visual Basic 6. Elle ne fait pas de retour à la ligne automatique, contrairement à la fonction DOS.
Vous allez vous assurer que la police définie par l'imprimante est trop adaptée à la police de l'imprimante. Cela peut nécessiter l’utilisation de l’un des "imprimeurs". polices fournies avec le pilote. Sinon, essayez d'utiliser Courier New, qui est une police à espace fixe. Sinon, la valeur de la largeur du texte ne générera pas correctement la largeur.
Une autre solution consiste à utiliser la fonction de chaîne Len pour compter le nombre de caractères et gérer vous-même la troncature si elle dépasse 89 caractères.,
Quelque chose comme
Do Until LineToPrint = ""
TempD = Len(LineToPrint)
If TempD > 89 Then
Print Mid$(LineToPrint,1, 89)
LineToPrint = Right$(LineToPrint,TempD-89)
Else
Print LineToPrint
LineToPrint = ""
End If
Loop
Si vous aimez les fonctions récursives, vous pouvez l'écrire comme ceci
Private Sub PrintLine(ByVal LineToPrint As String, ByVal Width As Integer)
TempD = Len(LineToPrint)
If TempD > Width Then
Printer.Print Mid$(LineToPrint, 1, Width)
LineToPrint = Right$(LineToPrint, TempD - Width)
PrintLine LineToPrint, Width
Else
Printer.Print LineToPrint
End If
End Sub