Parzibyte's blog

Blog de conocimiento gratuito: linux, programación, open source, bases de datos, android, frameworks, web e informática en general.

Imprimir ticket en impresora térmica desde PHP

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.

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.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.


250 pensamientos en "Imprimir ticket en impresora térmica desde PHP"

    fredy dice:

    Hola me podrias ayudar, e puesto el codigo pero me sale Esta pagina no funciona y el error HTTP ERROR 500

    alexis barrios dice:

    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

    parzibyte dice:

    Hola. Claro, por favor vaya a https://parzibyte.me/#contacto para atenderle
    Saludos!

    Juan de Dios dice:

    Me funciona perfecto cuando lo uso en local, pero cuando lo subo al servidor, me sale error 500, a que se debe?

    parzibyte dice:

    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/

    Fran dice:

    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

    Carlos dice:

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

    parzibyte dice:

    Si tiene alguna solicitud puede hacérmela llegar en https://parzibyte.me/#contacto

    Rudy Palma dice:

    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.

    César dice:

    Tengo el mismo problema Rudy puedes ser mas especificó por favor para solucionar el mismo problema>

    FIDEL dice:

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

    parzibyte dice:

    Sí. Debe imprimir del lado del cliente

    Oscaani dice:

    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

    parzibyte dice:

    Imprima 2 veces y ya

    Oscaani dice:

    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.

    parzibyte dice:

    Recuerde que la impresora debe estar conectada físicamente a la computadora en donde está el servidor de PHP y Apache

    jamilton dice:

    no consigo que imprima el logo, solo imprime la factura, que puedo hacer, gracias.

    Jamilton dice:

    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

    parzibyte dice:

    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!

    Alam SilBa dice:

    Buenas tardes como podria cambiar el tamaño y el tipo de fuente de los textos que se imprimen en el ticket.

    ACH dice:

    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?

    ClaraG dice:

    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

    parzibyte dice:

    Le recomiendo actualizar a la última versión de PHP. De hecho la más reciente es la 8

    Melissa Montoya dice:

    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 dice:

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

    parzibyte dice:

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

    Francisco Javier dice:

    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 dice:

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

    Azael dice:

    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 dice:

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

    David dice:

    Azael, a mi me pasa lo mismo ¿pudiste resolverlo?

    karolina dice:

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

    parzibyte dice:

    Hola, puede obtener el autoload y src de mi repo en GitHub: https://github.com/parzibyte/imprimir_ticket_php
    Saludos 🙂

    Rz dice:

    Ya lo tengo Gracias hare unas pruebas

    lesmes leiton dice:

    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 dice:

    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 dice:

    PHP 7.3.8

    lesmes leiton dice:

    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 dice:

    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 dice:

    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 dice:

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

    Rz dice:

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

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

    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!

    parzibyte dice:

    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 🙂

    Andrés dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    Alguien ya pudo imprimir desde hosting?

    parzibyte dice:

    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/

    Daniel dice:

    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

    parzibyte dice:

    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

    Carlos dice:

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

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

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

    axel dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

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

    parzibyte dice:

    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 dice:

    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 dice:

    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 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 dice:

    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 dice:

    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 dice:

    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 dice:

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

    Anthony dice:

    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 dice:

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

    dantes dice:

    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 dice:

    Sí, con JavaScript

    RODrigo dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

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

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

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

    Gabriel dice:

    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 dice:

    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 dice:

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

    Antonio Hernandez dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

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

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

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

    Leonardo dice:

    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 dice:

    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 dice:

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

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

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

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

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

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

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

    Al implementarlo con laravel , cambia la configuracion inicial ?

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

    Muchas Gracias!!

    Alfredo Ramirez dice:

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

    parzibyte dice:

    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/

    Misae dice:

    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 dice:

    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 dice:

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

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

    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

    parzibyte dice:

    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 🙂

    Alexandre dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

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

    parzibyte dice:

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

    Alexandre dice:

    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 dice:

    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 dice:

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

    JORGE A SARRIA dice:

    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 dice:

    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 dice:

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

    Angel Patre dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

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

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

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

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

    Gracias por tan buen aporte y saludos!

    parzibyte dice:

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

    Bairon Imbacuan dice:

    que inpresoras termicas soporta la biblioteca

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    gracias

    pili dice:

    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 dice:

    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 dice:

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

    pili dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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

    franco dice:

    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 dice:

    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 dice:

    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 dice:

    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

    parzibyte dice:

    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.

    Alonso dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

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

    c3media dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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.

    jamilton dice:

    hola amigo lograste imprimir la imagen??

    Ricardo dice:

    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 dice:

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

    Giancarlo dice:

    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 dice:

    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 dice:

    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 dice:

    Tendras un ejemplo similar sobre Web Socket ?

    Kaleh dice:

    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 dice:

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

    Kaleh dice:

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

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

    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 dice:

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

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

    Giancarlo dice:

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

    parzibyte dice:

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

    Henry dice:

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

    parzibyte dice:

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

    C3media dice:

    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 dice:

    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?

    parzibyte dice:

    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 dice:

    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 dice:

    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 dice:

    Excelente articulo me ha servido para lo que necesitaba. Gracias

    Keli Zorrilla dice:

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

    parzibyte dice:

    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 dice:

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

    parzibyte dice:

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

    parzibyte dice:

    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

Deja un comentario

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