Las líneas se recortan cuando Impresora. Imprime en una impresora de "Sólo texto genérico"
Pregunta
Estoy manteniendo una aplicación vb6 antigua que imprime ZPL-II.
Acabo de descubrir que tiene un error si imprimo líneas largas en la impresora al " Printer.Print " ;, las líneas se recortarán a los primeros 89 bytes / línea solamente. Funciona a la perfección y mantiene las líneas tal como está cuando uso Imprimir o Copiar en DOS a LPT.
¿De dónde viene este comportamiento? ¿Cómo puedo solucionarlo o solucionarlo? Me gustaría admitir todas las impresoras, incluidas las impresoras LPT, USB y de red.
PS. Reviso dos veces los bytes reales enviados a la impresora imprimiéndolos en un archivo, no en LPT.
Solución 2
Estaba trabajando alrededor para NO usar Printer.Print. Pero utilizando FileSystemObject para imprimir un archivo de texto a una ruta UNC de una impresora de red.
Funciona como una crema, pero la impresora debe estar asignada. Incluso una impresora local.
Otros consejos
Necesitas usar la función Printer.TextWidth y compararla con la propiedad Printer.ScaleWidth para manejar este problema en Visual Basic 6. No hace un ajuste de línea automático para ti, como la función DOS.
Se asegurará de que la fuente con la que la impresora está configurada coincida correctamente con la fuente de la impresora. Esto puede requerir usar una de las " impresora " fuentes que el controlador viene con. De lo contrario, intente utilizar Courier New, que es una fuente de espacio fijo. De lo contrario, el valor de Ancho del texto no informará correctamente el ancho.
Una alternativa es usar la función de cadena de Len para contar el número de caracteres y manejar el truncamiento si supera los 89 caracteres.
Algo parecido a algo como
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 te gustan las funciones recursivas, puedes escribirlas de esta manera
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