Hace algún tiempo te mostré cómo imprimir tickets en impresora térmica con PHP puro usando la maravillosa librería de Mike42, ahora te mostraré cómo hacerlo e integrarlo dentro del framework Laravel.
Al final vamos a imprimir un ticket usando Laravel, desde una ruta que va a invocar a un controlador.
Instalación de la librería
Debido a que Laravel utiliza composer para gestionar sus dependencias no hay problema en instalar la librería de esc pos usando este método. Para ello en tu proyecto abre una terminal y ejecuta:
composer require mike42/escpos-php
Espera a que se instale. Si pide extensiones habilítalas. Se debe ver así:
Inclusión de la librería
Puedes invocar a los métodos desde donde tú quieras, para hacerlo simplemente indica que usarás el espacio del nombre de la librería. Lo bueno es que el autoload ya está incluido.
En este caso usaré WindowsPrintConnector
porque estoy en Windows, y Printer
es obligatorio para la impresora.
<?php
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
use Mike42\Escpos\Printer;
Imprimir primer ticket con Laravel
Ahora, desde cualquier método, ruta, controlador, etcétera podemos imprimir el ticket. Yo lo haré dentro de un controlador y queda así:
<?php
$nombreImpresora = "POS-58";
$connector = new WindowsPrintConnector($nombreImpresora);
$impresora = new Printer($connector);
$impresora->setJustification(Printer::JUSTIFY_CENTER);
$impresora->setTextSize(2, 2);
$impresora->text("Imprimiendo\n");
$impresora->text("ticket\n");
$impresora->text("desde\n");
$impresora->text("Laravel\n");
$impresora->setTextSize(1, 1);
$impresora->text("https://parzibyte.me");
$impresora->feed(5);
$impresora->close();
Recuerda que aplican las mismas reglas que cuando lo hicimos con PHP puro; es decir, si no tienes los controladores debes instalar la impresora como genérica y compartirla. El paso de compartirla es muy importante.
Al invocar a ese método desde una ruta, el resultado es:
A partir de este ejemplo puedes imprimir tickets más complejos, tickets de venta, imágenes, etcétera.Yo ando haciendo este tutorial porque estoy trabajando en un punto de venta open source de Laravel que publicaré muy pronto.
Te invito a mirar más tutoriales de Laravel en mi blog.
Hola, esto funciona si requiero instalar un servidor local, es decir tengo una red local con 3 computadoras, en una computadora estará configurado el servidor local e instalada la impresora, puedo mandar a imprimir desde otra computadora? todo lo haré desde un navegador web
Hola. Le invito a probar y comentar sus resultados. Saludos!
Siempre me doy una vuelta por tu web , tu contenido es muy bueno y ayudas siempre a nosotros que estamos empezando en lo que refiere a sistemas web,
Agradezco Tus aportes, y recomiendo tu web cada ves que algún colega me pregunta por ayudas, Muy buenos tus aportes y quizá cuando aprendamos a volar en este maravilloso mundo recibas la mejor recompensa UN GRAN RECONOCIMIENTO Y CON ESTO TODO LO DEMAS .-Un Gran Abrazo Diego
amigo me funcionó perfecto en windows y local con xampp, pero mi Server web es linux, lo subí y no corrió, sabes cómo puedo solucionarlo ? de antemano muchas gracias. El error en la nube es:
Exception
Failed to print. Command “smbclient ‘//pre.premierintgroup.com/RP58 Printer’ -c ‘print -‘ -N -m SMB2” failed with exit code 1: Unrecognised protocol level SMB2Connection to pre.premierintgroup.com failed (Error NT_STATUS_CONNECTION_REFUSED)
Mike42\Escpos\PrintConnectors\WindowsPrintConnector::finalizeLinux
vendor/mike42/escpos-php/src/Mike42/Escpos/PrintConnectors/WindowsPrintConnector.php:230
Hola. Recuerde que la impresora debe estar conectada físicamente a la computadora, en este caso debería estar conectada a su servidor web. También puede optar por imprimir del lado del cliente
Hola Amigo. de antemano agradecer por tus buenos aparte a la comunidad.
tengo una duda, esta librería funciona solo con el hardware conectado al servidor ?
o puedo subir mi proyecto a un vps y desde cualquier cliente con su impresora pos podría hacer la impresión ?
Hola. Así es, la impresora debe estar conectada físicamente al servidor. Para imprimir del lado del cliente le recomiendo: https://parzibyte.me/blog/2019/08/01/imprimir-ticket-impresora-termica-javascript-plugin/
Saludos 🙂
Amigo, no puedo encontrar la forma de imprimir el logo, es muy importante para mi imprimirlo, pero no lo encuentra el plugin 🙁 necesito saber por qué es, crees que puedas apoyarme?
Con gusto lo ayudo. Encontrará más detalles en: https://parzibyte.me
Saludos 🙂
Amigo, buenas tardes, una disculpa, es que estoy queriendo imprimir el logo en el ticket desde un controller en laravel pero no encuentra la foto, necesito saber cual es la url correcta para que jale una imagen que esta en la raiz del proyecto si yo estoy queriendo llamarla desde un controller con esta instrucción:
try{
$logo = EscposImage::load(“logo.png”, false);
$printer->bitImage($logo);
}catch(Exception $e){/*No hacemos nada si hay error*/}
Hola. Debe tratar de encontrar la ruta absoluta. Supongo que está en un controlador, su imagen debe estar en el mismo directorio del controlador, y si no, para indicar la ruta relativa, puede usar “../logo.png” si su imagen está un directorio arriba, etcétera; o encontrar la ruta absoluta usando por ejemplo base_path() y luego concatenando.
Saludos 🙂
Señala algunos problemas:
Problem 1
– Installation request for mike42/escpos-php ^3.0 -> satisfiable by mike42/e
scpos-php[v3.0].
– mike42/escpos-php v3.0 requires ext-intl * -> the requested PHP extension
intl is missing from your system.
To enable extensions, verify that they are enabled in your .ini files:
– C:\xampp\php\php.ini
You can also run `php –ini` inside terminal to see which files are used by PH
P in CLI mode.
Installation failed, deleting ./composer.json.
Hola. Por favor lee los mensajes de error. Te está diciendo que habilites la extensión intl.
Te invito a ver un vídeo de instalación de un sistema de Laravel en donde se usa esta librería: https://www.youtube.com/watch?v=HINrotzpaSs
Saludos