Impresora Térmica Ticket

Hola a todos, 

Contexto
Tengo una app tipo punto de venta y me interesa imprimir tickets con mi impresora térmica (GOOJPRT) , la verdad es que he encontrado poca información al respecto y en español aún menos.

En general la mayoría de los métodos que encontré involucran generar un pdf y a mi eso no me agrada mucho,  sin embargo en este post (CONCATENATE-ON-THERMAL-PRINTING) encontré información que se aprecia, entre esta información @Hocappsheet compartió un link a un video donde explica una forma de realizar este proceso que me pareció una buena alternativa al método del pdf .

Así de fácil es imprimir texto desde una acción de AppSheet!!.

3 Puntos clave de la metodología para imprimir de @Hocappsheet 

1.- Instalar RawBT desde la Play Store, (Me imagino que existen más aplicaciones que permiten la misma funcionalidad, pero sólo he probado esta).

2.-Configurar la aplicación de RawBT para que los parámetros coincidan con los de nuestra Impresora Térmica ó los deseados.

3.-En AppSheet, crear una acción para la tabla que contiene la información que deseamos imprimir. Esta acción será de tipo (External: go to a web site) y (Launch External) debe estar activado, la fórmula será algo parecido a 

HYPERLINK(
CONCATENATE("rawbt:",
ENCODEURL("Cualquier texto")
),
"Imprimir"
)

 

Explicación de la Fórmula
Con esta fórmula le estamos comunicando a RawBT a través del Hyperlink() el texto que deseamos imprimir, pero el texto tiene que ser transformado a un formato URL para que el hyperlink tenga sentido, es por ello que usamos ENCODEURL() para codificar los caracteres especiales y espacios de nuestro texto. 
En este caso el primer valor que estamos concatenando es: "rawbt:" en página de internet de la aplicación (https://rawbt.ru/start.html ) explican el por qué, y qué prefijos usar según lo que estemos tratando de imprimir.

 

Imprimir una Imagen
Esto es importante ya que a todos nos gustaría que apareciera el logo de nuestro negocio en el ticket.
En la página de RawBT explican varias formas de enviar una imagen a  imprimir, por lo que sólo explicaré la que mejor resultado me dió.

1.- Tener la imagen a imprimir 

2.- Convertir la Imagen a Base64, (yo probé convertir mi imagen en https://www.base64-image.de/  y me funcionó) para ello hay que elegir la opción de (Show code)  y luego copiar el campo (For use in <img> elements:). Esa será nuestra imagen en Base64

3.- La fórmula para nuestra acción en appsheet será algo parecido a 

(Ojo cuando publico el post se cambia el formato de la fórmula, dejo una imagen donde la fórmula está bien )

HYPERLINK(
"rawbt:data&colon;image/XXXXXXXXXXXXXXXImagen en Base64XXXXXXXXXXXXXXXXXX",
"Imprimir Imagen"
)

Otra forma sería almacenando "rawbt:data&colon;image/Imagen en Base64" en alguna tabla de nuestra aplicación en AppSheet , Un ejemplo de fórmula quedaría parecida a la siguiente 
____________________________________________________________________________________________

Pongo esta imagen porque noto que se cambia el formato cuando publico el postPongo esta imagen porque noto que se cambia el formato cuando publico el post

HYPERLINK(
INDEX(Tabla[Columna con imagen en Base64],1)
"Imprimir Imagen"
)

 

El punto en el que estoy atascado y agradeceria ayuda 

Imprimir la imagen y el ticket al mismo tiempo.
Puedo imprimir la imagen primero con una acción, y con otra acción imprimir el ticket. Pero cuando trato de unir las 2 acciones con una acción tipo (Grouped: execute a sequence of actions) solo imprime el contenido de la primer acción de la secuencia. 

¿Existe alguna forma de concatenar la imagen con el ticket? (Pensando que una acción es suficiente para imprimir el ticket con imagen).

Tengo la sensación de que en los dos casos la limitante es la app de RawBT por su incapacidad de procesar las 2 órdenes seguidas, pero son sólo mis suposiciones. 

 

Solved Solved
0 17 2,556
1 ACCEPTED SOLUTION


@Kabuliño wrote:

Imprimir la imagen y el ticket al mismo tiempo.
Puedo imprimir la imagen primero con una acción, y con otra acción imprimir el ticket. Pero cuando trato de unir las 2 acciones con una acción tipo (Grouped: execute a sequence of actions) solo imprime el contenido de la primer acción de la secuencia. 

¿Existe alguna forma de concatenar la imagen con el ticket? (Pensando que una acción es suficiente para imprimir el ticket con imagen).

Tengo la sensación de que en los dos casos la limitante es la app de RawBT por su incapacidad de procesar las 2 órdenes seguidas, pero son sólo mis suposiciones. 


Cuando usas una acción que te saca de contexto (como las de External: o del tipo "Go to view...") solo la puedes ejecutar una vez, el resto se pierde. Esto es una limitante de AppSheet.

Lo que puedes hacer es crear un código para que solo con una acción generes el contenido para ser impreso. Imagino que has intentado sin éxito. Nos puedes explicar qué es lo que no te ha funcionado? Deberías poder concatenar la imágen junto con el contenido

View solution in original post

17 REPLIES 17


@Kabuliño wrote:

Imprimir la imagen y el ticket al mismo tiempo.
Puedo imprimir la imagen primero con una acción, y con otra acción imprimir el ticket. Pero cuando trato de unir las 2 acciones con una acción tipo (Grouped: execute a sequence of actions) solo imprime el contenido de la primer acción de la secuencia. 

¿Existe alguna forma de concatenar la imagen con el ticket? (Pensando que una acción es suficiente para imprimir el ticket con imagen).

Tengo la sensación de que en los dos casos la limitante es la app de RawBT por su incapacidad de procesar las 2 órdenes seguidas, pero son sólo mis suposiciones. 


Cuando usas una acción que te saca de contexto (como las de External: o del tipo "Go to view...") solo la puedes ejecutar una vez, el resto se pierde. Esto es una limitante de AppSheet.

Lo que puedes hacer es crear un código para que solo con una acción generes el contenido para ser impreso. Imagino que has intentado sin éxito. Nos puedes explicar qué es lo que no te ha funcionado? Deberías poder concatenar la imágen junto con el contenido

Gracias por tu respuesta @SkrOYC , no sabía que eso pasaba con este tipo de acciones.

En efecto he intentado sin éxito,
Te explico como tengo todo "ordenado"
Para empezar la imagen en base64 es una cadena de texto muy larga y provoca que el editor de fórmulas muestre el siguiente mensaje

Captura de pantalla 2022-10-20 105419.png por lo que decidí mejor almacenarla en una tabla de mi app.

Captura de pantalla 2022-10-20 120428.png

 

Las fórmulas que estoy usando en las acciones por independiente y funcionan bien son:


Fórmula en la acción para imprimir imagen:

HYPERLINK(
INDEX(
RecursosApp[Recurso Imagen],
1),
"Imagen"

Fórmula en la acción para imprimir ticket:

HYPERLINK(
CONCATENATE(
"rawbt: ",
ENCODEURL(
CONCATENATE("
TICKET ","

................................","
",
[Ticket a Imprimir]
,"................................","
",
LEFT("TOTAL"&" ",22),
" ",
RIGHT(" "&TEXT([Total]),9),
,"
",[Forma de Pago]
)
)
),
"Imprimir ticket"
)

 

 

Mis intentos de concatenación fallidos:

1.- Este me manda un mensaje de RawBT que dice (Wrong base64 image)

HYPERLINK(
CONCATENATE(
INDEX(RecursosApp[Recurso Imagen],1),
"rawbt: ",
ENCODEURL(
CONCATENATE("

TICKET ","

................................","
",
[Ticket a Imprimir]
,"................................","
",
LEFT("TOTAL"&" ",22),
" ",
RIGHT(" "&TEXT([Total]),9),
,"
",[Forma de Pago]
)
)
),
"Imprimir ticket"
)

 2.-Este abre una ventana de Chrome vacía 

CONCATENATE(
HYPERLINK(
INDEX(RecursosApp[Recurso Imagen],1),
"Imagen"
),"
",
HYPERLINK(
CONCATENATE(
"rawbt: ",
ENCODEURL(
CONCATENATE("

TICKET ","

................................","
",
[Ticket a Imprimir]
,"................................","
",
LEFT("TOTAL"&" ",22),
" ",
RIGHT(" "&TEXT([Total]),9),
,"
",[Forma de Pago])
)
),
"Imprimir ticket"
)
)

  3.- También abre una ventana de chrome vacía.

HYPERLINK(
CONCATENATE(
INDEX(RecursosApp[Recurso Imagen],1),"
",

"rawbt: ",
ENCODEURL(
CONCATENATE("

TICKET ","

................................","
",
[Ticket a Imprimir]
,"................................","
",
LEFT("TOTAL"&" ",22),
" ",
RIGHT(" "&TEXT([Total]),9),
,"
",[Forma de Pago]
)
)
),
"Imprimir ticket"
)    

 

"rawbt:" debe estar al inicio porque es una URI.

Te recomiendo investigar un poco más antes de continuar

Quick start with RawBT

Lo si lo he intentado, incluso acomodando la imagen después del texto 

HYPERLINK(
CONCATENATE(
"
rawbt:",
ENCODEURL(
CONCATENATE("

TICKET ","

................................","
",
[Ticket a Imprimir]
,"................................","
",
LEFT("TOTAL"&" ",22),
" ",
RIGHT(" "&TEXT([Total]),9)
,"
",[Forma de Pago],"

"

)
),INDEX(RecursosApp[Recurso Imagen],1)
),
"Imprimir ticket"
)

 El resultado es un ticket de un metro de largo xD

WhatsApp Image 2022-10-20 at 1.18.04 PM.jpeg

 

Entonces es la impresora que no permite imprimir imagenes y texto a la vez

No creo, la he usado con otros programas y logra imprimir tickets con imágenes sin problemas.

Pienso que es porque RawBT no es capaz de reconocer que le estoy enviando 2 órdenes en una, identifica solo la primera y asume que la segunda es parte de la primera.

Seguiré investigando, Gracias.

A eso me refiero. Aparentemente no permite imprimir imágenes y texto a la vez. Más bien le mandas dos ordenes por separado y luego cortas el papel, pero siguen siendo dos ordenes, no una sola.

Pequeña actualización

Haciendo pruebas me dí cuenta que no hace falta usar Hyperlink() para poder imprimir texto ó imágenes.
También encontré que es posible imprimir usando la sintaxis de (Intent scheme) que se muestra en https://rawbt.ru/start.html 

Las fórmulas que usé para imprimir con Intent son:

Para Texto:

CONCATENATE(
"intent:",
ENCODEURL(Texto a imprimir),
"#Intent;scheme=rawbt;package=ru.a402d.rawbtprinter;end;"
)

Para Imágen Base64

Concatenate(
"intent:",
"image/png;base64,xxxx....",
"#Intent;scheme=rawbt:data;package=ru.a402d.rawbtprinter;end;"
)

 

Hello 

How could you print image and text? please help me

Basically it just depends on the method you use for term printing outside AppSheet

Hola, hace un tiempo descubrí una forma de insertar un logo a las impresiones usando el protocolo de rawbt, el truco está en configurar la app de rawbt según las fotos que enseño a continuación.

debes entrar en settings y luego en documento ejemplar o Sample document, y ahí aparece la opción de imprimir logo, le das a seleccionar y cargas la imagen
IMG_6467.jpg

IMG_6464.jpgIMG_6465.jpgIMG_6466.jpg

De donde descargaste el rawbt?

Si lo descargas de la playstore te pide la versión premium para poder imprimir el logo, y tiene un costo variable según el tiempo por el que lo contrates. Quizá valga la pena pagarlo pero sólo en casos muy específicos porque en la gran mayoría queda deficiente o sale muy caro.

Imagina que 10 o más cuentas usan tu aplicación y en todas es necesario imprimir el ticket, en cada una de ellas se tendría que agregar la imagen del logo y pagar el mismo número de  licencias premium de rawbt que de cuentas... algo caro

La otra cosa a considerar es que siempre va a ser esa imagen, y tengo algunos casos de uso en los que necesito imprimir imágenes y texto según cada registro en mi app 
   
De cualquier forma estoy seguro que habrá miembros de la comunidad que resuelvan su caso de uso con tu aportación, por cierto se ve bastante bien tu ticket 

si pagué algo asi com US$30 por la licencia lifetime, 

Ahora los que busco es usando este protocolo, es cambiar el tamaño de la letra.

he solucionado muchos problemas de estilo usando un template html en vez del típico PDF, pero como las sincronizaciones no son instantáneas me ha generado que no se imprimen todos los productos, por eso estoy con rawbt directo, pero te adjunto imágenes de como se ve usando html como método


lCaptura de pantalla 2023-11-12 a la(s) 12.32.08.pngIMG_6468.jpgIMG_6469.jpg

greats

 

Hola que tal marcos, cres que puedas hacer un post explicando como implentas la platilla en HTML?

Dear @Marcos_Castro_A , how did you achieve that from AppSheet? Would you like to let us know?

Top Labels in this Space