Podemos imprimir en una impresora térmica desde PHP con comandos ESC POS usando, por ejemplo, la librería de mike42. Funciona bien si todo es en servidor local (ya que la computadora es a su vez cliente y servidor), pero el problema aparece cuando el proyecto se sube a internet y es necesario imprimir desde un servidor web.
Debemos recordar que PHP se ejecuta del lado del servidor, por lo que siempre tratará de imprimir en una impresora térmica conectada físicamente al servidor, así que no podemos imprimir en el lado del cliente.
Lo que nos queda es conectar la impresora al servidor de internet (es decir, viajar a donde sea que esté ubicado el servidor cada vez que se imprima) o buscar alternativas que te mostraré en este post.
Así que veamos cómo imprimir en una impresora térmica desde PHP pero cuando subimos el proyecto a internet.
Generando un PDF
La primera alternativa es generar un PDF con algo como Dompdf y enviar la salida al navegador para que el usuario imprima en cualquier impresora.
De este modo podemos soportar varios modelos de impresoras y también podemos diseñar tickets complejos. La desventaja sería que, como no estamos enviando comandos ESC POS no podemos controlar el corte de papel, avance de papel, apertura de cajón o cosas similares.
Ticket HTML
Por otro lado podemos diseñar un ticket con HTML y CSS (pre procesando lo necesario con PHP) y después invocar a window.print
con JavaScript para mostrar el cuadro de diálogo del sistema que imprime.
Esto nos ahorra el uso de librerías y permite que generemos un ticket solo con CSS, HTML y JS. La desventaja es la misma que la presentada anteriormente.
Crear servidor web local
Otra alternativa es instalar un servidor web en la computadora del cliente. Puede ser con PHP o cualquier otro lenguaje que sea capaz de comunicarse con las impresora y que además sea capaz de recibir órdenes a través de HTTP.
De este modo podemos invocar a este servidor web desde JavaScript. De nuevo, no estaríamos usando PHP, pero podemos pre-procesar el código para invocarlo.
Usando plugin
En el pasado yo me enfrenté a este problema sobre cómo imprimir en PHP desde internet y no encontré alguna solución que me gustara, así que desarrollé un plugin.
Con este plugin el usuario simplemente tiene que descargarse un .exe (o el equivalente en su sistema operativo) y todo funcionará perfectamente.
Aquí te dejo un enlace de cómo usarlo con PHP. Yo recomiendo usar ese método porque es el más simple para el usuario y permite diseñar todo tipo de tickets: