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.
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í:
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.
8 Comments
Yordy Rico · noviembre 5, 2020 a las 12:20 pm
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 ?
parzibyte · noviembre 5, 2020 a las 12:49 pm
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 🙂
Moises · agosto 31, 2020 a las 1:40 pm
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?
parzibyte · agosto 31, 2020 a las 3:38 pm
Con gusto lo ayudo. Encontrará más detalles en: https://parzibyte.me
Saludos 🙂
Moises Galvan · agosto 12, 2020 a las 7:29 pm
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*/}
parzibyte · agosto 13, 2020 a las 1:17 am
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 🙂
Eduardo · junio 2, 2020 a las 9:08 pm
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.
parzibyte · junio 2, 2020 a las 11:04 pm
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