python

Python – Imprimir en impresora térmica

Hoy te mostraré cómo imprimir recibos, tickets, facturas, etcétera en una impresora térmica (también conocidas como Thermal printers, Impresoras POS) usando el lenguaje de programación Python.

Ticket impreso en impresora térmica con Python

De este modo podrás imprimir en impresoras térmicas desde Python usando una clase y un conector desarrollados por mí. Verás que será realmente sencillo. Gracias a esto podrás imprimir y hacer operaciones como:

  • Texto normal y texto con acentos (incluyendo las letras ñ de nuestro amado español)
  • Imágenes a partir de una URL o imágenes locales presentes en la computadora del usuario. Así que puedes imprimir tu logotipo
  • Códigos QR
  • Códigos de barras
  • Abrir el cajón de dinero
  • Ajustar el tamaño de la fuente, alineación, saltos de línea
  • Impresión de HTML y páginas web

Básicamente podrás imprimir todo tipo de contenido en una impresora térmica desde Python.

Creando lista de operaciones ESC POS

Lo primero que debes hacer es definir la lista de operaciones que se van a hacer en la impresora térmica. Estas operaciones serán convertidas a comandos ESC POS. La lista de operaciones es un simple arreglo de Python:

operaciones = [
    {
        "nombre": "Iniciar",
        "argumentos": [],
    },
    {
        "nombre": "EscribirTexto",
        "argumentos": ["Hola\nImpresora desde Python\n"],
    },
    {
        "nombre": "DescargarImagenDeInternetEImprimir",
        "argumentos": ["https://github.com/parzibyte.png", 380, 0, True],
    },
]

Cada elemento de la lista es un diccionario que tiene la propiedad nombre de tipo cadena, indicando el nombre de la operación, así como una propiedad llamada argumentos que es un arreglo de cualquier tipo que contiene los argumentos de dicha operación.

Por ejemplo, la función para imprimir texto se llama EscribirTexto y solo toma un argumento de tipo string que es el texto que será impreso en la impresora térmica:

{ "nombre": "EscribirTexto", "argumentos": ["Hola\nImpresora desde Python\n"], }

Vas a encontrar la lista de operaciones disponibles en la documentación oficial, así como su nombre, descripción, argumentos y ejemplos. Te recuerdo que, al ser una simple lista de Python, puedes crearla como tú prefieras y agregarle elementos usando append o definiendo la lista desde un inicio.

Cuando hayas creado la lista de operaciones puedes enviarla a la API HTTP local que convierte JSON a ESC POS. Primero arma la carga útil que contiene la lista de operaciones y el nombre de la impresora:

nombre_impresora = "Termica"
serial = ""
carga_util = {
    "operaciones": operaciones,
    "nombreImpresora": nombre_impresora,
    "serial": serial,
}

Finalmente hay que enviar ese diccionario codificado como JSON a la API en el endpoint /imprimir. Para hacer la petición HTTP podemos usar el paquete requests (pip install requests):

respuesta_http = requests.post("http://localhost:8000/imprimir", json=carga_util)
respuesta = respuesta_http.json()
if respuesta["ok"]:
    print("Impresión exitosa")
else:
    print("Error: " + respuesta["message"])

La API va a devolver un diccionario con la propiedad ok y message. Si la impresión ESC POS fue correcta, ok estará en True. En caso contrario, el mensaje de error estará en message.

El código completo queda como se ve a continuación:

import requests

"""
Esta lista de operaciones puede ser infinita.
Puedes definirla así, o invocar a append cuantas
veces sea necesario
Lista de operaciones disponibles: https://parzibyte.me/http-esc-pos-desktop-docs/es/
"""
operaciones = [
    {
        "nombre": "Iniciar",
        "argumentos": [],
    },
    {
        "nombre": "EscribirTexto",
        "argumentos": ["Hola\nImpresora desde Python\n"],
    },
    {
        "nombre": "DescargarImagenDeInternetEImprimir",
        "argumentos": ["https://github.com/parzibyte.png", 380, 0, True],
    },
]

nombre_impresora = "Termica"
serial = ""
carga_util = {
    "operaciones": operaciones,
    "nombreImpresora": nombre_impresora,
    "serial": serial,
}


respuesta_http = requests.post("http://localhost:8000/imprimir", json=carga_util)
respuesta = respuesta_http.json()
if respuesta["ok"]:
    print("Impresión exitosa")
else:
    print("Error: " + respuesta["message"])

Te lo repito: la lista de operaciones puede ser infinita y creada como tú prefieras; ya sea usando un ciclo, leyendo un archivo de texto, solicitando datos al usuario, etcétera.

Ticket impreso con Python en impresora térmica usando Plugin v3

Leyendo la API puedes imprimir un ticket parecido al siguiente con Python convirtiendo la lista a bytes ESC POS para POS printers:

Configurar impresora y descargar servidor HTTP a ESC POS

Para que el código funcione necesitas el servidor local de la API ESC POS ejecutándose y que tu impresora esté compartida. Por favor, sigue los pasos que aparecen en la página previamente enlazada, ya que ahí está la API unificada.

La documentación completa está en: https://parzibyte.me/http-esc-pos-desktop-docs/es/

Poniendo todo junto

Con el ejemplo tienes todo lo necesario, puedes armar la lista de operaciones con todo lo que necesites. Incluso puede llevar una única operación por si quisieras abrir el cajón de dinero sin imprimir.

Por aquí te dejo más artículos sobre Python.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

5 días hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.