Estilos de texto en impresora térmica Bluetooth
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.
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:
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": ""
}
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": ""
}
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.
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.
Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…
Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…
Hoy te enseñaré a extraer la cadena base64 de una clave PEM usando una función…
Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
Esta web usa cookies.