Linien getrimmt, wenn Printer.Print auf einen „Generic Text Only“ Drucker
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.
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