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

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.

Relacionado:  Axios y PHP: ejemplos de peticiones AJAX

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:

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

 

 

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.


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 768 suscriptores

Relacionado:  Obtener lista de impresoras en Windows usando PHP


parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

224 Comments

Melissa Montoya · junio 22, 2020 a las 10:18 pm

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 😔

Francisco · junio 9, 2020 a las 2:25 pm

Hola, habra alguna forma de poder imprimir a una que es bluetooth con esta libreria?

    parzibyte · junio 9, 2020 a las 4:07 pm

    Hola. No. Por el momento solo imprime a impresoras conectadas por USB

Francisco Javier · mayo 2, 2020 a las 4:37 am

Buenas tardes yo tengo subido mi proyecto a un servidor en internet como puedo imprimir en la impresora que este conectada a mi ordenador?

Ciro · abril 29, 2020 a las 3:06 am

No me sirvió tu código, no entiendo como ejecutarlo y no existe el archivo autoload.

Azael · marzo 18, 2020 a las 1:40 pm

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

    parzibyte · marzo 18, 2020 a las 1:47 pm

    Hola, nunca me ha sucedido eso. Intenta cambiando el puerto y reinstalando los controladores.
    Saludos 🙂

karolina · enero 24, 2020 a las 7:45 pm

Hola saludos, felicidades por el proyecto, pero no logro ubicar el archivo autoload.php.

Rz · diciembre 28, 2019 a las 7:58 am

Ya lo tengo Gracias hare unas pruebas

lesmes leiton · diciembre 8, 2019 a las 10:46 pm

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

    parzibyte · diciembre 9, 2019 a las 1:17 pm

    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.

    Lesmes Leiton · diciembre 9, 2019 a las 2:20 pm

    PHP 7.3.8

    parzibyte · diciembre 9, 2019 a las 4:50 pm

    Extensión php-intl
    https://github.com/mike42/escpos-php/issues/824

    lesmes leiton · diciembre 9, 2019 a las 6:18 pm

    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?

    parzibyte · diciembre 9, 2019 a las 7:24 pm

    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/

    Lesmes Leitón Fuentes · diciembre 10, 2019 a las 10:50 pm

    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.

    parzibyte · diciembre 11, 2019 a las 8:47 am

    Me da gusto que haya funcionado. No olvides seguirme y compartir 🙂
    Saludos

    Rz · diciembre 27, 2019 a las 7:16 pm

    Hola, descargue el archivo en zip y no encuentro el autoload.php, donde lo encuentro

    parzibyte · diciembre 27, 2019 a las 9:45 pm

    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

Fernando · noviembre 25, 2019 a las 2:24 pm

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

    parzibyte · noviembre 25, 2019 a las 2:28 pm

    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.

Fernando · noviembre 25, 2019 a las 9:14 am

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!

Andrés · noviembre 8, 2019 a las 11:56 am

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

    parzibyte · noviembre 8, 2019 a las 12:24 pm

    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/

Guillermo · septiembre 28, 2019 a las 4:39 pm

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?

    parzibyte · septiembre 28, 2019 a las 7:32 pm

    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

Carlos · septiembre 27, 2019 a las 11:19 am

Alguien ya pudo imprimir desde hosting?

Daniel · septiembre 27, 2019 a las 11:18 am

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

Carlos · septiembre 5, 2019 a las 10:07 am

Se puede usar cualquier modelo de impresora térmica o solo modelos en específico?

    parzibyte · septiembre 5, 2019 a las 10:12 am

    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

miguel · agosto 28, 2019 a las 8:36 am

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

    parzibyte · agosto 28, 2019 a las 9:59 am

    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

Martin Garcia · abril 12, 2019 a las 10:17 am

Hola pero esta librería imprime pero con la impresora conectada al servidor, no funciona con la impresora conectada a una estación?

    parzibyte · abril 12, 2019 a las 12:57 pm

    Hola. Mira este post.

    axel · septiembre 30, 2019 a las 1:58 am

    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.

Rob · abril 3, 2019 a las 8:25 am

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?

    parzibyte · abril 3, 2019 a las 10:58 am

    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

    Rob · abril 3, 2019 a las 11:05 am

    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?

    parzibyte · abril 3, 2019 a las 11:15 am

    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

    alex · septiembre 30, 2019 a las 2:02 am

    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.

andres · marzo 22, 2019 a las 9:27 pm

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!!!!

    parzibyte · marzo 22, 2019 a las 9:37 pm

    Me parece que no lo soporta, lo he intentado con la mía y tampoco lo hace, eso es porque son muy básicas

Mario Canto · febrero 9, 2019 a las 2:53 pm

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.

    parzibyte · febrero 9, 2019 a las 3:09 pm

    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

Layra Liu · enero 10, 2019 a las 6:25 am

Hola quisiera preguntar como a qué funcion llamo en le boton imprimir para que me imprima, por ejemplo ?

    parzibyte · enero 10, 2019 a las 9:43 am

    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

    layra · enero 10, 2019 a las 11:26 am

    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

    parzibyte · enero 10, 2019 a las 11:41 am

    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 Imprimir 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 y window.open, de este modo podrías cerrar la pestaña automáticamente (llamando a window.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.

    layra · enero 11, 2019 a las 4:36 am

    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?

    parzibyte · enero 11, 2019 a las 9:14 am

    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 🙂

Anthony · diciembre 7, 2018 a las 4:44 pm

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.

    parzibyte · diciembre 7, 2018 a las 4:56 pm

    Hola. Comparte el código que estás implementando para que el problema sea más fácil de entender

    Anthony · diciembre 7, 2018 a las 5:05 pm

    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.

    parzibyte · diciembre 10, 2018 a las 8:58 am

    ¿Podrías mostrarme el fragmento en donde estás creando a $printer?

dantes · noviembre 23, 2018 a las 2:14 pm

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

    parzibyte · noviembre 23, 2018 a las 8:26 pm

    Sí, con JavaScript

RODrigo · noviembre 13, 2018 a las 11:14 am

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!!!

    parzibyte · noviembre 13, 2018 a las 11:25 am

    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.

    Rodrigo · noviembre 20, 2018 a las 10:13 am

    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

    parzibyte · noviembre 20, 2018 a las 10:37 am

    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.

juan · octubre 26, 2018 a las 10:48 am

hola tu sabes cómo puedeo imprimir desde mi servidor en la nube gracias

    parzibyte · octubre 26, 2018 a las 12:06 pm

    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

Juan · octubre 22, 2018 a las 7:14 pm

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

    parzibyte · octubre 22, 2018 a las 7:43 pm

    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

Roberto · octubre 16, 2018 a las 8:49 pm

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

    parzibyte · octubre 16, 2018 a las 9:50 pm

    Parece que no has compartido la impresora. Prueba compartiéndola y cambiándole el nombre

Gabriel · octubre 14, 2018 a las 8:41 am

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

    parzibyte · octubre 15, 2018 a las 10:23 am

    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 🙂

    Gabriel · octubre 16, 2018 a las 5:10 pm

    Probare con otra impresora y a su vez tambien lo intentare con todo offline a ver si funciona. Gracias por todo

Antonio Hernandez · septiembre 27, 2018 a las 4:41 pm

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

    parzibyte · septiembre 27, 2018 a las 6:35 pm

    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.

felipe · septiembre 26, 2018 a las 11:11 am

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

    parzibyte · septiembre 26, 2018 a las 11:43 am

    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

    felipe · septiembre 26, 2018 a las 3:03 pm

    si lo vi, estoy trabajando con el , pero sin ningun resultado,, gracias por responder

    parzibyte · septiembre 26, 2018 a las 4:01 pm

    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 🙂

    felipe · septiembre 26, 2018 a las 4:06 pm

    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

Federico · septiembre 19, 2018 a las 3:58 pm

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();

    parzibyte · septiembre 19, 2018 a las 4:12 pm

    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.

RICARDO SALAZAR ESTRELLA · septiembre 14, 2018 a las 1:15 pm

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.

    parzibyte · septiembre 14, 2018 a las 2:00 pm

    Me da gusto ayudar. Te invito a suscribirte a mi blog en la barra superior derecha.

Leonardo · septiembre 11, 2018 a las 9:05 am

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.

    parzibyte · septiembre 11, 2018 a las 9:09 am

    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

EMMANUEL GARCIA ESCOBEDO · septiembre 8, 2018 a las 5:12 pm

y si la impresora esta en en varios lugares , y mi sistema no esta en local ,me refiero a una intranet esto funciona ?

    parzibyte · septiembre 9, 2018 a las 7:36 pm

    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

Mauro Echeverría · agosto 15, 2018 a las 11:08 am

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

    Gianca · octubre 15, 2018 a las 11:09 pm

    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

    parzibyte · octubre 15, 2018 a las 11:11 pm

    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

    Giancarlo · octubre 15, 2018 a las 11:12 pm

    Hola , tu crees que puedas compartirme tu código ?

    parzibyte · octubre 16, 2018 a las 4:03 pm

    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/

    Jhon · enero 24, 2019 a las 2:28 pm

    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?

    Giancarlo Bautista · marzo 8, 2019 a las 4:52 pm

    Hola
    Mauro Echeverría , podrias compartir tu codigo mas completo para poder entenderlo , ayudarías mucho con ese aporte, espero tu respuesta , gracias

Pablo Jucys · agosto 9, 2018 a las 2:40 pm

Muy util!!, ya lo he hecho, me gustaria saber de como se obtiene el estado de papel de impresion termica

    parzibyte · agosto 9, 2018 a las 4:07 pm

    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.

JUAN · julio 30, 2018 a las 9:14 pm

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

    parzibyte · julio 30, 2018 a las 9:28 pm

    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.

Christian Felipe Castrillon · julio 30, 2018 a las 5:59 pm

siempre me sale un error al llamar el archivo require __DIR__ . ‘/ticket/autoload.php’;

Al implementarlo con laravel , cambia la configuracion inicial ?

    parzibyte · julio 30, 2018 a las 6:23 pm

    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.

Alexandre · julio 30, 2018 a las 8:51 am

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.

    parzibyte · julio 30, 2018 a las 9:16 am

    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.

    Alexandre · julio 30, 2018 a las 9:23 am

    Muchas Gracias!!

Alfredo Ramirez · julio 24, 2018 a las 9:05 am

Al parecer muy buena librería, pero únicamente funciona en un servidor local supongo.?

Misae · julio 15, 2018 a las 8:54 pm

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

    parzibyte · julio 15, 2018 a las 9:05 pm

    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

Saul · julio 13, 2018 a las 1:15 pm

Hola.’
Funciona con cualquier impresora térmica o debe de ser algunas en especifico ?

    parzibyte · julio 13, 2018 a las 1:53 pm

    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.

cokobless · julio 9, 2018 a las 11:01 am

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!

    parzibyte · julio 9, 2018 a las 12:58 pm

    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 –

Nicolas Stagno · junio 28, 2018 a las 7:58 pm

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

Alexandre · junio 18, 2018 a las 8:40 am

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;

    parzibyte · junio 18, 2018 a las 9:17 am

    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

    Alexandre · junio 18, 2018 a las 5:38 pm

    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

    parzibyte · junio 18, 2018 a las 5:50 pm

    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.

    Alexandre · junio 18, 2018 a las 6:04 pm

    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”

    parzibyte · junio 18, 2018 a las 6:25 pm

    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”;

    Alexandre · junio 18, 2018 a las 6:31 pm

    el “autoload.php” esta en la carpeta “escpos” y no dentro de la “src”
    sigue imagen:
    http://www.jsinfoweb.com.br/tela002.jpg

    parzibyte · junio 18, 2018 a las 7:04 pm

    Ahora muestra una captura del directorio en donde se encuentra relprint.php

    Alexandre · junio 19, 2018 a las 6:57 am

    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.

    parzibyte · junio 19, 2018 a las 2:01 pm

    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.

    Alexandre · junio 19, 2018 a las 2:04 pm

    Perfecto amigo! Lo voy a probar el JAVA y te comento como fue. Y muchas gracias por su atención!

JORGE A SARRIA · junio 17, 2018 a las 9:20 pm

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

    parzibyte · junio 18, 2018 a las 9:22 am

    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

    JORGE A SARRIA · junio 18, 2018 a las 9:38 am

    Mil gracias, usare Linux, que es sistema operacional de mi servidor

Angel Patre · junio 12, 2018 a las 4:26 pm

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!

    parzibyte · junio 12, 2018 a las 4:44 pm

    Sí, es necesario tener imagick o gd, como se ve aquí: https://github.com/mike42/escpos-php#requirements
    Citando al autor:

    It is also suggested that you install either imagick or gd, so that you can print images.

    Angel Patre · junio 12, 2018 a las 5:45 pm

    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.

    parzibyte · junio 12, 2018 a las 5:47 pm

    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

    Angel Patre · junio 12, 2018 a las 6:11 pm

    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,

    parzibyte · junio 12, 2018 a las 6:17 pm

    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?

    Angel Patre · junio 12, 2018 a las 7:18 pm

    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.

    parzibyte · junio 12, 2018 a las 7:53 pm

    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.

    Angel Patre · junio 12, 2018 a las 8:00 pm

    https://i.imgur.com/WbnXJ69.jpg

    En el enlace que comentaste anteriormente veo un connector diferente, tiene algo que ver?

    parzibyte · junio 12, 2018 a las 8:02 pm

    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”

    Angel Patre · junio 12, 2018 a las 8:13 pm

    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!!

    parzibyte · junio 12, 2018 a las 8:16 pm

    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

    Angel Patre · junio 12, 2018 a las 8:43 pm

    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!

APatre · junio 12, 2018 a las 2:54 pm

Que tal, es necesario tener instalado Imagik para poder hacer la impresion del logotipo??

Gracias por tan buen aporte y saludos!

    parzibyte · junio 12, 2018 a las 3:41 pm

    Sí, debe estar habilitada dicha extensión.
    Saludos.

Bairon Imbacuan · mayo 27, 2018 a las 7:16 am

que inpresoras termicas soporta la biblioteca

    parzibyte · mayo 27, 2018 a las 9:15 am

    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)

pili · mayo 2, 2018 a las 4:33 pm

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…

    parzibyte · mayo 2, 2018 a las 6:54 pm

    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.

Alfredo · abril 14, 2018 a las 12:11 pm

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

    parzibyte · abril 14, 2018 a las 3:55 pm

    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

ezequiel · abril 12, 2018 a las 5:11 pm

gracias

pili · abril 11, 2018 a las 1:42 pm

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

    parzibyte · abril 11, 2018 a las 4:42 pm

    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

    pili · abril 12, 2018 a las 10:13 am

    Bueno mil gracias =) de todos modos lo intentare como me dice… =D

pili · abril 4, 2018 a las 11:20 am

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

    parzibyte · abril 4, 2018 a las 11:44 am

    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.

    pili · abril 6, 2018 a las 11:12 am

    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

    parzibyte · abril 6, 2018 a las 11:18 am

    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

    pili · abril 6, 2018 a las 11:49 am

    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

    parzibyte · abril 6, 2018 a las 1:29 pm

    Prueba con esto:
    https://gist.github.com/parzibyte/6fd9db56d73d09ac70b8cab1e71c834d

franco · marzo 26, 2018 a las 7:43 am

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.

    parzibyte · marzo 26, 2018 a las 10:51 am

    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.

    franco · marzo 26, 2018 a las 1:21 pm

    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!

jose · marzo 23, 2018 a las 11:35 am

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

Alonso · marzo 22, 2018 a las 7:19 pm

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

    parzibyte · marzo 22, 2018 a las 10:29 pm

    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

Ricardo · marzo 7, 2018 a las 10:13 am

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 ?

    parzibyte · marzo 7, 2018 a las 1:23 pm

    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.

Noe Andreita · febrero 19, 2018 a las 2:40 pm

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?

    parzibyte · febrero 19, 2018 a las 4:01 pm

    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.

    Noe Andreita · febrero 19, 2018 a las 5:29 pm

    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?.

    parzibyte · febrero 19, 2018 a las 11:59 pm

    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.

ulises · febrero 18, 2018 a las 12:03 pm

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

    parzibyte · febrero 19, 2018 a las 9:50 am

    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.

Edian Galera · diciembre 23, 2017 a las 9:22 am

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

    parzibyte · diciembre 23, 2017 a las 8:02 pm

    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

    lewis valenzuela · enero 24, 2018 a las 6:52 am

    cual es ese post en elc ual enseñas a imprimir desde javascript en una ticktera o impresora termica. Muchas gracias por el aporte

    parzibyte · enero 24, 2018 a las 8:20 am

    Hola, es este: https://parzibyte.me/blog/2017/10/17/imprimir-ticket-en-impresora-termica-usando-javascript/
    Un saludo

    c3media · diciembre 31, 2017 a las 5:13 pm

    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.

    parzibyte · enero 1, 2018 a las 3:21 am

    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.

Gustavo Alzate · diciembre 22, 2017 a las 2:50 pm

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;

    Gustavo Alzate · diciembre 22, 2017 a las 3:32 pm

    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.

    Gustavo Alzate · diciembre 22, 2017 a las 3:55 pm

    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

    parzibyte · diciembre 22, 2017 a las 5:21 pm

    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/

Carlos · diciembre 18, 2017 a las 11:32 pm

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.

    parzibyte · diciembre 19, 2017 a las 10:42 am

    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.

Ricardo · diciembre 13, 2017 a las 12:29 pm

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?

    parzibyte · diciembre 13, 2017 a las 2:17 pm

    Hola. La impresora debe estar conectada físicamente al servidor. Si es un servidor web dudo que la puedas conectar físicamente

Giancarlo · noviembre 29, 2017 a las 11:51 pm

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 🙁

Ignacio · noviembre 22, 2017 a las 9:33 pm

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

    parzibyte · noviembre 22, 2017 a las 9:38 pm

    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.

Giancarlo · noviembre 22, 2017 a las 4:09 pm

Tendras un ejemplo similar sobre Web Socket ?

Kaleh · noviembre 22, 2017 a las 10:15 am

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?

    parzibyte · noviembre 22, 2017 a las 11:46 am

    Si no imprime desde Panel de control > Impresoras > Imprimir página de prueba entonces el problema es entre la impresora y Windows

    Kaleh · noviembre 22, 2017 a las 1:24 pm

    Ella funciona realmente, desde el software de la Dymo y tambien desde la impresion de prueba.

    parzibyte · noviembre 22, 2017 a las 3:49 pm

    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.

    Kaleh · noviembre 23, 2017 a las 8:30 am

    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!

    parzibyte · noviembre 23, 2017 a las 9:15 am

    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.

    Kaleh · noviembre 23, 2017 a las 9:24 am

    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

    parzibyte · noviembre 23, 2017 a las 9:28 am

    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.

    Kaleh · noviembre 23, 2017 a las 9:34 am

    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.

    Kaleh · noviembre 23, 2017 a las 10:11 am

    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.

    parzibyte · noviembre 23, 2017 a las 11:37 am

    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.

Giancarlo · noviembre 21, 2017 a las 6:59 pm

Holaaaa amigooo nesecito ayuda por favorrr 🙁 me sale este error de codigo

https://gist.github.com/parzibyte/f41a810e369dba376e164b9e275b2527

    Giancarlo · noviembre 21, 2017 a las 7:28 pm

    Hola! Ya esta solucionado!! Solo era compartir la impresora y listo se soluciono !!Gracias por el tuto !!! Eres lo maximoooo!!! SALUDOS DESDE PERÚ!!

    parzibyte · noviembre 21, 2017 a las 8:06 pm

    Hola, me da gusto que haya servido.
    Resaltaré la parte en donde dice que hay que compartir la impresora jaja. Un saludo.

    Henry · octubre 18, 2018 a las 10:32 am

    No sabia que había que compartir la impresora… al compartirla funciono … muchas gracias…

    parzibyte · octubre 18, 2018 a las 10:48 am

    En los comentarios del código está la indicación, pero igual no pasa nada. Me da gusto que se haya solucionado 🙂

C3media · noviembre 20, 2017 a las 5:00 pm

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.

    parzibyte · noviembre 20, 2017 a las 5:38 pm

    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.

Edisson Alzate Palacio · noviembre 10, 2017 a las 11:11 am

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?

    parzibyte · noviembre 10, 2017 a las 12:35 pm

    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.

    Johan · noviembre 17, 2017 a las 9:38 am

    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

    Johan · noviembre 17, 2017 a las 10:25 am

    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…

Diego Chizavo · octubre 30, 2017 a las 1:28 pm

Excelente articulo me ha servido para lo que necesitaba. Gracias

Keli Zorrilla · octubre 9, 2017 a las 8:37 pm

Hola que tal? oye se puede mandar a imprimir varias veces los ticket al mismo tiempo? realizando un corte por cada registro?

    parzibyte · octubre 9, 2017 a las 9:17 pm

    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.

    jose · octubre 16, 2017 a las 3:12 pm

    hay q agregar en el archivo app.php los providers? me da un error “” ayudame por favor.

    parzibyte · octubre 16, 2017 a las 4:20 pm

    Hola. ¿Qué error exactamente te da? ¿Podrías pegarlo aquí en la caja de comentarios?

    jose · octubre 16, 2017 a las 9:13 pm

    estoy trabajando con laravel. este error
    https://gist.github.com/parzibyte/22a98ad066eee9a537b835e3d1fd6cd1

    parzibyte · octubre 17, 2017 a las 9:29 am

    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

Imprimir ticket en impresora térmica usando Javascript - Parzibyte's blog · agosto 15, 2018 a las 11:37 am

[…] escribí un tutorial sobre cómo imprimir un ticket en una impresora térmica usando PHP. Veamos entonces cómo podemos imprimir ticket en impresora térmica usando […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: