Les lignes sont coupées lorsque Printer.Print est une imprimante «Texte générique seulement»

StackOverflow https://stackoverflow.com/questions/402062

  •  03-07-2019
  •  | 
  •  

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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top