viernes, 4 de junio de 2010

IMPRIMIR EN IMPRESORA FISCAL (ticket, boleta, factura, contometro) DESDE PHP



Bueno investigando encontre que en PHP se puede crear un archivo de texto (digamos un block de notas) que luego hago un llamado al shell_exec y ahi le paso el archivo creado, el cual este mismo lo imprime por el puerto deseado, un ejemplo de como imprimir en una IMPRESORA FISCAL O TIQUETERA en php es:



<?php

/** http://www.jsjconsultores.com/
* @author ZEGARRA CORNE, Sergio
* @Instituto IDAT
*/
 

$Archivo_q_se_crea = fopen("puerto en el cual se desea imprimir", "w");
$dato = $_POST['videos']; //recibo algunos datos de otra pagina

// aqui comienzo a crear o digamos llenar el archivos con algunos datos
fwrite($Archivo_q_se_crea,"================================="); fwrite($Archivo_q_se_crea,"TITULO"); fwrite($Archivo_q_se_crea,"CANTIDAD"); fwrite($Archivo_q_se_crea,"Nombre".$dato ); fwrite($Archivo_q_se_crea," :: AQUI VAN LOS COMANDOS DE LA IMPRESORA ::");

fwrite($Archivo_q_se_crea," :: ESTO DEPENDE DEL MODELO ::");
fwrite($Archivo_q_se_crea," :: AQUI TAMBIEN PODEMOS PONER EL COMANDO QUE HABRE LA GABETA DE DINERO O EL CAJON ::");
fwrite($Archivo_q_se_crea," Gracias por Comprar en VideosconVida.com");


// ahora cerramos el archivo creado fclose($Archivo_q_se_crea); // cierra el fichero

//y por ultimo mandamos todos los codigos almacenados en el archivo "$Archivo_q_se_crea",(IMPRIMIMOS)

shell_exec('lpr "puerto en el cual se desea imprimir"'); 
?>


Bueno y ese es un ejemplo basico que he encontrado para poder imprimir en PHP
----------------------------------------------------------
 

http://www.jsjconsultores.com/
----------------------------------------------------------


38 comentarios:

  1. Hola, esto sirve para imprimir en la impresora fiscal de un cliente windows? o la impresora debe estar local al server?

    ResponderEliminar
  2. Bueno yo uso un server central y muchos server pequeños (clientes) y en estos tan solo coro apache + php y el script del cliente (el que executa la impresion)

    digamos que mi sistema tenga la siguiente direccion local

    http://192.168.10.80

    al momento de registrar el producto llamo a la pagina cliente pasandole los datos registrados

    http://localhost/cliente/ticket1.php?id=17&cnt=13&tip=2&pre=75

    o tambien uso JQUERY + json

    var d = {id:17,cnt:13,tip:2,pre:75};

    $.get("http://localhost/cliente/ticket1.php",d);

    y con eso logro imprimir en una inpresora fiscal o ticketera

    ResponderEliminar
  3. Hola, logras imprimir en distintas impresoras??
    saludos

    ResponderEliminar
  4. EXPLICATE MEJOR....

    Que estas buscando, o bueno que has conseguido lograr


    http://tareasyclases.co.cc

    ResponderEliminar
  5. Hola zxeveroxz por google llegue hasta aca buscando como imprimir en una impresora fiscal hasar que se conecta por serial rs232, utilizas algun spooler para comunicarte con la impresora, es decir, tenes carpeta desde donde lee la impresora y donde entrega la respuesta?. Mi idea es poder imprimir en una impresora fiscal a través de php o javascript.

    ResponderEliminar
  6. Bueno amigo "CarJav", yo utilizo una impresora Bixolon 270 (Matricial, Fiscal) y esta puede tener uno de los 3 tipos de conector: SERIAL, PARALELO Y USB. Por razones de actualidad yo adquiero las impresoras con entrada USB ya que las nuevas placas y/o Portatiles no cuentan con PUERTO PARALELO Y MUCHO MENOS CON SERIAL, despues de aclarada lo de los conectores.
    Si tengo un programa que EMULA UN PUERTO SERIAL DESDE EL PUERTO USB, es decir todo lo que envio al PUERTO "COM5" lo redirecciona digamos que al PUERTO USB001; yo creo que no debes tener ningun incoveniente al LEER EL PUERTO SERIAL, ya que tambien con el mismo codigo he impreso en el PURTO PARALELO LOS COMANDOS ESC/P porque yo creo que eso es lo que buscas, ya eso era mi problema con estas impresoras, que si no les envia los COMANDOS ESC/P la impresiones me los hacia muy lentas y con letras deformes, es decir, no usaba las FUENTES PREDETERMINADAS DE LA IMPRESORA FISCAL / TICKETERA.

    Amigo explicate un poco mejor como es tu extructura de tu sistema o de que se trata y con mucho gusto de ayudare en lo que pueda; a y disculpa por no darte la respuesta a tiempo pero he estado muy ocupado ya que manejo un sistema y este mes se ha tenido que entregar los reportes de cierre de objetivos de este año 2010.

    Sergio Zegarra Corne
    Lima - Peru

    NOTA: haver si te suscribes en "Suscripción por correo electrónico" para que te enteres cuando te escribo, hasta la proxima.

    ResponderEliminar
  7. Hola, es de gran ayuda la info, pero tengo una duda,a que te refieres con "AQUI VAN LOS COMANDOS DE LA IMPRESORA"??? y "ESTO DEPENDE DEL MODELO"??? Sería de gran ayuda resolver estas dudas. Gracias de antemano y ojala puedas responder

    ResponderEliminar
  8. Claro todo depende del modelo, por ejemplo algunos modelos aceptan " \n " como espacio hacia abajo mientras que otras ch(33).ch(100).ch(1).

    Para poder ayudarte pon el modelo de la impresora que vaz a usar asi como tambien el proyecyo que vaz a implementar

    Tu amigo Sergio Zegarra

    Sitio en contruccion:::: http://tareasyclases.co.cc/web

    ResponderEliminar
  9. Gracias, ya logre imprimir, pero el problema es que solo lo hago localmente. Mi proyecto es un sistema en php que estara en un servidor remoto. Al subirlo no imprime porque la impresora no esta conectada al servidor ¿Como lo hago para que desde la web me imprima en mi equipo local?

    ResponderEliminar
  10. OK LEONEL...

    Primero dime de que se trata tu proyecto, y cuando me dices de servidor remoto a que te refieres, que esta un lugar aparte o que esta en un servidor web via internet.

    Estare respondiendote en horas de la noche, ya que estoy full por el momento.

    Nos vemos....

    ResponderEliminar
  11. Es una aplicacion para un centro de pagos que registra un pago en una base de datos mysql, todo esto en un servidor web via INTERNET. La aplicación y la impresión funcionan perfecto en local, pero cuando subo el php de la impresión no imprime, ya que por lo que se la impresora debe estar conectada al servidor. Entonces hay alguna forma de que teniendo el archivo en la web pueda imprimir en un equipo local??? De antemano muchas gracias

    ResponderEliminar
  12. Y SI USAS ESTO

    DIRECCION DEL SISTEMA

    http://192.168.10.80/sistema/

    al momento de registrar el producto llamo a la pagina cliente pasandole los datos registrados

    uso JQUERY + json

    var d = {id:17,cnt:13,tip:2,pre:75};

    $.get("http://localhost/cliente/ticket1.php",d);

    DIME SABES JQUERY O ALGO PARECIDO.

    Yo tengo mi sistema en un local central y tengo 4 sedes que imprimen en impresoras fiscales, en cada una de las sedes e instala APACHE + PHP para que puedan ejecutar la pagina:

    http://localhost/cliente/ticket1.php

    Recuerda que nosotros estamos en el sistema http://192.168.10.80/sistema/ y por medio de JQUERY llamamos a esta pagina la cual se encuntra en la pc cliente con APACHE Y PHP http://localhost/cliente/ticket1.php

    Hasme saber si podiste resolver tu problema, aqui listo para ayudate

    ResponderEliminar
  13. No se Jquery, lo que haces es pasar las variables desde el servidor a una pagina alojada en el pc del cliente? algo estoy entendiendo, pero no se como hacerlo ya que me manejo en php. Hasta el momento sigo con el problema, pero si tienes alguna idea de como hacerlo te lo agradecería mucho.

    ResponderEliminar
  14. seria bueno amigo zegarra, que pongas el codigo completo, no importa si es de un impresora especifica, ayudaria bastante ver todo el codigo.

    sobre el problema del amigo leonel, creo que tiene ver con el hecho seguridad y configuracion del php del lado del servidor, es muy probable que tenga una configuracion limitada. estas usando como servidor un hosting php de esas que hay en internet y la mayoria son gratis o de pago ?. esto puede provocar que cuando se ejecute el comando shell_exec nunca envie el archivo plano o txt o talves tu navegador web lo este bloqueando por provenir de un sitio web que no es de confianza.

    saludos

    ResponderEliminar
  15. Exacto Jpardo, estoy en un hosting Internet de pago y no se permite modificar la configuración del servidor. Lo que tengo entendido es que no imprime porque la pagina php necesita que la impresora este conectada al servidor. Mi problema es que no poedo conectar la impresora al servidor ya que este es de una empresa externa. ¿Como lo hago para que el script de impresion mande a imprimir en una impresora conectada al cliente PHP? Gracias de antemano.

    ResponderEliminar
  16. OK AMIGOS

    AQUI HE CREADO OTRA ENTRADA MAS, EN LA CUAL ESPLICO MAS DETALLADAMENTE LOS PASOS

    ESTE ES EL LINK

    http://mitareaperu.blogspot.com/2011/03/imprimir-ticket-en-impresora-fiscal-con.html

    Imprimir Ticket en impresora fiscal paso a paso en el lado del cliente en PHP :: http://mitareaperu.blogspot.com/2011/03/imprimir-ticket-en-impresora-fiscal-con.html

    Haber si publican las capturas de pactalla de sus proyectos

    ResponderEliminar
    Respuestas
    1. Muy buenas tardes, en Marzo de 2011 publicaste este sitio,
      Imprimir Ticket en impresora fiscal paso a paso en el lado del cliente en PHP :: http://mitareaperu.blogspot.com/2011/03/imprimir-ticket-en-impresora-fiscal-con.html
      pero el sitio ha sido eliminado, puedes volver a publicarlo?

      Eliminar
  17. Gracias, ya solucione el problema con el post que agregaste, mando las variables via url y me imprime. Gracias de nuevo por la preocupación. Saludos

    ResponderEliminar
  18. Ok no hay problema...

    Dime una cosa, tu programacion esta en 3 capas, osea orientada a objetos, o es solamente extructura...


    Saludos amigos

    ResponderEliminar
  19. Gracias por sus opiniones

    Sigan comentando sus dudas

    ResponderEliminar
  20. Gracias por tus comentarios, me ayudan de mucho y me motivan, y dime tu a que te dedicas...

    Thank you for your comments help me a lot and encourage me and tell me that you do your

    ResponderEliminar
  21. justo lo que andaba buscando.... Me has salvado de largas horas googleando

    ResponderEliminar
    Respuestas
    1. Ok amigo Carlos publica tus avances para que otros tambien resuelvan su problema con las impresoras fiscales

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
    3. Carlos me puedes ayudar para imprimir en impresora tickera epson por el puerto lpt1

      Eliminar
  22. Alguien me podría ayudar para imprimir desde mi hosting Internet en una impresora epson tickera.

    ResponderEliminar
  23. zxeveroxz hola como me puedo comunicar contigo por correo para que me ayudes?

    ResponderEliminar
  24. Diego Armando Perez Ovalle, escribio...


    Hola Sergio buenas tardes

    Mi nombre es Diego Pérez, soy Ingeniero de Software de colombia y estoy haciendo un pequeño sistema POS y estoy tratando de imprimir desde php a una impresora termica EPSON TM-T20, la impresora esta en el puerto USB y el sistema esta montado en el mismo servidor. Me he estado guiando de un foro http://sergiozegarracorne.blogspot.com.co/2010/06/imprimir-en-impresora-fiscal-ticket.html en el que vos explicas como hacerlo pero no me ha funcionado.

    Este es el codigo que tengo:


    if(($handle = @fopen("USB001", "w")) === FALSE) {
    die('No se pudo Imprimir, Verifique su conexion con el Terminal'.$handle);
    }

    //$dato = $_POST['datos'];

    fwrite($handle,chr(27). chr(64));//reinicio

    fwrite($handle, chr(27). chr(112). chr(48));//ABRIR EL CAJON
    fwrite($handle, chr(27). chr(100). chr(0));//salto de linea VACIO
    fwrite($handle, chr(27). chr(33). chr(8));//negrita
    fwrite($handle, chr(27). chr(97). chr(1));//centrado

    fwrite($handle,"=================================");
    fwrite($handle, chr(27). chr(100). chr(1));//salto de linea
    fwrite($handle, chr(27). chr(32). chr(3));//ESTACIO ENTRE LETRAS
    fwrite($handle,"I. C. M. EL APOSENTO ALTO ");
    fwrite($handle, chr(27). chr(32). chr(0));//ESTACIO ENTRE LETRAS
    fwrite($handle, chr(27). chr(100). chr(0));//salto de linea VACIO
    fwrite($handle, chr(27). chr(33). chr(8));//negrita
    fwrite($handle, chr(27). chr(100). chr(0));//salto de linea VACIO
    fwrite($handle, chr(27). chr(100). chr(1));//salto de linea
    fwrite($handle,"Nacimos de Nuevo para ser grandes");
    fwrite($handle, chr(27). chr(100). chr(1));//salto de linea
    fwrite($handle,"=================================");
    fwrite($handle, chr(27). chr(100). chr(1));//salto de linea
    fwrite($handle, chr(27). chr(100). chr(1));//salto de linea
    fwrite($handle,"PALABRA A IMPRIMIR: LINDO");

    //fprintf($handle);
    //echo "bien";lpr
    $salida = shell_exec('USB001 lpr'); //lpr->puerto impresora, imprimir archivo PRN
    fclose($handle); // cierra el fichero PRN

    Me podrias dar una mano con eso por favor, gracias.

    ResponderEliminar
    Respuestas
    1. El problema que tienes es @fopen("USB001", "w")), si estas trabajando con windows no te va reconocer el puerto USB***, para dar solucion a esto hay varias formas:

      Una de ellas es tener un programa que virtualize el puerto COM5, es decir todo lo que le envies al puerto virtual COM* lo pasara al puerto USB*, el cual este puerto USB debe haber sido instalado con sus driver con el que viene la impresora...

      Otra es instalar la impresora con el driver generico TEXT/Generic, despues compartirla impresora instalada, por ejemplo "termica1", entonces el codigo quedaria asi : -- @fopen("\\localhost\\termica1", "w")) --, claro que esto solo funciona de la misma pc donde esta instalada la impresora, si desearias imprimir de otra pc seria asi: -- @fopen("\\192.168.1.123\\termica1", "w")) -- ::192.168.1.123 esto es la ip donde esta la impresora instalada::ademas para esto hay que darle algunos permisos en el firewall...

      Otra opcion que ahora yo estoy usando y es mucho mejor, estoy comprando ya las impresoras que vienen con puerto ETHERNET - RED, con esto se puede hacer que se imprima desde cualquier lugar...

      ----------------
      Ahora si usas LINUX es mucho mas rapido---

      Primero tines que dar permiso a la impresora fiscal - factura - ticket - termica:

      sergio#: sudo chmod -R 777 /dev/usb/lp0

      ya con esto tiene permiso para ser usado por cualquier usuario

      despues cambiamos el codido de la impresora a:

      -- @fopen("PRINT", "w")) -- y al final para imprimir

      shell_exec('cat PRINT > /dev/usb/lp0');

      Espero pueda ser de ayuda esta informacion para imprimir desde php en impresora de ticket desde el cliente o desde el servidor

      Eliminar
  25. Hola sergio..

    Tengo una aplicacion en un Hosting y estoy imprimiendo en la Pc del cliente.
    Como puedo imprimir, si al cliente se cae la conexion de internet???

    ResponderEliminar
  26. Hola sergio..

    Tengo una aplicacion en un Hosting y estoy imprimiendo en la Pc del cliente.
    Como puedo imprimir, si al cliente se cae la conexion de internet???

    ResponderEliminar
    Respuestas
    1. sergio/jose tengo el mismo problema, quisiera imprimir desde el lado del cliente (navegador)

      Eliminar
    2. que tal ya resolvieron el problema ??

      Eliminar
  27. Hola, amigo me podrias ayudar, necesito imprimir un tickets o comandas para la cocina y barra en php, nose como hacerlo.. esto esta montado en un servidor local..

    ResponderEliminar
  28. buenas amigo tengo una impresora bixolom srp350 y no he logrado imprimir con ella me podiras orientar que archivos debo instalar para la misma para poder probar

    ResponderEliminar