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
Plugin gratuito para impresoras térmicas Bluetooth en 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:
- qr
- code39
- code93
- code128
- pdf417
- upca
- upce
- ean
- ean8
- itf
- 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:

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