Introducción
Nota: te invito a leer cómo imprimir en impresora térmica usando Javascript, es un poco más fácil aunque tiene desventajas como no poder cortar el papel al gusto. Pero funciona sin tener que instalar librerías.
Las impresoras de tickets son muy populares y útiles en los establecimientos donde se necesita entregar un comprobante.
Puede que en alguna ocasión nos toque desarrollar un pequeño sistema en PHP y que tengamos que imprimir tickets.
Para ello es que escribo este tutorial; que al final nos dará un resultado parecido al siguiente:
Si quieres descargar un ejemplo rápido y funcional, mira el repositorio de GitHub. Solo tienes que descargar el código, cambiar el nombre de tu impresora y probar.
Requisitos
- Impresora instalada correctamente – Puedes ver cómo instalar una impresora genérica aquí
- PHP 5.3 o una versión superior – Puedes ver cómo instalar PHP 7 en otro post que hice
- Librería desarrollada por mike42 que podemos encontrar en GitHub aquí
Paso 1: Descargar librería
Actualización 2020: varios usuarios me dicen que no encuentran el autoload. Es cuestión de usar composer, pero si no quieres, puedes descargar el autoload y la carpeta src desde mi perfil de GitHub.
Vamos a ir al repositorio de GitHub y hacer clic en Download ZIP (también podemos clonar el repositorio si es que sabemos usar git).
Después, vamos a extraer ese archivo en una carpeta de nuestra elección.
Esta carpeta debe ser una carpeta que sea accesible desde nuestro entorno de desarrollo web. Si usamos XAMPP, la carpeta está en C:\xampp\htdocs.
Nos tiene que quedar algo así:
Paso 2: Eliminar archivos innecesarios
Entraremos a la carpeta y sólo dejaremos la carpeta src y el archivo autoload.php. Lo demás podemos eliminarlo:
Vamos a renombrar la carpeta a un nombre más fácil de recordar. En mi caso la llamaré “ticket”
Hasta el momento nuestro proyecto debe lucir así:
Paso 3: Hola mundo
Vamos a crear un archivo llamado index.php en donde está la carpeta que acabamos de renombrar, de manera que quede así:
Dentro del archivo vamos a escribir lo siguiente:
<?php
require __DIR__ . '/ticket/autoload.php'; //Nota: si renombraste la carpeta a algo diferente de "ticket" cambia el nombre en esta lÃnea
use Mike42\Escpos\Printer;
use Mike42\Escpos\EscposImage;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
/*
Este ejemplo imprime un hola mundo en una impresora de tickets
en Windows.
La impresora debe estar instalada como genérica y debe estar
compartida
*/
/*
Conectamos con la impresora
*/
/*
Aquí, en lugar de "POS-58" (que es el nombre de mi impresora)
escribe el nombre de la tuya. Recuerda que debes compartirla
desde el panel de control
*/
$nombre_impresora = "POS-58";
$connector = new WindowsPrintConnector($nombre_impresora);
$printer = new Printer($connector);
/*
Imprimimos un mensaje. Podemos usar
el salto de lÃnea o llamar muchas
veces a $printer->text()
*/
$printer->text("Hola mundo\nParzibyte.me");
/*
Hacemos que el papel salga. Es como
dejar muchos saltos de línea sin escribir nada
*/
$printer->feed();
/*
Cortamos el papel. Si nuestra impresora
no tiene soporte para ello, no generará
ningún error
*/
$printer->cut();
/*
Por medio de la impresora mandamos un pulso.
Esto es útil cuando la tenemos conectada
por ejemplo a un cajón
*/
$printer->pulse();
/*
Para imprimir realmente, tenemos que "cerrar"
la conexión con la impresora. Recuerda incluir esto al final de todos los archivos
*/
$printer->close();
?>
Y al llamarla desde localhost/probarticket/ticket.php el resultado es el siguiente:
Pero no sólo podemos hacer eso, podemos hacer muchísimas cosas más.
En el repositorio oficial podemos encontrar miles de ejemplos, pero en este caso haré uno para imprimir un ticket de venta.
Ejemplo: Ticket de venta
<?php
require __DIR__ . '/ticket/autoload.php'; //Nota: si renombraste la carpeta a algo diferente de "ticket" cambia el nombre en esta lÃnea
use Mike42\Escpos\Printer;
use Mike42\Escpos\EscposImage;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
/*
Este ejemplo imprime un
ticket de venta desde una impresora térmica
*/
/*
Una pequeña clase para
trabajar mejor con
los productos
Nota: esta clase no es requerida, puedes
imprimir usando puro texto de la forma
que tú quieras
*/
class Producto{
public function __construct($nombre, $precio, $cantidad){
$this->nombre = $nombre;
$this->precio = $precio;
$this->cantidad = $cantidad;
}
}
/*
Vamos a simular algunos productos. Estos
podemos recuperarlos desde $_POST o desde
cualquier entrada de datos. Yo los declararé
aquí mismo
*/
$productos = array(
new Producto("Papas fritas", 10, 1),
new Producto("Pringles", 22, 2),
/*
El nombre del siguiente producto es largo
para comprobar que la librería
bajará el texto por nosotros en caso de
que sea muy largo
*/
new Producto("Galletas saladas con un sabor muy salado y un precio excelente", 10, 1.5),
);
/*
Aquí, en lugar de "POS-58" (que es el nombre de mi impresora)
escribe el nombre de la tuya. Recuerda que debes compartirla
desde el panel de control
*/
$nombre_impresora = "POS-58";
$connector = new WindowsPrintConnector($nombre_impresora);
$printer = new Printer($connector);
/*
Vamos a imprimir un logotipo
opcional. Recuerda que esto
no funcionará en todas las
impresoras
Pequeña nota: Es recomendable que la imagen no sea
transparente (aunque sea png hay que quitar el canal alfa)
y que tenga una resolución baja. En mi caso
la imagen que uso es de 250 x 250
*/
# Vamos a alinear al centro lo próximo que imprimamos
$printer->setJustification(Printer::JUSTIFY_CENTER);
/*
Intentaremos cargar e imprimir
el logo
*/
try{
$logo = EscposImage::load("logo.png", false);
$printer->bitImage($logo);
}catch(Exception $e){/*No hacemos nada si hay error*/}
/*
Ahora vamos a imprimir un encabezado
*/
$printer->text("Yo voy en el encabezado" . "\n");
$printer->text("Otra linea" . "\n");
#La fecha también
$printer->text(date("Y-m-d H:i:s") . "\n");
/*
Ahora vamos a imprimir los
productos
*/
# Para mostrar el total
$total = 0;
foreach ($productos as $producto) {
$total += $producto->cantidad * $producto->precio;
/*Alinear a la izquierda para la cantidad y el nombre*/
$printer->setJustification(Printer::JUSTIFY_LEFT);
$printer->text($producto->cantidad . "x" . $producto->nombre . "\n");
/*Y a la derecha para el importe*/
$printer->setJustification(Printer::JUSTIFY_RIGHT);
$printer->text(' $' . $producto->precio . "\n");
}
/*
Terminamos de imprimir
los productos, ahora va el total
*/
$printer->text("--------\n");
$printer->text("TOTAL: $". $total ."\n");
/*
Podemos poner también un pie de página
*/
$printer->text("Muchas gracias por su compra\nparzibyte.me");
/*Alimentamos el papel 3 veces*/
$printer->feed(3);
/*
Cortamos el papel. Si nuestra impresora
no tiene soporte para ello, no generará
ningún error
*/
$printer->cut();
/*
Por medio de la impresora mandamos un pulso.
Esto es útil cuando la tenemos conectada
por ejemplo a un cajón
*/
$printer->pulse();
/*
Para imprimir realmente, tenemos que "cerrar"
la conexión con la impresora. Recuerda incluir esto al final de todos los archivos
*/
$printer->close();
?>
Ya después podemos hacer uso de number_format, poner el cambio, un mensaje dependiendo de la hora, etcétera.
Conclusión
En el repositorio oficial hay ejemplos para imprimir códigos qr, códigos de barras, y otras cosas más.
Recuerda, si quieres imprimir nativamente a la impresora de tickets, sin depender de PHP mira este post.
Si usas Laravel mira cómo integrar la librería en Laravel.
Hola, me imprime todo menos la imagen
Tal vez hay que cambiar el algoritmo: https://parzibyte.me/blog/2024/01/17/metodos-imprimir-imagenes-impresoras-termicas/
Hola, me imprime todo menos la imagen del ejemplo de arriba
Tal vez hay que cambiar el algoritmo: https://parzibyte.me/blog/2024/01/17/metodos-imprimir-imagenes-impresoras-termicas/
Hola me podrias ayudar, e puesto el codigo pero me sale Esta pagina no funciona y el error HTTP ERROR 500
Hola. Claro, envíeme mensaje en https://parzibyte.me/#contacto
buenas me podria ayudar quiero imprimir en el ticket de venta el codigo qr para aceder a mi pagina o app
ya tengo el codigo puedo imprimir sin problema pero quiero que salga el qr
Hola. Claro, por favor vaya a https://parzibyte.me/#contacto para atenderle
Saludos!
Me funciona perfecto cuando lo uso en local, pero cuando lo subo al servidor, me sale error 500, a que se debe?
El error 500 puede deberse a varias cosas, pero en este caso específico supongo que es porque no se encuentra la impresora. Recuerde que PHP se ejecuta del lado del servidor, así que va a intentar imprimir en una impresora físicamente conectada al servidor. Como el servidor no tiene la impresora, se genera el error. En esos casos hay que imprimir del lado del cliente: https://parzibyte.me/blog/2022/09/30/comunicar-javascript-impresora-termica-usando-plugin-v3/
Hola! tras unas pruebas todo funciona perfecto. Solo una duda… ¿como podria imprimier el simbolo del Euro? €
He probado con varios codigos \128 \0128 € pero no logro que lo saque
BUenos dias Parzibyte, tengo el siguiente problema cuando llamo a index.php, podrias por favor darme una mano con este error.
Warning: copy(\\DESKTOP-ROM9TOI\POS-58): failed to open stream: No such file or directory in C:\xampp\htdocs\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php on line 372
Fatal error: Uncaught Exception: Failed to copy file to printer in C:\xampp\htdocs\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php:291 Stack trace: #0 C:\xampp\htdocs\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php(173): Mike42\Escpos\PrintConnectors\WindowsPrintConnector->finalizeWin(‘\e@\ea\x01\x1Dv0\x00 \x00\xFA\x00\x00\x00…’) #1 C:\xampp\htdocs\ticket\src\Mike42\Escpos\Printer.php(503): Mike42\Escpos\PrintConnectors\WindowsPrintConnector->finalize() #2 C:\xampp\htdocs\ticket\index.php(69): Mike42\Escpos\Printer->close() #3 {main} thrown in C:\xampp\htdocs\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php on line 291
GRACIAS POR TU TIEMPO!!!!!
Si tiene alguna solicitud puede hacérmela llegar en https://parzibyte.me/#contacto
Excelente me funciono correctamente, después de batallar por mucho tiempo solo tuve que habilitar esta extensión en el php.ini del xampp (extension=intl) y agregar la libreria de (extension=php_printer dll), muchas gracias por tu aporte.
Tengo el mismo problema Rudy puedes ser mas especificó por favor para solucionar el mismo problema>
hola buen día, implementa la librería en mi aplicación funciona la impresión del ticket a nivel local (localhost), pero cuando lo desplegué en cpanel (SERVIDOR PUBLICO) ya no imprime…podrías recomendarme como hacerlo.
$nombre_impresora = “smb://HP-MIPC/POS-80C”;
Sí. Debe imprimir del lado del cliente
Buenas tardes amigo. disculpa pero como hago para que me imprima el ticket doble. es decir que salgan dos tickets iguales. ya probe por config de impresora y no lo hace. Gracias
Imprima 2 veces y ya
Buenas tardes. recibe un cordial saludo. Instale todo tal cual lo explicas en mi pc, en el cual tengo el servidor (xampp), instale la impresora usb y funciona bien. El problema surge cuando cambio la impresora a otra pc me da error. No se como llamarla desde php. Gracias.
Recuerde que la impresora debe estar conectada físicamente a la computadora en donde está el servidor de PHP y Apache
no consigo que imprima el logo, solo imprime la factura, que puedo hacer, gracias.
Hola que tal, me imprime la factura sin problema pero no me imprime el logo, ya le quite la transparencia y lo redimensioné y no imprime el logo, te agradezco si me ayudas.
muchas gracias
Hola. Tal vez su impresora no lo soporta. Le invito a que pruebe el siguiente plugin: https://parzibyte.me/blog/2021/02/09/presentando-plugin-impresoras-termicas-version-2/
Saludos!
Buenas tardes como podria cambiar el tamaño y el tipo de fuente de los textos que se imprimen en el ticket.
Are you able to print barcode to printer? i was unable to print image until i came across your bitImage() code instead of graphics() which prints garbage. The same error happens when i use barcode() to print barcodes. Any solution?
Hola, excelente blog, muchas gracias. Tengo el siguiente problema, tengo versión de PHP 5.6.40, primero me saca error con la línea declare(strict_types=1); al revisar veo q es soportado a partir de la versión 7 entonces lo comentarie, pero ahora me saca el siguiente error: “Fatal error: Default value for parameters with a class type hint can only be NULL in /home/contabsystem/public_html/operativo/ticket/src/Mike42/Escpos/Printer.php on line 512”. Muchas gracias
Le recomiendo actualizar a la última versión de PHP. De hecho la más reciente es la 8
Hola me podrían ayudar con algo porfavor, es que ya tengo todo listo pero no se como imprimir los detalles de la compra desde la consulta SQL en esta librería 😔
Hola, con gusto. Más detalles aquí: https://parzibyte.me/blog/contrataciones-ayuda/
Hola, habra alguna forma de poder imprimir a una que es bluetooth con esta libreria?
Hola. No. Por el momento solo imprime a impresoras conectadas por USB
Buenas tardes yo tengo subido mi proyecto a un servidor en internet como puedo imprimir en la impresora que este conectada a mi ordenador?
https://parzibyte.github.io/plugin-ticket-js/
No me sirvió tu código, no entiendo como ejecutarlo y no existe el archivo autoload.
Hola me podrias ayudar tengo una impresora zebra gc420t la cual ya la tengo instalada y sigo al pie de la letra los pasos que aparecen pero al enviar la impresion en la cola de impresion si aparece que envio algo pero inmediatamente se quita y no imprime nada podras arientarme por que
Hola, nunca me ha sucedido eso. Intenta cambiando el puerto y reinstalando los controladores.
Saludos 🙂
Azael, a mi me pasa lo mismo ¿pudiste resolverlo?
Hola saludos, felicidades por el proyecto, pero no logro ubicar el archivo autoload.php.
Hola, puede obtener el autoload y src de mi repo en GitHub: https://github.com/parzibyte/imprimir_ticket_php
Saludos 🙂
Ya lo tengo Gracias hare unas pruebas
Una pregunta bueno ya lo probé con php puro y todo ok
pero lo intenté con Laravel y me tira un error Class ‘IntlBreakIterator’ not found Cómo se puede hacer para usarlo en dicho framework? tiene soporte? gracias
Qué tal, ¿cuál es tu versión de PHP? recuerda que la clase está en (PHP 5 >= 5.5.0, PHP 7) https://www.php.net/manual/es/class.intlbreakiterator.php tal vez no es Laravel, es la versión de PHP. Deberías actualizar.
PHP 7.3.8
Extensión php-intl
https://github.com/mike42/escpos-php/issues/824
Extension intl habilitada. la librería es perfectamente funcional en localhost/ticket/imprimir.php pero en laravel no hay forma me recomiendas usar escpos-tools?
No lo sé, nunca lo he usado. Espero en el futuro hacer un ejemplo con Laravel para ver el problema.
También puedes ver mi plugin que usa JS: https://parzibyte.me/blog/2019/08/01/plugin-impresora-termica-navegador-javascript/
Hola Parzibyte encontré la solución a este problema con Laravel tardé 3 dias en solucionarlo pero ya lo logré. Después de instalar con el composer con el siguiente comando “composer require mike42/escpos-php” se debe reemplazar la carpeta src original por la que tienes en tu ejemplo funcional en la url “https://github.com/parzibyte/imprimir_ticket_php” y eso es todo.
Hay algo incompatible con Laravel en los archivos de la carpeta src original.
Me da gusto que haya funcionado. No olvides seguirme y compartir 🙂
Saludos
Hola, descargue el archivo en zip y no encuentro el autoload.php, donde lo encuentro
De dónde lo descargas? en el repositorio está el autoload, hay que descargar el zip como lo indico en el post: https://github.com/parzibyte/imprimir_ticket_php/archive/master.zip
Hola nuevamente,
Una pregunta, puedo omitir o comentar la siguiente línea para no usar Composer?
require __DIR__ . ‘/ticket/autoload.php’;
o una forma diferente para no usar Composer, ya leí la,documentación y entiendo para qué sirve, pero en mi caso no voy a requerir actualizaciones y aparte que se me complica esto de Composer.
Gracias, quedo pendiente de tu respuesta por favor
Si no usas el autoload, no se van a cargar las clases necesarias para la impresión de tickets, ni el conector, ni la clase Printer, así de simple
Puedes usar Composer para generar la carpeta vendor y el autoload.php, después de tener ambos elementos ya puedes simplemente copiarlos en todos tus proyectos y no depender de Composer.
Hola!
Gracias por compartir el código y la información, pero me gustaría saber si me pueden apoyar, ya que el archivo autoload.php ya no está en el repositorio, al principio del archivo principal solicita este archivo pero no está, quedo atenta sus comentarios.
Gracias!
Hola qué tal, puedes instalar las dependencias con Composer: https://parzibyte.me/blog/2019/02/02/primeros-pasos-composer-explicacion-funcionamiento/
Eso va a generar el autoload “fresco” con las dependencias.
Saludos 🙂
caballero buenas tardes, le pregunto ¿El código se podría usar en WordPress/WooCommerce una vez el cliente ha realizado el pedido? Estoy buscando un plugin que permita, en la impresora térmica, imprimir automáticamente la factura usando Google Print
Hola amigo buen día. Esto permite imprimir a impresoras térmicas, no impresoras (no sé cómo llamarlas pero son aquellas que utilizan tinta o tóner) convencionales, pero del lado del servidor.
Si usted quiere puede ver un plugin que imprime del lado del cliente (igual a una impresora térmica) y se puede adaptar a WordPress, WooComerce y cualquier otro software pues se programa con JavaScript del lado del cliente. Documentación aquí: https://parzibyte.github.io/plugin-ticket-js/
Me sale el siguiente error:
Warning: require(C:\wamp64\www\probarticket\ticket/ticket/autoload.php): failed to open stream: No such file or directory in C:\wamp64\www\probarticket\ticket\index.php on line 4
alguna idea o tienes el proyecto de prueba en algun lugar para ver que tengo mal?
Hola, no existe el archivo en la ubicación. Verifica que el autoload existe en la ruta que se indica. El ejemplo lo tienes en el post, ahí se muestra la estructura de ejemplo
Saludos
Alguien ya pudo imprimir desde hosting?
Se puede imprimir con puro JavaScript incluso si el proyecto está en la nube:
https://parzibyte.me/blog/2019/08/01/imprimir-ticket-impresora-termica-javascript-plugin/
Mauro echavarria sera que puedas compartir tu codigo, o detalles una poco mas donde se realiza el funtion getRealIP y donde se coloca la el codigo de impresiona de hola por favor una ayuda
Hola. Si quiere imprimir del lado del cliente no olvide que ya existe un plugin:
https://parzibyte.me/blog/2019/08/01/imprimir-ticket-impresora-termica-javascript-plugin/
Saludos
Se puede usar cualquier modelo de impresora térmica o solo modelos en específico?
Se supone que soporta todos los modelos de impresora, ya que todos entienden comandos ESC POS. Puedes probar con la tuya y decirnos, o ver el repositorio de GitHub, ahí hay una lista de impresoras compatibles
Saludos
Me gustaria imprimir en una impresora Zebra ZT220 que está instalada en otro equipo (\\192.168.1.213\etiquetas).
Estoy probando este código llega a la impresora, pero da error
Hola. El modelo que menciona es una impresora de etiquetas, pero no es una impresora de tickets; y la librería solo funciona para tickets y comandos ESC POS
Para imprimir en esa impresora necesita un software que la mayor parte del tiempo viene junto con la impresora; es decir, se lo debieron haber dado al obtener la impresora
Hola pero esta librería imprime pero con la impresora conectada al servidor, no funciona con la impresora conectada a una estación?
Hola. Mira este post.
si la impresora esta conectada a la estacion y compartida desde alli es cosa de poner el nombre en el archivo php y listo. Lo probe con una maquina virtual, aunque en realidad yo tengo la impresora conectada por cable de red al router y desde alli puedo imprimir desde varios pc.
Hola, al igual que se puede imprimir en una impresora, se puede enviar a que la caja registradora se abra automáticamente al dar imprimir?, si es posible que marcas y modelos de caja registradora lo soportan?
Solamente he probado con cajones de dinero que tienen un conector (no recuerdo su nombre pero es como el RJ45 en pequeño) que se conecta a la parte trasera de la impresora; la misma manda un pulso por ahí y el cajón se abre
Ok, es decir que al usar este codigo php, abrirá la caja registradora que este conectada a la impresora por medio de este cable RJ45 o similar de manera automática? o debo implementar o ejecutar algún comando especifico?
Manda el pulso con $printer->pulse(), ya es cuestión de la impresora si interpreta ese código. La mayoría de veces funciona, y en otras ocasiones puedes configurar la impresora en el sistema para que mande el pulso cuando termine de imprimir
El conector pequeño es un RJ11 creo, hay cables RJ11 y en el otro extremo usb.
Pero tambien estan los cables de impresora donde un lado es usb y el otro extremo es un conector cuadrado delgado. ese cable tambien sirve y permite abrir la caja de dinero al momento de imprimir.
Consulta, creo que tengo la misma impresora que tu, pero no puedo imprimir codigos de barra ni codigos QR.. sera que la impresora no los soporta? gracias!!!!
Me parece que no lo soporta, lo he intentado con la mía y tampoco lo hace, eso es porque son muy básicas
Hola amigo, me podrías apoyar?
Me marca este error.. Warning: copy(\\GERENCIA\EPSON TM-T20II VENTAS2): failed to open stream: No such file or directory in C:\wamp64\www\ticket\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php on line 372
Estoy imprimiendo en una EPSON TM20II que si es compatible, pero la tengo conectada en RED y me marca este error, esta compartida… pero es necesario que este instalada físicamente en mi equipo para que funcione ?
Gracias.
Cambia el nombre de la impresora a uno sin espacios y más corto, asegúrate de compartirla y primero imprime una página de prueba para comprobar que esté instalada de manera correcta
Hola quisiera preguntar como a qué funcion llamo en le boton imprimir para que me imprima, por ejemplo ?
Hola, tienes que llamar al archivo PHP de la manera que tú quieras. Por ejemplo, podrías simplemente poner un enlace como localhost/imprimir.php y redirigir al usuario ahí, también podrías hacer una petición ajax y llamar al archivo, o ejecutarlo desde la terminal. Todo depende de tus necesidades y de lo que estés desarrollando. Saludos
Lo que quería hacer es poner un botón de imprimir y especificar que imprima en una impresora secundaria, no la del predeterminada de Windows , he probado con método get post accion “archivo” pero en este caso no me funciona. Se puede llamar desde href al archivo? O hay otra manera? Gracias
El nombre de la impresora se especifica al instanciar la clase; ahí puedes poner la impresora que quieras incluso si no es la predeterminada. Sobre el href, claro que sí, podrías poner algo como
<a href="archivo.php" rel="nofollow">Imprimir<a>
en el caso más simple; lo que abriría una pestaña que el usuario tendría que cerrar. Otra opción es con JavaScript ywindow.open
, de este modo podrías cerrar la pestaña automáticamente (llamando awindow.close
).Como te dije antes, todo depende de cómo lo quieras hacer tú, lo único que hay que hacer es ejecutar el archivo PHP de cualquier forma.
Buenas, perdone de tantas preguntas, he probado en localhost pero me sale Notice:Print connector was not finalizaded. Did you forget to close to close the print?
Hola. No estás cerrando la impresora al final con
$printer->close();
(bueno, en este caso$printer
es el nombre de la variable que tiene la impresora). Saludos, te invito a seguirme en mis redes sociales 🙂Hola estoy implementando ésta librería, hice todos los pasos y no me sale ningún error, simplemente no me imprime nada. Hice la impresión de prueba y si me arroja la impresión de prueba. También compartí la impresora. El problema es solo que cuando llamo localhost/probarTicket/ticket.php. Solo se queda en blanco la pagina y no imprime nada.
Hola. Comparte el código que estás implementando para que el problema sea más fácil de entender
text(“Hola mundo\nParzibyte.me”);
$printer->feed();
$printer->cut();
$printer->pulse();
$printer->close();
?>
El problema es que no me envía nada a la cola de impresión, cambie del puerto USB02 A LT1 y recién me envió algo a la cola de impresión, pero me sale Error-Imprimiendo.
¿Podrías mostrarme el fragmento en donde estás creando a $printer?
Hola! tengo una duda en cuanto a la conexión de la impresora. Yo tengo una pagina web de ventas que esta alojada en mi servidor. En cada sucursal (en distintas ubicaciones) tengo una pc con una impresora termina conectada, el proceso de venta es que los cajeros se conectan a pagina web y desde hacen su venta pero al momento de imprimir esta no sale. Hay alguna forma de poder hacer que imprima en la maquina que esta enviando el pedido y no en el servidor?
Gracias por su tiempo
Sí, con JavaScript
amigo excelente el trabajo, realice todo los pasos y me funciono bien, pero tengo una consulta sobre el TICKET DE VENTA, como evito ese salto de linea del precio, quite el “\n” y despues coloque la aliniacion a la derecha, y me sale todo junto no se alinea como puedo solucionar eso? espero tu ayuda y de antemano gracias!!!
Hola. Ese es un problema de diseño, en mi caso lo hago así porque nunca se sabe cuán largo será el nombre del producto. En caso de poner el precio hasta el final (alineado a la derecha sin salto de línea) se corre el riesgo de que se encime el texto o de que el ticket se forme de mala manera.
En resumen, sugiero dejarlo así como está para no tener errores con nombres largos.
Otra opción que se me ocurre sería medir cuántas letras caben horizontalmente en el ticket y a partir de ello crear una cadena propia que tenga el precio alineado… sería cosa de probar según la necesidad de cada persona.
GRACIAS POR LA AYUDA AMIGO, AHORA CON ESO ACLARASTE MIS DUDAS, AHORA LO MALO ES PEDIR OTRA VEZ AYUDA.. TENGO MI IMPRESORA EPSON TM-m30 que imprime normal mediante cable USB, pero ahora quisiera saber como puedo hacer para que pueda imprimir mediante bluetooh, reconoce la impresora e imprime la prueba, en el codigo cambie el nombre de impresora y tmb coloque su mac, pero aun asi me sale error y es el de compartir la impresora pero al ir a dispositivos e impresoras, en sus propiedas no me sale compartir, como puedo solucionar… espero tu respuesta y de antemano MUCHAS GRACIAS
Hola, debes buscar la forma de compartir la impresora. Lo que hace este conector es imprimir pero utilizando una impresora compartida. Tal vez investigando en el repositorio oficial puedas encontrar otro conector.
hola tu sabes cómo puedeo imprimir desde mi servidor en la nube gracias
Hola, la impresora debe estar conectada físicamente al servidor. Si su servidor está en la nube, la misma debería estar conectada a él. Recomiendo usar la versión para JavaScript y así evita esos problemas
Buenas noches, ante todo Gracias por todos los mensajes que respondes y tratas de ayudar a todos! un genio!
Tengo el siguiente error…
Uncaught Error: Class ‘Escpos’ not found
in C:\xampp\htdocs\admin\gen_com.php:97
Stack trace:
#0 {main}
thrown in C:\xampp\htdocs\admin\gen_com.php on line 97
Alguna idea del por que no encuentra la clase Escpos si en toería esta compartida la impresora y el directorio esta en esta ruta?
C:\xampp\htdocs\admin\ticket\autoload.php y dentro del autoload le quite src al basedir
Hola. No estás incluyendo el archivo autoload o el mismo está modificado. En tu comentario dices que lo modificaste, no te recomiendo eso, pon el archivo autoload original y ve paso por paso; ya que este archivo se encarga de cargar la clase que falta
Hola que tal, estoy tratando de usar el código y todo funcionaba muy bien solo que de la nada comenzó con un mensaje de error y ahora no imprime, sin embargo si cambio de impresora todo bien, lo raro es que empece utilizando la impresora que ahora causa problemas
Warning: copy(\\DESKTOP-3V8QNQL\imptick): failed to open stream: No such file or directory in C:\Users\USUARIO HP\Dropbox\kelles\php\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php on line 372
Parece que no has compartido la impresora. Prueba compartiéndola y cambiándole el nombre
Buenas. Tengo una impresora Bixolon 270 que funciona perfecto con la librería. Tengo una web app que manda a imprimir a un servidor local utilizando la IP pública de la PC del cliente. Hasta ahí todo funciona excelente, el problema está en que la web app funciona utilizándose desde unas Tablet corriendo el sistema y enviando a imprimir a la PC del cliente, me sucede que cada ciertas impresiones el diálogo de impresión me dice “Imprimiendo” pero no pasa absolutamente nada así que debo cancelar la impresión ry reiniciar la impresora para poder volver a imprimir.
Ya verifique si era problema de impresión por la IP pública y efectivamente no es eso ya que el documento como tal si llega al XAMPP del cliente. Si me pudieras ayudar estaría increíblemente agradecido.
Algo estuve leyendo en Internet que puede ser que la impresora no pueda compartirse en red porque da problemas, ¿haz oído de algo similar?. Igualmente quiero probar la opción de JavaScript pero no estoy seguro que pueda funcionar imprimiendo desde las tablets ya que la impresora esta instalada en la PC del cliente (a pesar de que todo esta conectado en una red local con un router)
Estoy desesperado, gracias ante todo
Hola, tienes razón con el problema de JavaScript y es que no se podrá si no la tienes instalada en tus tabletas, cosa que supongo no es posible. El problema que mencionas parece más a un problema con el sistema operativo o con la impresora, prueba con otra impresora en la misma PC,o prueba con otra PC conectando la impresora; así verás cuál es el problema.
Saludos, espero que se solucione pronto 🙂
Probare con otra impresora y a su vez tambien lo intentare con todo offline a ver si funciona. Gracias por todo
Hola, primeramente excelente aportación.
Tengo un problema, mi impresora es BIXOLON 350 Plus, ya seguí todos los pasos pero me genera este error:
“Warning: copy(\\DESKTOP-22O3UCG\ImpresoraTermicaC): failed to open stream: No such file or directory in C:\wamp64\www\SistemaBeijingBisquets\php\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php on line 372”.
Te comento que ya INSTALE la impresora siguiendo el tutorial que compartes, ya COMPARTÍ la misma y tengo el CODIGO igual al que pones como HOLA MUNDO, pero no encuentro cual sea la causa del error.
Te agradecezco de antemano tu atención y espero que puedas ayudarme. Saludos cordiales
Hola. Yo sé que me acabas de decir que ya instalaste y compartiste la impresora, pero, ¿estás seguro?
El error que arroja es porque en tu computadora no está compartida la impresora llamada “ImpresoraTermicaC”, recuerda ponerle ese nombre.
Prueba y avísame por cualquier cosa, si el error continúa prueba poniendo otro nombre más corto a la impresora.
hola, primero que todo gracias por tu post, es genial, 2°, estoy usando tu post par aimprimir desde linux, pero aun no puedo hacerlo, ahora me da un error consulta: se puede usar con cups?, que nombre debiera tener la impresora? se ocupa otro conector? , si es asi , viene el la librería ??
desde ya gracias por todo
Hola, qué tal. Para Linux no se usa el WindowsPrintConnector, debes usar otro. En la página oficial encontramos un ejemplo:
https://github.com/mike42/escpos-php/blob/development/example/interface/linux-usb.php
si lo vi, estoy trabajando con el , pero sin ningun resultado,, gracias por responder
Te recomiendo que primero pruebes imprimiendo cualquier cosa a través del sistema, y más tarde pruebes con PHP. De esta forma eliminas errores y malas suposiciones 🙂
si ya lo he echo, si envío el comando “lp” la impresora imprime, ( lo envio a travez de un exec por php ), lo que no me queda claro es la primera parte donde dice que hay qe utilizar el modulo usblp , atraves del comando exec imprimo , pero no puedo cortar el papel, de nuevo gracias por tus comentarios
Buenas tardes tengo el mismo problema. Podrían ayudarme?? todo imprime bien hasta que intento colocar el logo. Saludos
Fatal error: Uncaught Error: Cannot instantiate abstract class Mike42\Escpos\EscposImage in C:\Program Files\NetMake\v922\wwwroot\sc
Codigo utilizado:
require_once($this->Ini->path_third. ‘/Mike42/autoload.php’);
$connector = null;
$var = “EPSONTMT20II”; // nombre impresora
$connector = new Mike42\Escpos\PrintConnectors\WindowsPrintConnector($var);
$printer = new Mike42\Escpos\Printer($connector);
$conectorimagen=new Mike42\Escpos\EscposImage;
$logo = EscposImage::load(Mike42\src\Mike42\Escpos\resources. “/logo.png”, false);
$printer -> setJustification(Printer::JUSTIFY_CENTER);
$printer -> bitImage($logo);
/* Cortar Papel */
$printer -> cut();
/* Close printer */
$printer -> close();
El error que tienes se debe a que estás instanciando una clase abstracta. Recuerda que una clase abstracta tiene su nombre debido a que sus métodos deben ser sobrescritos por otra.
Tu error está en donde dice
$conectorimagen = new Mike42\Escpos\EscposImage. No debes hacer esto, de hecho en ningún momento lo estás usando. La imagen debería cargarse bien con
EscposImage::load()
Sólo que debes escribir bien la ruta de la imagen, entre comillas. Si estás en Windows puedes usar algo como C:\ruta\completa\a\la\imagen.png
O también puedes usar __DIR__
Esto es más que nada un error de programación, no tiene nada que ver con la librería o la imagen.
Muchas gracias por tu ejemplo de verdad que me sirvió bastante aunque tuve que seguir exactamente lo que tú hiciste ya que de otra manera no lo lograba… Te felicito por compartir tus conocimientos.
Me da gusto ayudar. Te invito a suscribirte a mi blog en la barra superior derecha.
Hola parzibyte, gracias por el tutorial, hasta ahora no entendía la libreria de Mike42. Mi duda es si este tutorial puede funcionar con una impresora HP convencional de tinta? No tengo una impresora de ticket con que probar. Gracias de antemano.
Hola, en algún tiempo también estuve buscando un emulador o simulador pero no encontré nada. Me parece que tendrás que conseguir una impresora térmica. A mi parecer no son tan caras y por otro lado si consigues una te servirá para futuras pruebas, al menos en mi país las más baratas cuestan aproximadamente 35 dólares americanos y son de la marca Xprinter
y si la impresora esta en en varios lugares , y mi sistema no esta en local ,me refiero a una intranet esto funciona ?
Hola, no entiendo bien tu pregunta pero mientras la impresora esté físicamente conectada a una computadora, dicha computadora sea alcanzable en la red y las demás computadoras clientes se conecten a ella no debería haber problemas
Pingback: Imprimir ticket en impresora térmica usando Javascript - Parzibyte's blog
Hola gente, voy a contribuir con algo que veo que preguntan mucho referente a poder imprimir desde la impresora conectada al Cliente y cuyo procesamiento esta del lado del servidor como es lo lógico, utilizando el driver mike42/escpos-php.
Primero deben entender que la solicitud la hace el cliente al servidor y el driver como tal esta del lado del servidor y ahí saldría la impresión, pero lo que hago es retornarle al servidor la IP del cliente utilizando esta función en PHP:
function getRealIP() {
if( $_SERVER[‘HTTP_X_FORWARDED_FOR’] != ” ) {
$client_ip =
(!empty($_SERVER[‘REMOTE_ADDR’])) ?
$_SERVER[‘REMOTE_ADDR’]
:
((!empty($_ENV[‘REMOTE_ADDR’])) ?
$_ENV[‘REMOTE_ADDR’]
:
“unknown”);
$entries = preg_split(‘/[, ]/’, $_SERVER[‘HTTP_X_FORWARDED_FOR’]);
reset($entries);
while (list(, $entry) = each($entries)) {
$entry = trim($entry);
if ( preg_match(“/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/”, $entry, $ip_list) ) {
$private_ip = array(
‘/^0\./’,
‘/^127\.0\.0\.1/’,
‘/^192\.168\..*/’,
‘/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/’,
‘/^10\..*/’);
$found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]);
if ($client_ip != $found_ip) {
$client_ip = $found_ip;
break;
}
}
}
}
else {
$client_ip =
(!empty($_SERVER[‘REMOTE_ADDR’])) ?
$_SERVER[‘REMOTE_ADDR’]
:
((!empty($_ENV[‘REMOTE_ADDR’])) ?
$_ENV[‘REMOTE_ADDR’]
:
“unknown”);
}
return $client_ip;
}
Y luego mando a imprimir, pero direccionado al cliente, y en ese momento la impresión sale del lado del cliente, el código a continuación:
text(“Hola Mundo”);
$printer -> cut();
$printer -> close();
} catch (Exception $e) {
echo $e;
}
?>
Adicionalmente deben hacer estos dos pasos del lado del cliente, en mi caso todas con Windows, ahora debes ir a:
Punto 1:
Panel de control
Todos los elementos de Panel de control
Centro de redes y recursos compartidos
Configuración de uso compartido avanzado
Todas las Redes
Uso compartido con protección por contraseña
Desactiva esa opción
Punto 2:
Configuración de Impresoras
Ir a la impresora en mi caso EPSON y colocarla como predeterminada
Compartirla solo con el nombre EPSON, si te fijas yo la invoco así //168.0.0.1/EPSON
Y listo ya esta. Miren mi server esta en centos 7 ahi esta montado mi codigo fuente y
mis clientes son todos windows. Y al momento me funciona sin inconvenientes. Tambien puedo hacer que una maquina en windows se convierta en un PrintServer y enviar desde muchos sitios las imprisiones
a una sola maquia o a las que yo quiera.
Si tienen dudas me avisan. Por cierto en lo que si tengo problemas y quiero hallar una solucion
es que el driver no detecta cuando se acabo el papel o la tapa esta abierta, y no hay modo de controlar
esos eventos. Si quiza me pueden ayudar en eso les estaria agradecido
Hola!! tu crees que me puedas apoyar con la impresión de modo cliente servidor ? , ya que logro imprimir de manera local pero al momento de subirlo a un servidor y imprimirlo desde mi equipo no imprime , me podrías compartir tu código ? te lo agradecería mucho
Hola. Si el servidor está en internet, no puedes conectarle una impresora. La misma debe estar conectada físicamente al servidor, si no, no funcionará. En ese caso mejor usa la impresión por JavaScript
Hola , tu crees que puedas compartirme tu código ?
Hola, si te refieres al de JavaScript está al inicio del post pero aquí dejo el link: https://parzibyte.me/blog/2017/10/17/imprimir-ticket-en-impresora-termica-usando-javascript/
Hola, quiero hacer lo mismo que tú. pero la función que se llama: “getRealIP” ¿dónde la debo de poner, quién la invoca y donde envío el valor retornado por la función?
Hola
Mauro Echeverría , podrias compartir tu codigo mas completo para poder entenderlo , ayudarías mucho con ese aporte, espero tu respuesta , gracias
Muy util!!, ya lo he hecho, me gustaria saber de como se obtiene el estado de papel de impresion termica
Hola. La librería (hasta el día de hoy, según lo que he leído) no provee manera alguna de leer algún mensaje de la impresora. Tendrías que buscar la manera; se me ocurre que tal vez leyendo del puerto serial o algo así, pero PHP no es muy bueno haciendo eso.
Espero que encuentres solución a tu problema. Te invito a que te suscribas a mi blog ingresando tu correo en la barra lateral de la derecha.
HOLA QUE TAL, VEO TU ERES EL UNICO QUE TIENE BUENOS POST ACERCA DE ESTA LIBRERIA DE MIKE 42, ME FUNCIONO MUY BIEN, PERO AL MOMENTO DE INTEGRARLA EN CODEIGNITER NO TENGO RESULTADOS, CREE UN HELPER Y DENTRO DE EL COLOQUE LAS LINEAS
require __DIR__ . ‘\..\..\autoload.php’;
use Mike42\Escpos\Printer;
use Mike42\Escpos\EscposImage;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
Y EN MI CONTROLADOR CARGUE MI HELPER Y LAS LINEA PARA EL HOLA MUNDO
PERO ME SALE ESTE ERROR
Fatal error: Class ‘WindowsPrintConnector’ not found in C:\xampp\htdocs\Valentine\application\controllers\inicio.php on line 58
LOS ARCHIVOS SRC Y AUTOLOAD.PHP LOS COPIE EN LA RAIZ DE MI PROYECTO
GRACIAS ANTE MANO
Hola. No estás incluyendo bien el archivo que se encarga de cargar las clases, es por ello que no se encuentra la clase que se necesita. Verifica tus rutas, te recomiendo leer acerca de dirname y __FILE__. Saludos y si siguen habiendo problemas no dudes en comentar.
siempre me sale un error al llamar el archivo require __DIR__ . ‘/ticket/autoload.php’;
Al implementarlo con laravel , cambia la configuracion inicial ?
Cuando se trabaja con un framework, debes adaptarte a su paradigma. Me parece que en Laravel puedes instalar la librería de una manera más fácil con:
composer require mike42/escpos-php
Luego simplemente usa las clases, no olvides los namespaces y cosas por el estilo. Saludos.
Caro amigo, ya nos hablamos sobre sobre la funcionabilidad de esta libreria, mi pregunta es si tienes alguna lietratura en tu blog en como transformar la computadora como un servidor local y si tendré sucesso en utilizar esta liberia para la impressión del ticket.
Abrazos.
Hola. Puedes convertir cualquier computadora en un servidor web. Si usas Windows puedes ver este post para instalar Apache, PHP y MySQL: https://parzibyte.me/blog/2017/12/11/configurar-instalar-php-7-apache-server-mysql-windows/
Si usas Linux simplemente sigue un tutorial de cómo instalar LAMP. Lo único que tiene que estar instalado es lo que menciono arriba.
Una vez instalado todo eso sólo tienes que conectar la impresora y compartirla, para después utilizarla con la librería. Saludos.
Muchas Gracias!!
Al parecer muy buena librería, pero únicamente funciona en un servidor local supongo.?
Sí, sólo en un servidor local, pues la impresora debe estar conectada físicamente a la computadora. Igualmente puedes imprimir uno desde JavaScript (del lado del cliente): https://parzibyte.me/blog/2017/10/17/imprimir-ticket-en-impresora-termica-usando-javascript/
Buenas noches, Muy buenos tus aportes.
Tengo el siguiente error
Parse error: syntax error, unexpected ‘[‘ in C:\wamp\www\prueba\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php on line 158
ya antes había realizado el mismo procedimiento y funcionó correctamente.
Espero me puedas ayudar.
*La impresora esta compartida.
Gracias
Hola. Es la versión de PHP que no soporta la sintaxis corta de array. P. Ej. $arreglo = []; en lugar de $arreglo = array();
Debes actualizar tu versión de PHP a 5.4 o superior. Más información de la sintaxis aquí: http://php.net/manual/es/migration54.new-features.php
Saludos
Hola.’
Funciona con cualquier impresora térmica o debe de ser algunas en especifico ?
Hola, funciona con la mayoría de impresoras, pero no con cualquiera. Puedes ver la lista aquí: https://github.com/mike42/escpos-php
Si la tuya no está en la lista, no te preocupes, tal vez funcione de igual manera. Para ello, te recomiendo imprimir una página de prueba desde el panel de control (si estás en Windows) y en caso de que la prueba sea exitosa se debería poder usar con la librería.
Saludos.
Hola!, muy buen post! me ha sido de mucha ayuda.
¿Se puede crear algunta tabla para que los articulos y el precio siempre queden la misma posición sin importar el largo?
Tengo que imprimir 4 columnas: Fecha, detalle, cuota y saldo.
Si los imprimo poniendo los espacios se ve feo, porque no siempre tienen el mismo largo.
En la carpeta de los ejemplos salen algunas tablas pero no las entendí
¿Alguna idea?
Gracias!
Me parece que no hay forma de poner alguna tabla, sólo que la dibujes manualmente con símbolos como | o -, cosa que sería muy larga y tediosa. Te recomiendo alinear las cosas a la izquierda y derecha, o separar por saltos de línea y tal vez poner algunas líneas como separadores. Algo así:
https://i.imgur.com/Li1znFH.png
Las líneas podrías hacerlas imprimiendo muchas veces alguno de los siguientes símbolos: =, _ o –
Hola, exelente post!!! Ahora una consulta, como hago para compartir la impresora a mi servidor donde esta alojado mi pagina web, no es un servidor local por eso.
Gracias Nicolas Stagno
Hola, no creo que sea fácil compartir la impresora a través de internet, y recuerda que la impresora debe estar conectada físicamente al servidor (no por red). Si el servidor no será local, te recomiendo que veas la alternativa para imprimir el ticket en JavaScript: https://parzibyte.me/blog/2017/10/17/imprimir-ticket-en-impresora-termica-usando-javascript/
Saludos 🙂
Hola estoy intentado utilizar tus codigos… y me sale:
Fatal error: Class ‘Mike42\Escpos\PrintConnectors\WindowsPrintConnector’ not found
que puedo estar penando y equivocado en mi archivo?
el inicio esta asi:
require ‘escpos/autoload.php’;
use Mike42\Escpos\Printer;
use Mike42\Escpos\EscposImage;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
Hola, no estás incluyendo correctamente los archivos. El error te dice que no encuentra la clase, asegúrate de hacer el include con la ruta correcta. Y si usas Composer recuerda configurar bien el autoload
hice el cambio… mire como esta.:
require __DIR__ . “/escpos/autoload.php”;
use Mike42\Escpos\Printer;
use Mike42\Escpos\EscposImage;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
todavia me sigue el mismo error
Si te sigue dando el mismo error es porque sigue estando mal la ruta en donde incluyes el archivo. Comparte una imagen de la estructura del directorio completo en donde están los archivos del ticket, así como el archivo en donde llamas a la impresión; sólo de esa manera puedo ayudarte.
Bueno link de imagen
http://www.jsinfoweb.com.br/tela001.jpg
vale a pena decirte que lo estoy haciento todo online
mi directório principal www
la carpeta donde esta el PHP que estoy trabajando es “reformaleitura”
adentro esta el PHP “relprint.php” en el esta el codigo. Adentro de esta carpeta “reformaleitura” esta :
“escpos” e sigue como tus instruciones, e copiado adentro el “src” y todo su contenido y “autoload.php”
Ok. La forma en la que lo estás incluyendo supone que en la carpeta reformaleitura está el directorio así:
escpos/autoload.php
Sin embargo, veo que es:
escpos/src/autoload.php
Prueba poniendo require __DIR__ . “/escpos/src/autoload.php”;
el “autoload.php” esta en la carpeta “escpos” y no dentro de la “src”
sigue imagen:
http://www.jsinfoweb.com.br/tela002.jpg
Ahora muestra una captura del directorio en donde se encuentra relprint.php
Sigue imagen como pediste:
http://www.jsinfoweb.com.br/tela003.jpg
Informaciones adicionales que talves te sea importante, e verificado en mi servidor hosting sobre la función “php_printer.dll” en que algunos comentários veo que hay que estar activa, y el servidor hosting no puede activarla por ser compartido.
Ye comentários a parte e visto tus explicaciones de JAVASCRIPT tambien lo voy a intentar utilizar.
Sí, mejor utiliza JavaScript. Y ahora que lo pienso, no ibas a poder imprimir desde php porque la impresora debería estar conectada físicamente al servidor, pero el servidor estaría online, por lo tanto no funcionaría.
Perfecto amigo! Lo voy a probar el JAVA y te comento como fue. Y muchas gracias por su atención!
Buenas noches.
Tengo dos preguntas,
1. si imprimo desdes mac o desde windows tengo que cambiar la linea $connector = new WindowsPrintConnector($nombre_impresora);
Si si por cual la cambiaria. Y si esto es cierto entoces me tocaria detectar cada sistema operacional de usurio para poder configurar esa linea de manera automatica ?
2. estoy en un mac colocando tu ejemplo uno y no me funciona, me sale un error de pagina, solo me deja de salir el error si le quito la ultima linea $printer->close(); pero entonces no me imprime nada.
Mil y mil gracias
Sí, varía dependiendo del sistema operativo. En Linux, por ejemplo, tienes que usar FilePrintConnector; o algún otro conector si la impresora está en red. En Mac me parece que al menos la interfaz USB no está soportada, así que te recomiendo que mejor veas la manera de imprimirlo desde javascript: https://parzibyte.me/blog/2017/10/17/imprimir-ticket-en-impresora-termica-usando-javascript/
También dejo aquí el repositorio de GitHub para que leas la documentación completa: https://github.com/mike42/escpos-php
Mil gracias, usare Linux, que es sistema operacional de mi servidor
Que tal, para poder realizar la impresión del logotipo, es necesario tener instalado imagik.dll ?
Todo me ha funcionado de maravilla, solo tengo problemas para imprimir logotipo
Saludos! y gracias por tan buen aporte!
Sí, es necesario tener imagick o gd, como se ve aquí: https://github.com/mike42/escpos-php#requirements
Citando al autor:
ya he instalado la extension Imagick en la pc, imprimo el mensaje de error y me sale: File “logo.png” does not exits or is not readable.
ya he intentado diferentes rutas y colocandolo en diferentes carpetas y me arroja lo mismo.
Te está indicando que no encuentra tu imagen. Pega aquí el fragmento de tu código en donde te imprimes el logo para poder ayudarte
setJustification(Printer::JUSTIFY_CENTER);
try{
$logo = EscposImage::load(“logo.png”, false);
$printer->bitImage($logo);
}catch(Exception $e){/*No hacemos nada si hay error*/
$printer -> text($e -> getMessage().”\n”);
}
$printer->text($encabezado);
$printer->setJustification(Printer::JUSTIFY_LEFT);
$printer->text($auto);
$printer->setJustification(Printer::JUSTIFY_CENTER);
$printer->text($pie);
$printer->feed(3);
$printer->cut();
$printer->pulse();
$printer->close();
Esto es todo lo que tengo en mi archivo php,
Ok. Supongo que tu imagen está en la misma carpeta en donde está el archivo que contiene el código que me muestras. ¿Estoy en lo correcto? Y si no es así, ¿podrías subir una captura de la estructura del directorio a imgur y pegar aquí el enlace?
Si claro la imagen la tengo en la misma carpeta que mi archivo php.
aunque he intentado colocarla en alguna otra ruta sin exito alguno.
Adjunta aquí una captura de la estructura de tu directrio en donde se vea el logo y el archivo que imprime, para tener una mejor idea.
https://i.imgur.com/WbnXJ69.jpg
En el enlace que comentaste anteriormente veo un connector diferente, tiene algo que ver?
No, si el ticket sale pero la imagen no, el problema es la ruta de la imagen.
Finalmente intenta poner la ruta completa en lugar de “logo.png”, es decir, algo como “C:\la\ruta\completa\de\la\imagen.png”
Por fin ha hecho la impresion del logo!!
Creo que no me quedara mas que agregar la ruta completa.
Te agradezco mucho tu apoyo!!
Ahora aplico completo la impresion con php y con javascript, el otro post que haz agregado que tambien me ha sido de gran ayuda!
Saludos y Éxito!!
Es un placer ayudar. Intuyo que estás usando codeigniter, tal vez estás llamando al método de un controlador pero la imagen no está en el mismo lugar que el controlador, y por eso genera el error. Para no usar la ruta completa, puedes investigar un poco sobre http://php.net/manual/es/function.dirname.php y la constante mágica __FILE__ http://php.net/manual/es/language.constants.predefined.php
Si, desarrollo en codeigniter, normalmente utilizo base_url(), pero de igual modo no me ha funcionado.
al final esta fue la solución:
load(_DIR_.”/logo.png”, false);
de hecho ese error me salia incluso antes de instalar la extensión imagick, por eso mi primer pregunta fue si era necesaria esa extensión
Excelente espíritu de colaboración de tu parte, creo que nos haz salvado la existencia a muchos!
Que tal, es necesario tener instalado Imagik para poder hacer la impresion del logotipo??
Gracias por tan buen aporte y saludos!
Sí, debe estar habilitada dicha extensión.
Saludos.
que inpresoras termicas soporta la biblioteca
Hola, en el repositorio de GitHub está la lista, pero aquí la pongo igualmente:
3nStrat POS-08
AURES ODP-333
AURES ODP-500
Bematech-4200-TH
Bixolon SRP-350III
Black Copper BC-85AC
Citizen CBM1000-II
Citizen CT-S310II
Dapper-Geyi Q583P
Daruma DR800
EPOS TEP 220M
Epson EU-T332C
Epson FX-890 (requires feedForm() to release paper).
Epson TM-T20
Epson TM-T20II
Epson TM-T70
Epson TM-T70II
Epson TM-T81
Epson TM-T82II
Epson TM-T88II
Epson TM-T88III
Epson TM-T88IV
Epson TM-T88V
Epson TM-U220
Epson TM-U295 (requires release() to release slip).
Epson TM-U590 and TM-U590P
Equal (EQ-IT-001) POS-58
Excelvan HOP-E200
Excelvan HOP-E58
Excelvan HOP-E801
Excelvan ZJ-8220
Gainscha GP-5890x (Also marketed as EC Line 5890x)
Gainscha GP-U80300I (Also marketed as gprinter GP-U80300I)
gprinter GP-U80160I
Hasar HTP 250
Metapace T-1
Metapace T-25
Nexa PX700
Nyear NP100
Okipos 80 Plus III
Orient BTP-R580
P-822D
P85A-401 (make unknown)
Rongta RP326US
Rongta RP58-U
Senor TP-100
SEYPOS PRP-300 (Also marketed as TYSSO PRP-300)
Sicar POS-80
Silicon SP-201 / RP80USE
SPRT SP-POS88V
Star BSC10
Star TSP100 ECO
Star TSP100III FuturePRNT
Star TSP-650
Star TUP-592
Venus V248T
Xprinter F-900
Xprinter XP-58 Series
Xprinter XP-80C
Xprinter XP-90
XPrinter XP-Q20011
Xprinter XP-Q800
Zjiang NT-58H
Zjiang ZJ-5870
Zjiang ZJ-5890K
Zjiang ZJ-5890T (Marketed as POS 5890T)
Hola una pregunta y si kisiera que me escribiera la cantidad con letras segun sea el monto que vaya a pagar se podrá realizar con alguna funcion??? te agradeceria mucho tu respuesta gracias…
Puedes escribir tu propia función para hacer eso, o buscar en internet. Desconozco cómo hacerlo en PHP pero alguien ya debió haberlo escrito. Si necesitas una guía, recientemente hice un post de cómo hacerlo en Javascript: https://parzibyte.me/blog/2018/04/30/javascript-numero-moneda-texto-letras/
Podrías adaptarlo a PHP y ver lo que pasa. Saludos.
Hola buen día, me podría ayudar a solucionar este error por favor o una alternativa que pueda tomar?
Warning: copy(\\HotelAlameda-PC\EPSON XP-410 Series): failed to open stream: No such file or directory in C:\xampp\htdocs\AlamedaTicket\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php on line 372
Fatal error: Uncaught Exception: Failed to copy file to printer in C:\xampp\htdocs\AlamedaTicket\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php:291 Stack trace: #0 C:\xampp\htdocs\AlamedaTicket\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php(173): Mike42\Escpos\PrintConnectors\WindowsPrintConnector->finalizeWin(‘\e@Hotel Alameda…’) #1 C:\xampp\htdocs\AlamedaTicket\ticket\src\Mike42\Escpos\Printer.php(503): Mike42\Escpos\PrintConnectors\WindowsPrintConnector->finalize() #2 C:\xampp\htdocs\AlamedaTicket\index.php(41): Mike42\Escpos\Printer->close() #3 {main} thrown in C:\xampp\htdocs\AlamedaTicket\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php on line 291
Renombra tu impresora, no tiene que llevar espacios ni caracteres raros. También recuerda compartirla, y primero manda una página de prueba, si la imprime, entonces el programa de PHP funcionará correctamente
gracias
Ola otra vez molestandote mira lo que pasa es que kiero imprimir un codigo de barras hasta abajo de mi ticket pero realmente no se como poner el codigo. al momento de mandar a imprimir en la impresora termica
este es mi html pero como lo puedo imprimir con la sentencia:
$printer->text(“\n”);
ya que si hago esto me lo imprime cono texto
$printer->text(“img src=”Generar_CB\barcode.phptext=0123456789&size=40&codetype=Code39.\n”);
me ayudarias bastate mil gracias
La impresora no entiende HTML, sino comandos. Supongo que estás generando el código de barras con una librería de terceros, la cual devuelve una imagen.
Esto no es necesario, ya que la misma librería puede imprimir códigos de barras, como se ve en el siguiente ejemplo: https://github.com/mike42/escpos-php/blob/development/example/barcode.php
Si tu impresora no soporta la impresión de código de barras, pero sí puede imprimir imágenes, entonces recomiendo guardar la imagen en el directorio y luego imprimirla (como si fuera un logo) como se ve en este ejemplo: https://github.com/mike42/escpos-php/blob/development/example/graphics.php
Bueno mil gracias =) de todos modos lo intentare como me dice… =D
Ola una pregunta ami no me imprime el logo, como puedo hacer que se imprima un logo claro diferente al del ejemplo??? agradeceria mucho tu respues
Hola. Trata de que sea una imagen que no sea tan compleja, de preferencia en blanco y negro. Y que sea cuadrada. Prueba y comenta los resultados. Un saludo.
mil gracias ya me salio oye y una pregunta lo que pasa que no mando a imprimir los datos en el ticket y mando a llamar mis variables desde mi base de datos pero me los manda a traer juntos y kiero que me los separe es decir como pongo espacios entre variables
No entiendo bien el problema, pero recuerda que puedes concatenar. Por ejemplo…
$a = “Hola”;
$b = “Mundo”;
$mensaje = $a . ” ” . $b;
//Imprime ‘Hola Mundo’, con un espacio entre “Hola” y “Mundo”
http://php.net/manual/es/language.operators.string.php
Muchas gracias si de hecho ya lo intente asi mira: este es mi codigo.
$printer->text( “%”.$dato[‘descuento’].””.”$”.$dato[‘valor’].””.”$”.$dato[‘importe’].”\n”);
no se que esta mal. xq no me salen los espacios
Prueba con esto:
https://gist.github.com/parzibyte/6fd9db56d73d09ac70b8cab1e71c834d
Hola, excelente articulo muy bien explicado.
Sirve para cualquier impresora de tickets?
Necesitaba implementarlo para una aclas pp7 http://www.moretti.com.ar/productos_ficha.php?id=72
utilizando PHP, no se si alguno lo ha realizado o si es posible,
Y aprovecho a preguntar, conocen algun emulador windows para esta impresora ?
gracias.
Si puedes imprimir desde el panel de control, claro que se puede. Es decir, si desde el panel de control imprimes una página de prueba y sale, con PHP funcionará correctamente.
No conozco ningún emulador, supongo que es para que imprimas a algo así como un pdf sin imprimir físicamente, pero no he encontrado ninguno, lo que queda es probar directamente con la impresora.
Busca e instala sus drivers, con eso será suficiente. Un saludo.
Buenismo, si lo voy a tener que probar directamente con la impresora del cliente.
Te agradezco entonces y te felicito por la web y que estes atento a los comentarios.
saludos!
Hola parzibyte,me que tal tu post me funciono muy bien solo tenia alguna duda en cuanto al tamano de la letra como la puedo cambiar a uno mas grande :O saludos amigo
Existe un método llamado setTextSize. Aquí el link:
https://github.com/mike42/escpos-php#settextsizewidthmultiplier-heightmultiplier
Y aquí unos ejemplos:
https://github.com/mike42/escpos-php/blob/development/example/text-size.php
Prueba y cuéntanos qué tal. Un saludo.
Hola, quiero imprimir cantidad, precio y descripción en una sola línea, el problema es que quiero que la cantidad se justifique a la izquierda, la descripción al centro y el precio a la derecha, el problema es que quiero que todo salga en la misma línea, como lo resuelvo?
Gracias de antemano
Podrías hacerlo concatenando las cadenas y separándolas, pero no siempre te quedarían centradas. Igual y podrías implementar un algoritmo que mida las palabras, y dependiendo a ello agregue o quite espacios entre ellas para alinearlas como lo deseas
No tienes un ejemplo para jalar datos desde una base de datos como le podria hacer tengo modelos y controladores para traerme los datos productos cantidad y total ?
Hola, no tengo ningún ejemplo por el momento. Pero lo que quieres hacer es muy simple, llama al controlador encargado para que te dé lo que necesitas, luego simplemente incluyes al archivo que imprime y le pasas (por ejemplo) el arreglo que contendrá los productos.
Un saludo.
Hola… si deseo realizar la impresión desde una pc cliente(la impresora conectada a la pc cliente) , siendo que la impresora cliente y el servidor estan en la misma red, que configuración necesito realizar?
Hola, la impresora debe estar físicamente conectada al servidor en donde
esté corriendo PHP. Y para imprimir desde la pc cliente llamarías a la IP de la computadora que tiene conectada la impresora.
Suponiendo que el archivo se llama imprimir.php y la ip es 192.168.1.2 entonces sería algo como 192.168.1.2/imprimir.php
También puedes ver el otro tutorial en donde se imprime con Javascript. Un saludo.
Gracias por la respuesta.
Si realizo la impresión con javascript, como hago el corte de papel? para que no me salga un tamaño grande de papel en blanco?.
Esa es la gran desventaja de imprimir con Javascript, que no corta el papel automáticamente. Pero me parece que desde Windows, en el Panel de control > Impresoras hay una opción que permite ajustar márgenes, corte de papel, etcétera. Todo mientras tengas bien los drivers.
Hola Parzibyte,
En primer lugar agraecer el tiempo que dedicas a la labor de enseñar y por otro lado tengo una pregunta que hacerte.
Resulta que los pedidos llegan por email al cliente y a mi me gustaría que conforme reciba el pedido se imprima en una impresora de tiquets.
El primer problema es que lo que se recibe es html y estas impresoras no imprimen tal cosa.
Siempre el pedido se recibe por email, por lo que debería recibir un texto plano para que saliese por la impresora a través de outlook (es la única forma que encontré de que se imprimiera automáticamente y sin intervención)
Hay alguna forma de que se pudiera recibir el pedido que no fuese por email y usando el código que muestras? o es más fácil cambiar el código del php que tengo para que se envíe un email plano y entonces que lo imprima la impresora POS?
o…¿cómo lo harías tú?
Gracias y un saludo
Qué tal, saludos.
Hay que partir el problema en trozos pequeños para solucionarlos por separado. Comencemos por el correo que se recibe en HTML, podemos usar strip_tags para obtener el texto puro.
Veamos ahora el segundo problema, que es cómo hacerle saber a PHP que un correo fue recibido. Para esto, podemos ver este post (que escucha cuando un correo es recibido) https://evolt.org/incoming_mail_and_php aunque se me hace un poco complicado.
Pero si yo estuviera en su lugar, en el correo pondría un link. Es decir, el cuerpo del correo sería algo así:
Hola, usted ha recibido un nuevo pedido de bla bla bla bla
Haga click aquí para imprimirlo
Y en el link, poner algo como localhost/ticket.php?texto=todo_el_texto_del_pedido_que_desees_imprimir
De esta manera no será tan automático pero no le cuesta nada al usuario hacer click en un link. Prueba y comenta aquí si pasa algo.
hola, como se hace para poder imprimir desde el servidor Web. local me funciona bien pero al subir el proyecto e intentar imprimir, sale este error;
No se pudo imprimir en esta impresora: Error al imprimir. Mando “smbclient ‘//sip.llamandoando.com/SAT’ -c ‘print -‘ -N” falló con el código de salida 127: sh: smbclient: command not found
No se puede imprimir desde un servidor web porque se imprime del lado del servidor, no del cliente. Si quieres aprender a hacerlo desde la web usa javascript, ya hice otro post explicando el proceso
cual es ese post en elc ual enseñas a imprimir desde javascript en una ticktera o impresora termica. Muchas gracias por el aporte
Hola, es este: https://parzibyte.me/blog/2017/10/17/imprimir-ticket-en-impresora-termica-usando-javascript/
Un saludo
Hola, hay una efectiva para imprimir sin que te salga cuadro de diálogo de impresión; lo probé con una función JS diseñada en un proyecto para imprimir recibos de venta y funciona en FireFox
Debería funcionar con PHP también, ya que igualmente el documento de impresión generado es .HTML.
Hola, qué tal. Claro, funciona, pero tienes que activar algunas funciones especiales del navegador. Y si de eso se trata, podemos embeber la app en Electron o en algo similar en donde tengamos más control nativo.
Lo que esto busca es ser compatible con la mayoría de navegadores sin modificar nada de ellos, tanto por la seguridad como por la comodidad del usuario.
Un saludo.
Reciba un cordial saludo, estoy siguiendo los pasos tal y como están en este manual y me sale el siguiente error:
Parse error: syntax error, unexpected T_STRING, expecting T_CONSTANT_ENCAPSED_STRING or ‘(‘ in C:\AppServ\www\probarticket\index.php on line 3
estas son las primeras lineas, la linea 3 seria el primer use
<?PHP
require __DIR__ . '/ticket/autoload.php'; //Nota: si renombraste la carpeta a algo diferente de "ticket" cambia el nombre en esta línea
use Mike42\Escpos\Printer;
use Mike42\Escpos\EscposImage;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
Ya lo solucione, era la versión del PHP no me había fijado y estaba trabajando con una versión vieja, la actualice y listo funciono bien. Muchas gracias por el aporte.
Ahora mi problema es ponerlo a funcionar en un servidor dedicado, me funciono localmente pero en la web no me funciono? necesito algo adicional para que funcione en la web, en el navegador del cliente
Hola, qué tal. Me da gusto que te haya funcionado. Respondiendo a tu duda: no se puede imprimir desde un servidor web, porque la impresora debe estar físicamente conectada a la computadora. Si es en localhost, perfecto. Pero si es un servidor web que, supongamos está en NY, no puedes ir hasta allá y conectar la impresora. Y aunque pudieras, la impresión saldría allá.
Por eso este tutorial explica cómo hacerlo desde PHP. En cambio si lo quieres hacer desde el lado del cliente puedes hacerlo con Javascript: https://parzibyte.me/blog/2017/10/17/imprimir-ticket-en-impresora-termica-usando-javascript/
Me funciona perfectamente la impresion el unico detalle que tengo es que no me imprime el logo me salen caracteres extraños tengo instalado el imagick.
Hola, qué tal.
A veces pasa porque la imagen es transparente. Prueba quitándole la transparencia si es que es una PNG. Por otro lado, asegúrate de que la imagen mida 400 px de ancho y de alto.
Tuve el mismo problema que tú y redimensionando la imagen funciona. Prueba y cuéntanos. Un saludo.
hola amigo lograste imprimir la imagen??
Hola tengo un problema, me sale este error,
Fatal error: Uncaught exception ‘Exception’ with message ‘Failed to print. Command “smbclient ‘//ayala.digital/POS-58’ -c ‘print -‘ -N” failed with exit code 127: sh: 1: smbclient: not found’ in /websitesData/tlalisoft/httpdocs2/_assets/ticket/src/Mike42/Escpos/PrintConnectors/WindowsPrintConnector.php:230 Stack trace: #0 /websitesData/tlalisoft/httpdocs2/_assets/ticket/src/Mike42/Escpos/PrintConnectors/WindowsPrintConnector.php(175): Mike42\Escpos\PrintConnectors\WindowsPrintConnector->finalizeLinux(‘\e@\ea\x01CasaMia\nAy…’) #1 /websitesData/tlalisoft/httpdocs2/_assets/ticket/src/Mike42/Escpos/Printer.php(503): Mike42\Escpos\PrintConnectors\WindowsPrintConnector->finalize() #2 /websitesData/tlalisoft/httpdocs2/sales.php(22): Mike42\Escpos\Printer->close() #3 {main} thrown in /websitesData/tlalisoft/httpdocs2/_assets/ticket/src/Mike42/Escpos/PrintConnectors/WindowsPrintConnector.php on line 230
En un servidor local si me imprime, pero cuando quiero hacerlo desde un servidor web me tira ese error, sabres que podria ser?
Hola. La impresora debe estar conectada físicamente al servidor. Si es un servidor web dudo que la puedas conectar físicamente
Hola! Cuando trato de imprimir la imagen de logo me sale puros codigos , e usado formato jpeg y png y nada no logro imprimir el logo 🙁
Puedes ayudarme, a mi me sale lo siguiente:
Warning: copy(\\DESKTOP-LAB59OB\POS-58): failed to open stream: No such file or directory in C:\xampp\htdocs\probarticket\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php on line 372
Fatal error: Uncaught exception ‘Exception’ with message ‘Failed to copy file to printer’ in C:\xampp\htdocs\probarticket\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php:291 Stack trace: #0 C:\xampp\htdocs\probarticket\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php(173): Mike42\Escpos\PrintConnectors\WindowsPrintConnector->finalizeWin(‘\e@Hola mundo\n\x1DV…’) #1 C:\xampp\htdocs\probarticket\ticket\src\Mike42\Escpos\Printer.php(503): Mike42\Escpos\PrintConnectors\WindowsPrintConnector->finalize() #2 C:\xampp\htdocs\probarticket\ticket.php(64): Mike42\Escpos\Printer->close() #3 {main} thrown in C:\xampp\htdocs\probarticket\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php on line 291
Hola. Mi impresora es del mismo modelo que la tuya, e imprime de maravilla. Seguramente no la has compartido desde el panel de control de Windows. Prueba y me dices qué tal.
Un saludo.
Tendras un ejemplo similar sobre Web Socket ?
Hola, estoy usando este proceso con una impresora Dymo 450 por USB(He probado diferentes impresoras que sean por medio de WIFI y funcionan bien), pero leyendo bien la documentacion me dio por probar con los comandos, y en la cola de impresion se queda imprimiendo y no aparece nada mas (Documento local de bajo nivel):
* net use “\\mi-pc\DYMO450Turbo”
* copy testfile “\\mi-pc\DYMO450Turbo”
* del testfile
1. Está compartida
2. Usb no funciona
3. Cambié el puerto a COM1 y LPT1 y al menos manda algo a la cola de impresion
Sabes a que se puede deber esto?
Si no imprime desde Panel de control > Impresoras > Imprimir página de prueba entonces el problema es entre la impresora y Windows
Ella funciona realmente, desde el software de la Dymo y tambien desde la impresion de prueba.
Entonces puede que no esté soportada por la librería. Pero si imprime desde la impresión de prueba, puedes probar con este post: https://parzibyte.me/blog/2017/10/17/imprimir-ticket-en-impresora-termica-usando-javascript/
Ahí puedes imprimir sin necesidad de PHP, porque la impresión se realiza a través del sistema.
Un saludo.
Si, es verdad, de hecho mi sistema funciona con el metodo window.print(); pero el problema radica en que no tengo control de si se imprimio o no el documento, y requiero saberlo para tener un mayor control de ello. Si puedes ayudarme ahi, gracias!
Hola. Me parece que no existe (o no lo he descubierto) un método para saber a ciencia cierta si la impresión se hizo correctamente o no, y tampoco se puede saber con la librería ni el método que mencionas.
Es que lo que trato de implementar es que al momento de que realice el registro se imprima, entonces no tener opcion de cancelar la impresion. Por eso he llegado hasta acá, tratar imprimir desde PHP
Ya veo. Pero las impresiones siempre pasarán por la cola de impresiones de Windows. Podrías buscar una forma de deshabilitar la cola (para que el usuario no la abra), pero aunque la encuentres, el usuario podría apagar la impresora o quitar el suministro de energía. Por eso te digo que no hay una manera 100 % confiable de saberlo.
Otra cosa que se me ocurre es guardar un registro en una base de datos de cada vez que se imprima, y al final compararla con las impresiones que se hicieron al día; o algo así. Desconozco de qué se trata tu software, pero podrías pensar en varias maneras de comprobarlo en lugar de verificar la impresión.
Si, de hecho eso es lo que debo de realizar, una comparacion entre el registro y la impresion, pero no tengo la forma de saber la segunda.
Mi software, registra los datos de una persona y lo que hace es arrojar una etiqueta desde la impresora con los datos de la persona, pero, mi sistema debe de estar ligado si o si al registro, no puede cancelar la impresion, o si se cancela debo de tener un registro de ello, pero hay una gran barrera con esta impresora.
Agrega un botón o algo que le pregunte al usuario si su etiqueta salió correctamente, jaja. Si pone que no, entonces la imprimes de nuevo, de lo contrario, no haces nada. Eso es lo único que se me ocurre, aunque supone que el usuario no es malicioso.
Holaaaa amigooo nesecito ayuda por favorrr 🙁 me sale este error de codigo
https://gist.github.com/parzibyte/f41a810e369dba376e164b9e275b2527
Hola! Ya esta solucionado!! Solo era compartir la impresora y listo se soluciono !!Gracias por el tuto !!! Eres lo maximoooo!!! SALUDOS DESDE PERÚ!!
Hola, me da gusto que haya servido.
Resaltaré la parte en donde dice que hay que compartir la impresora jaja. Un saludo.
No sabia que había que compartir la impresora… al compartirla funciono … muchas gracias…
En los comentarios del código está la indicación, pero igual no pasa nada. Me da gusto que se haya solucionado 🙂
Hola,
La impresion se realiza automaticamente o desde un boton, necesito un ejemplo asi pero que imprima automaticamente al registrar la venta en la base de datos.
La impresión se realiza cuando invocas el archivo php. Es decir, cuando te diriges a localhost/imprimir.php (o en donde sea que reside tu archivo). Puedes llamarlo con un botón usando AJAX, abrir una nueva ventana con esa ruta, o lo que tú creas más conveniente.
Buen día,
estoy usando una impresora de ticket DYMO LabelWriter 450 Turbo, que se conecta por puerto usb,
pero a la hora de imprimir, no sale nada, ni genera error.
¿este sistema funciona con este tipo de impresoras?
Hola, buenos días. Si estás usando Windows deberías probar desde el panel de control > Impresoras y luego imprimir una página de prueba. Si se imprime, entonces también funcionará en php. Si no, tienes que verificar los drivers e instalación de la impresora. Normalmente se deben instalar como genéricas.
Hola Edisson, yo estoy usando la misma impresora y requiero usar esta libreria para imprimir desde el servidor, has encontrado alguna solucion para hacer compatible con el puerto USB, mi error:
https://gist.github.com/parzibyte/be22697941c3694c6a0153f68bfaf32f
Ya pude solucionar el error, habia un problema con el nombre de la impresora, y por ende no la reconocía. Pero, me ocurre lo mismo que a usted…
Excelente articulo me ha servido para lo que necesitaba. Gracias
Hola que tal? oye se puede mandar a imprimir varias veces los ticket al mismo tiempo? realizando un corte por cada registro?
Claro que sí. Se puede crear una función llamada imprimir_ticket o algo así, que encierre todo el proceso que se hace. Y la puedes mandar a llamar en un ciclo for, en un foreach, o como tú gustes.
hay q agregar en el archivo app.php los providers? me da un error “” ayudame por favor.
Hola. ¿Qué error exactamente te da? ¿Podrías pegarlo aquí en la caja de comentarios?
estoy trabajando con laravel. este error
https://gist.github.com/parzibyte/22a98ad066eee9a537b835e3d1fd6cd1
El error que te arroja es porque no encuentra el archivo en la ruta que le estás indicando. Revisa bien tus rutas para ver si el archivo realmente se encuentra en https://gist.github.com/parzibyte/3c185601ac3d58a6b6efa759950a46b4