En este post voy a explicarte cómo puedes crear un conector para el plugin de impresoras térmicas y así poder imprimir desde cualquier lenguaje de programación que hable HTTP.
Como bien sabes, mi plugin no es más que un servidor web que te permite imprimir en impresoras POS, solo debes indicarle las operaciones que debe hacer.
Veamos entonces cómo imprimir en una impresora térmica usando cualquier lenguaje de programación y mi plugin gratuito.
Documentación de la API del servidor
El servidor expone 3 rutas. Pero qué mejor que el código las explique por sí mismo:
La primer ruta es para reenviar la información y que el plugin funcione como proxy como ya lo expliqué en otro post.
Por otro lado si quieres imprimir debes invocar a la ruta /imprimir
con el método post enviando un struct así:
Por cierto, la OperacionEscpos
se define así:
Nota: en este caso el nombre de operación debe ser una definida en la documentación.
Como puedes ver, los argumentos son un arreglo de cualquier longitud y cualquier tipo.
Finalmente si invocas a GET /impresoras
obtendrás las impresoras compartidas disponibles para el plugin (recuerda que no todas son térmicas).
El servidor te devolverá un arreglo de tipo string, en donde cada elemento es el nombre de una impresora.
Creando conector para cualquier lenguaje
Entonces lo que necesitas en tu lenguaje de programación es:
- Un cliente HTTP que permita hacer peticiones GET y POST
- Poder codificar y decodificar JSON
Eso es todo lo que necesitas.
Para el cliente HTTP en Java por ejemplo tenemos a HttpClient, en JavaScript a fetch, para Python existe requests, en Golang contamos con http.Client y en todos los lenguajes debe haber un equivalente.
Ejemplo: imprimir en impresora térmica con HTTP y JSON
Veamos un ejemplo del JSON que debemos enviar para iniciar, cambiar la alineación, escribir texto, un código de barras y recorrer el papel:
Recuerda que será un objeto con las propiedades operaciones
, nombreImpresora
y serial
.
Las operaciones serán un arreglo de objetos que deben tener dos propiedades: nombre
y argumentos
. nombre
es de tipo string y argumentos
es un arreglo que puede tener 0 o infinitos argumentos.
Los nombres de las operaciones los he tomado de la documentación al igual que el número de argumentos. Las operaciones que no toman argumentos reciben un arreglo vacío, pero incluso así debes especificarlo.
Al enviar ese JSON con Postman aparecerá el ticket que viste arriba:
Fíjate en el cuerpo que estoy enviando (aunque Postman lo hace bonito, recuerda que tú debes enviarlo como un JSON normal sin justificar o alinear) y la respuesta del servidor que es un true
en caso de que todo vaya bien.
Si cometes un error, la impresora no existe, la operación no existe o cosas similares se te va a devolver una cadena JSON con el mensaje de error. Por ejemplo:
Por cierto, Postman te permite generar el código para varios lenguajes. Por ejemplo en C# con RestSharp (no lo he probado, solo he copiado el código):
Lo que yo recomiendo es que hagas una clase o librería y por cada invocación a una función agregues un argumento a la lista de operaciones. Por ejemplo en Python:
Si te fijas en el init
inicializo una lista vacía.
Luego defino la función agregar_operacion
en donde agrego el nombre y los argumentos a la lista y finalmente hasta abajo tenemos una función llamada CargarImagenLocalEImprimir
que recibe los argumentos y los agrega a la lista.
Luego para enviarlos simplemente codifico esa lista como JSON y la envío con requests
:
Al final tú decides cómo formas el JSON, puedes incluso hacerlo concatenando cadenas.
Te recomiendo ver el código fuente del conector JavaScript, Python y Java para que veas cómo lo hago yo y puedas tomar ideas.
Vídeo de apoyo
Si quieres puedes ver la explicación en vídeo para complementar lo expuesto por escrito:
2 Comentarios
Hernan Serrano Morales · enero 1, 2023 a las 7:48 pm
Buenas. Necesito que que indiques cuanto vale el plug in con los fuentes.
Soy de Costa Rica. Y estoy desarrollando un software de comandas.
parzibyte · enero 2, 2023 a las 8:13 pm
Hola. Por el momento el código de la versión 3 no está disponible, pero puede obtener una licencia para usar el programa compilado o descargar el código fuente de la versión 1 (https://parzibyte.me/blog/2022/10/04/codigo-fuente-plugin-impresora-termica-v1/) o versión 2 (https://parzibyte.me/blog/2022/10/05/codigo-fuente-plugin-impresoras-termicas-v2/)
Saludos!