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:

Requisitos

Paso 1: Descargar librería

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. En el repositorio oficial hay ejemplos para imprimir códigos qr, códigos de barras, y otras cosas más.

No te vayas sin seguirme en Twitter, Facebook y GitHub, así me motivas a escribir más posts.
Igualmente te invito a suscribirte en la parte superior derecha escribiendo tu correo en el formulario.
Si tienes dudas déjalas en un comentario

Categorías: phpweb

parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB. Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron. Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scripts La plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C. Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

166 Comments

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

        Whoops, looks like something went wrong.
        1/1 FatalErrorException in f8096eefbddc953f73966a4c74209b878f8c35e5.php line 3: main(): Failed opening required ‘C:\animalitos\storage\framework\views/ticket/autoload.php’ (include_path=’C:\xampp\php\PEAR’)

        in f8096eefbddc953f73966a4c74209b878f8c35e5.php line 3

          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 C:\animalitos\storage\framework\views/ticket/autoload.php

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

Excelente articulo me ha servido para lo que necesitaba. Gracias

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:

    –>Fatal error: Uncaught exception ‘BadMethodCallException’ with message ‘Printer ‘DYMO LabelWriter 450 (Copiar 1)’ is not a valid printer name. Use local port (LPT1, COM1, etc) or smb://computer/printer notation.’ in C:\xampp\htdocs\Prueba\php_mike42\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php:155 Stack trace: #0 C:\xampp\htdocs\Prueba\php_mike42\ticket.php(30): Mike42\Escpos\PrintConnectors\WindowsPrintConnector->__construct(‘DYMO LabelWrite…’) #1 {main} thrown in C:\xampp\htdocs\Prueba\php_mike42\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php on line 155

    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…

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.

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

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

Warning: copy(\\giancarlo\BIXOLON SRP-270): failed to open stream: No such file or directory in C:\wamp\www\HTML5Application\public_html\ticket\src\Mike42\Escpos\PrintConnectors\WindowsPrintConnector.php on line 373

    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 🙂

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 22, 2017 a las 4:09 pm

Tendras un ejemplo similar sobre Web Socket ?

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

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

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.

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/

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

    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.

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.

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.

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.

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

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

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!

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

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

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

gracias

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

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…

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)

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.

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!

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

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!

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

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 –

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.

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

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

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

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

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.

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.

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.

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 ?

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

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

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.

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.

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

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.

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

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

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

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

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.

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

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?

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 *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: