Esta semana estuve recreando la API del plugin para impresoras térmicas en Android (HTTP a ESC POS Bluetooth) y escribí algunos archivos para probar la API, así que hoy vengo a compartirlos.

He usado cURL. La IP de mi dispositivo Android donde se ejecuta la aplicación es http://192.168.0.6 y el puerto es el 8000. Para imprimir hay que hacer la petición a /imprimir.

Puedes descargar el plugin en: API HTTP a ESC POS Bluetooth para Android

Recuerda que debes enviar la dirección MAC en el parámetro impresora dentro del JSON. Todos los comandos tienen la siguiente sintaxis:

curl -X POST -H "Content-Type: application/json" -d @archivo.json dirección

Por ejemplo:

curl -X POST -H "Content-Type: application/json" -d @qr.json http://192.168.0.6:8080/imprimir

Dicen que a partir de la versión 7.82.0 se puede usar --json así:

curl --json @archivo.json dirección

Por ejemplo:

curl --json @qr.json http://192.168.0.6:8080/imprimir

Yo he probado con ambas opciones y funciona. Dicho esto, comencemos con las pruebas.

Imprimir códigos de barras

Comencemos con la impresión de códigos de barras en la impresora térmica. Tengo este archivo que muestra el tipo de código de barras arriba del código mismo.

Los formatos de códigos de barras soportados son:

  1. qr
  2. code39
  3. code93
  4. code128
  5. pdf417
  6. upca
  7. upce
  8. ean
  9. ean8
  10. itf
  11. codabar

Podemos probarlos con el siguiente archivo:

{
    "operaciones": [
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Code39:\n"
            ]
        },
        {
            "nombre": "ImprimirCodigoDeBarras",
            "argumentos": [
                "code39",
                "D387266D",
                0,
                200,
                80
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "code93:\n"
            ]
        },
        {
            "nombre": "ImprimirCodigoDeBarras",
            "argumentos": [
                "code93",
                "D387266D",
                0,
                200,
                80
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "code128:\n"
            ]
        },
        {
            "nombre": "ImprimirCodigoDeBarras",
            "argumentos": [
                "code128",
                "D387266D",
                0,
                200,
                80
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "upca:\n"
            ]
        },
        {
            "nombre": "ImprimirCodigoDeBarras",
            "argumentos": [
                "upca",
                "012345678905",
                0,
                200,
                80
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "upce\n"
            ]
        },
        {
            "nombre": "ImprimirCodigoDeBarras",
            "argumentos": [
                "upce",
                "02345673",
                0,
                200,
                80
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "ean\n"
            ]
        },
        {
            "nombre": "ImprimirCodigoDeBarras",
            "argumentos": [
                "ean",
                "5012345678900",
                0,
                200,
                80
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "upca:\n"
            ]
        },
        {
            "nombre": "ImprimirCodigoDeBarras",
            "argumentos": [
                "upca",
                "012345678905",
                0,
                200,
                80
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "ean8:\n"
            ]
        },
        {
            "nombre": "ImprimirCodigoDeBarras",
            "argumentos": [
                "ean8",
                "50123452",
                0,
                200,
                80
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "itf\n"
            ]
        },
        {
            "nombre": "ImprimirCodigoDeBarras",
            "argumentos": [
                "itf",
                "50123452",
                0,
                200,
                80
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "codabar\n"
            ]
        },
        {
            "nombre": "ImprimirCodigoDeBarras",
            "argumentos": [
                "codabar",
                "D387266D",
                0,
                200,
                80
            ]
        }
    ],
    "impresora": "Tu impresora",
    "serial": ""
}

Código QR

Para el código QR uso este archivo:

{
    "operaciones": [
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "QR:\n"
            ]
        },
        {
            "nombre": "ImprimirCodigoDeBarras",
            "argumentos": [
                "qr",
                "Parzibyte",
                0,
                200,
                200
            ]
        }
    ],
    "impresora": "Tu impresora",
    "serial": ""
}

Imágenes

El plugin soporta la impresión de imágenes. La API HTTP a ESC POS Bluetooth permite imprimir una imagen del almacenamiento local, una codificada como base64 o una de internet.

Podemos probar las 3 así:

{
    "operaciones": [
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Imagen de internet:\n"
            ]
        },
        {
            "nombre": "DescargarImagenDeInternetEImprimir",
            "argumentos": [
                "https://parzibyte.me/static/mariposas_cempoalxochitl_dithering.png",
                0,
                320
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Imagen local:\n"
            ]
        },
        {
            "nombre": "CargarImagenLocalEImprimir",
            "argumentos": [
                "/storage/emulated/0/Pictures/Telegram/i.jpg",
                0,
                200
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Imagen base64:\n"
            ]
        },
        {
            "nombre": "ImprimirImagenEnBase64",
            "argumentos": [
                "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAAXNSR0IArs4c6QAAA1ZJREFUeF7tm1ty4zAMBOX7Hzr5cJVLkUWiBwAVPyafKYiP5gwAMru3zT8lArfS1/542wP8WcBjdECjuUi8GrN0XwaYU82DmwEuAljJjXvLkAMiMWSbqrXJmPuY032NFm+Az3gNcNv+FM3LFEiqmKpktQqPrLT/vWrhln2RjbdMdDhuAzwAIQdRUVHlW7WojVSdzoGrFUgKFoHwtRY2wEN1G6kl7KkmZdEKnBQR0kgTe0q5a9u2ltREkn/LRAY4bzvJQRALq+0NiSf2H+0u3FcYoLbrB2sQeyameHxC1k9yMllDuo0hg1fUpY5fyXWk4o/WY4BX3oUrquhSCMldqoXb9/XKOcoAYYO9AtRlwqgkVdUOK1oOYmF1nVK8AUq4noMN8B8BkiueWpEr736kfxuth3x7KraKAg2wsbEkRlATPik6ZN7KOOE1kGyKtBmqNcjG07aavPyQRwNyLW25jFdO1gAnD5KVvErAhrZ6NQWSTRHZq0VHnXfFq3W4BpIDw0EmJ776SkVyL0k1qqqlHGiAEwJEISSGNMxdMcQ1JF0Qy4f5nMAhMV1wyDgGOHnm+hiARN4kN4YWSLRDJOGT5p84K1R7GJDoqUhlHLU95FsDhIdCXKDGEGVKaYQokJw4ubeqlif9m9rAt++3fUCoLnKpN0D4D3iIZSq5kdiWCOn00CtVUrUkKRwVmKpiif3DPRrgHVE6zxvgxQAJ8FD2k4DKHZbMS5QmpQIChExKFk9iDJBQ+lQFEukShagM0y1Eok1S+89wbZULtQqqsvium05lDaepzADvSEOljVodUkS6lEZSBGm21UMn6iVjnjb5BjhXYGh5A2wE+AoVtmsN6ZymXutU76v5kGyE5L0V86qvNKdrMEBehSWAldyoniyJP62AiT9IjdSuOuUxTvpDeB0j4xvgASYBooJ9awWSylgBEvZasDKSdXbNJVmYLMwAi/9N1QAvAKjeSbsqZteDsPQao/aHRIEGOGldDPBiC1/Z6lRSQWh/opyuKrxiI5U3RnXvp7czdZCuPuqrFKi+hISyT6SL0d2cKJDEkBehtAIN8PnFRrqJGGACoAqN5EYyJrF/2m6J1BHuS22YCYTRywn51gAPlNSH2bcGSBTimKJCDNAAezXwC2+V72CevNa6AAAAAElFTkSuQmCC",
                0,
                80
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "Feed",
            "argumentos": [
                2
            ]
        }
    ],
    "impresora": "MAC de tu impresora",
    "serial": ""
}

Si pruebas este archivo asegúrate de revisar la ubicación de la imagen que se imprime. En mi caso es /storage/emulated/0/Pictures/Telegram/i.jpg pero en el tuyo debes ajustar lo necesario.

Texto

Las impresoras térmicas Bluetooth permiten imprimir texto en varios formatos. Puedes subrayarlo, enfatizarlo, girarlo 90 grados, cambiar la alineación y el tamaño de la fuente.

El siguiente archivo se encarga de hacer todas esas pruebas. Fíjate en que estoy invocando a Iniciar antes de cambiar cada estilo, ya que al invocar a esa operación se reinician todos los parámetros de estilo previamente aplicados.

{
    "operaciones": [
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerAlineacion",
            "argumentos": [
                0
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Alineando 0\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerAlineacion",
            "argumentos": [
                1
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Alineando 1\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerAlineacion",
            "argumentos": [
                2
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Alineando 2\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerEnfatizado",
            "argumentos": [
                true
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Enfatizado\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerEnfatizado",
            "argumentos": [
                false
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "NO Enfatizado\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerImpresionBlancoYNegroInversa",
            "argumentos": [
                false
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "NO inversa\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerImpresionBlancoYNegroInversa",
            "argumentos": [
                true
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Inversa\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerModoDeImpresionAlReves",
            "argumentos": [
                true
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Impresion al reves\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerModoDeImpresionAlReves",
            "argumentos": [
                false
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Impresion NO al reves\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerRotacionDe90Grados",
            "argumentos": [
                false
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Impresion NO 90 grados\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerRotacionDe90Grados",
            "argumentos": [
                true
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Impresion 90 grados\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerSubrayado",
            "argumentos": [
                true
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Subrayado\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerSubrayado",
            "argumentos": [
                false
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "NO Subrayado\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerTamañoFuente",
            "argumentos": [
                1,
                1
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Fuente 1,1\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerTamañoFuente",
            "argumentos": [
                2,
                2
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Fuente 2,2\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerTamañoFuente",
            "argumentos": [
                6,
                6
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Fuente 6,6\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerTamañoFuente",
            "argumentos": [
                3,
                8
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Fuente 3,8\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerTamañoFuente",
            "argumentos": [
                8,
                3
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Fuente 8,3\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "EstablecerTamañoFuente",
            "argumentos": [
                8,
                8
            ]
        },
        {
            "nombre": "EscribirTexto",
            "argumentos": [
                "Fuente 8,8\n"
            ]
        },
        {
            "nombre": "Iniciar",
            "argumentos": []
        },
        {
            "nombre": "Feed",
            "argumentos": [
                2
            ]
        }
    ],
    "impresora": "",
    "serial": ""
}

La salida es:

Estilos de texto en impresora térmica Bluetooth

Tú mismo puedes crear archivos de prueba para consumir la API de impresoras térmicas Bluetooth, estos son solo algunos ejemplos.

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/

Entradas recientes

Copiar bytes de Golang a JavaScript con WebAssembly

Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…

4 semanas hace

Imprimir PDF con Ghostscript en Windows de manera programada

Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…

4 semanas hace

Limpiar clave PEM

Hoy te enseñaré a extraer la cadena base64 de una clave PEM usando una función…

1 mes hace

Foco con Telegram, apagador de 3 vías, relevador y ESP8266

Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…

1 mes hace

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

2 meses hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

2 meses hace