Las líneas se recortan cuando Impresora. Imprime en una impresora de "Sólo texto genérico"

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

  •  03-07-2019
  •  | 
  •  

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.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top