Frage

Ich bin Wartung eine alte VB6-Anwendung, die ZPL-II drucken.

ich herausfinden, nur, dass es einen Fehler hat, wenn ich lange Schlangen an den Drucker durch „ Printer.Print “ drucke, werden die Linien nur an den ersten 89 Byte / Zeile getrimmt werden. Es funktioniert perfekt und Linien halten, wie es ist, wenn ich Drucken oder Kopieren in DOS LPT.

Woher kommt dieses Verhalten her? Wie kann ich es oder Abhilfe zu beheben? Ich möchte alle Drucker mit LPT, USB und Netzwerkdruckern unterstützen.

PS. Ich doppelt überprüfen Sie die tatsächlichen Bytes in eine Datei an den Drucker von Druck gesendet, nicht LPT.

War es hilfreich?

Lösung 2

Ich war Arbeit um zu NICHT Printer.Print zu verwenden. Aber Filesystem mit Textdatei auf einen UNC-Pfad eines Netzwerkdruckers zu drucken.

Es funktioniert wie eine Creme, aber der Drucker zugeordnet werden muss. Auch ein lokaler Drucker.

Andere Tipps

Sie müssen die Printer.TextWidth Funktion nutzen und vergleichen Sie es mit der Printer.ScaleWidth Eigenschaft, um dieses Problem in Visual Basic zu behandeln 6. Es ist nicht die automatischen Zeilenumbruch wie die DOS-Funktion für Dich tut.

Sie werden sicherstellen, dass die Schriftart, die der Drucker auch korrekt die Schriftart des Druckers übereinstimmen eingestellt ist. Dies kann erfordern, einer der „Drucker“ Schriftarten verwenden die Fahrer kommt mit. Ansonsten versucht Courier New zu verwenden, die ein fester Platz Schriftart ist. Andernfalls wird der Text Breite Wert ist nicht richtig, die Breite gehen zu melden.

Eine Alternative ist die Len String-Funktion zu verwenden, um die Anzahl der Zeichen zu zählen und das Abschneiden selbst zu behandeln, wenn es 89 Zeichen überschreitet.

So etwas wie

  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   

Wenn Sie rekursive Funktionen wie Sie es so schreiben könnte

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top