Edición e impresión de texto

Te rogaría que me ayudses con lo siguiente. Necesito imprimir en una impresora usb tipo tickets un texto tipo memo (como por ejemplo una receta) que se me ajuste al tamaño del papel (unos 7 u 8 cm), por lo que salvo que exista alguna forma de mandar a imprimir a un ancho concreto y con la justificación que de el textbox, tendría que editar el campo ya almacenado, dejando solo lineas como máximo de unos 50 caracteres, metiendo retornos de carro, pero manteniendo una estructura lógica del texto (supongo que esto ultimo a un textstream)
Bueno.

2 Respuestas

Respuesta
1
cuando se me complica mucho la impresión de algo o tengo que hacer un pre-impreso,
uso printer
con el objeto printer podes configurar lo que queres y vos le das coordenadas como
printer.currentY = 2  donde Y es el largo
printer.currentx=2 donde X es el ancho
para seguir con esta tecnica necesito que hagas esta prueba haber si te parece bien
en un form cualquiera
ahi pone
printer.currentY = 2  donde Y es el largo
printer.currentx=2 donde X es el ancho
printer.print "Se empezo a escribir aqui"
printer.currentY = 2.5 
printer.currentx=2
printer.print "Baje una linea"
como se imprimiria un numero comun y un numero acomodado a la derecha
printer.currentY = 3.5 
printer.currentx=2
printer.print "120,00"
printer.currentY =  4
printer.currentx=2-printer.textwidht("120,00")
Printer. Print "120,00"
Printer. Enddoc 'esta linea es para mandar a imprimir
Fíjate si esto te sirve y después seguimos
saludos
Lea
-Buenas tardes Emperador, he estado probando pero no me va. La idea seria o bien imprimir tal cual se ve en el textbox (independientemente del ancho de la linea) o bien modificar a saco. Mi problema es que si el campo contiene este texto:
Tipo de vino
Vino de licor trasañejo.
Elaboración
Despalillado, molturación, prensado en neumática, fermentación controlada hasta agotar azúcares ...

La impresión debe quedar así, que es el máximo que admite la impresora
Tipo de vino
Vino de licor trasañejo.
Elaboración
Despalillado, molturación, prensado en neumática, fermentación
Controlada hasta agotar azúcares ...

No se si seria mejor pasar el campo a un txt y modificarlo como textstream.
Gracias nuevamente.
Para eso yo utilizo una función que me baje de internet que me imprime según el ancho que le digo yo, te lo paso para ver si te funciona
acá lo llamo
Call Print_String(Rs1!notaarriba, 2.2, 1, 150)
todo esto en un modulo
Sub Print_String(s$, Posy As Variant, Posx As Variant, cant As Integer)
  Dim pos%, test$
  If Len(s$) <= cant Then
    Printer.CurrentY = Posy
    Printer.CurrentX = Posx
    Printer.Print s$
  Else
    Posy = Posy - 0.5
    While Len(s$) > cant
      test$ = Trim$(Left$(s$, cant))
      pos% = Strchr%(test$, " ")
      If pos% > 0 Then
        Posy = Posy + 0.5
        Printer.CurrentY = Posy
        Printer.CurrentX = Posx
        Printer.Print Left$(test$, Len(test$) - pos%)
        s$ = Mid$(s$, Len(test$) - pos% + 1)
      Else
        Posy = Posy + 0.5
        Printer.CurrentY = Posy
        Printer.CurrentX = Posx
        Printer.Print Mid$(test$, 1, cant)
        s$ = Mid$(s$, cant)
      End If
    Wend
    If Len(s$) > 0 Then
      Printer.CurrentY = Posy + 1
      Printer.CurrentX = Posx
      Printer.Print s$
    End If
  End If
End Sub
Function Strchr%(ByVal target$, ByVal test$)
'I made this function to behave exactly like the C function
'of the same na  It searches for a charcter in a string
'starting FROM the end.  It returns -1 if unsuccessful.
  Dim char$, pos%, I%
  pos% = -1
  If Len(test$) > 1 Then
    Beep
    test$ = Left$(test$, 1)
  End If
  For I% = 0 To Len(target$) - 1
    char$ = Right$(target$, 1)
    If char$ = test$ Then
      pos% = I%
      Exit For
    Else
      target$ = Left$(target$, Len(target$) - 1)
    End If
  Next I%
  Strchr% = pos%
End Function
Cópialo tal cual esta y fíjate si te sirve, lo único que tendrías que cambiar
es la cantidad de letras que se tiene que imprimir en una linea.
Bueno, es otra prueba no descartes también tu opción la del textstream, porque te puede funcionar
saludos
lea
Hola Emperador, gracias por la función. En principio parece que funciona, eso si, le tengo que quitar todas las referencias a CurrentX o CurrentY, sino me imprime en la misma linea no se porué. Aún así, me vale de momento (el tiempo apremia), aunque posiblemente la intente optimizar leyendo carácter a carácter, por si quiero ir controlando algo más. Muchas gracias por todo., cunado lo vaya afinando te lo paso a ver que te arece.
Un saludo
Nono lo que pasa es que posY y posX en los currents son variables
de la funciones que yo les paso
entonces de esa manera lo podes hacer más dinámico para que funcione.
Bueno, si podes cerrar la pregunta te lo agradezco
saludos
lea
Respuesta
1
No entiendo... hablas de 7 u 8 centímetros, después de 50 acracteres.?
Pero... lo primero es imprimir una linea o varias para saber realmente cuantos caracteres te caben en ese tamaño de papel, los cuentas a mano y sabes cual es el máximo de caracteres que puedes imprimir en una linea para ese tipo de papel, luego en tu programa de impresión partes el campo a imprimir en partes que puedan ser impresas de acuerdo al numero de caracteres que ya definiste.
Que tal, gracias por tu respuesta. Lo de 50 - 60 caracteres es lo que caben precisamente en los 7-8 cm del tamaño ticket. Lo que pasa es que quiero mantener el formato del texto, solo que las lineas que sobrepasen de ese tamaño, pasarlas a la siguiente. Había pensado enpasar elcampo a un fichero temporal de texto y trabajar con ellos de forma más fácil, ya que hay funciones más directas para la edición.
Un saludo
Simplemente utiliza el Mid que toma un umero especifico de caracteres de una cadena, con eso puedes partir de acuerdo a lo que ue necesitas tu texto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas