Como parte de las muchas cosas que hacemos, me ha tocado meterme un poco en como hacer que desde un script PHP, se envié un trabajo de impresión hacia una impresora térmica de etiquetas Zebra, que esta conectada a un Printserver Dlink.
Este trabajo se realiza sobre un servidor web apache, corriendo PHP 5.3.1 (Opensuse 11.2) y sobre un servidor de impresion CUPS (Opensuse 11). Usando un printserver Dlink DP-301P+
Para resolver este problema, haremos uso del modulo PHP::PRINT::IPP, disponible en:
http://www.nongnu.org/phpprintipp/
Este modulo es bastante sencillo de usar y tiene una documentación relativamente buena. El gran problema que presenta es de compatibilidad hacia las ultimas versiones de PHP.
Si están usando las mismas versiones que yo, de raiz van a tener problemas por funciones que utiliza el modulo de impresión (Deprecated).
Para hacer que este modulo sea compatible con la version actual de PHP, tenemos que realizar algunos cambios en el archivo http_call.php Específicamente cambiar todas las funciones split por preg_split y posteriormente hay que cambiar las expresiones regulares que se usan. finalmente en este archivo deberian cambiar 2 lineas de codigo quedando como:
$url = preg_split ('/:/', $url, 2);
$url = preg_split ("/\//", preg_replace ("#^/{1,}#", '', $url), 2);
Adicionalmente, a mi me ha aparecido otro error, pero no estoy seguro si es un problema de versiones. Si les aparece un error sobre que no puede redeclarar una clase, procedan a hacer una búsqueda por httpException sobre todos los archivos del modulo y cambien httpException por httpException2.
Ahora cualquier error adicional, puede deberse a la falta de algún requisito. Con Google se soluciona.
A esta altura tenemos el modulo ipp listo y compatible con nuestro PHP.
Si bien el print server dlink tiene una opcion para soportar ipp, la documentacion es tan pobre que me ha sido imposible siquiera encontrar la url donde podria acceder a la impresora (mediante ipp)
Asi que para saltarme este problema, configure la impresora en un servidor de impresión CUPS (La impresora se conecta por LPD con driver RAW) y luego cups nos entrega una direccion IPP.
Ahora para imprimir una pagina de prueba, hagamos un Index.php y pongamos el siguiente código.
require_once("libs/ipp/PrintIPP.php");
$ipp = new PrintIPP();
$ipp->setLog('/tmp/printipp','file',3); // logging very verbose
$ipp->setPrinterUri('ipp url');
$ipp->debug_level = 3; // Debugging very verbose
$ipp->setCharset('utf-8');
$ipp->setData("testfiles/test-utf8.txt"); // Path to file.
printf(_("Job status: %s"), $ipp->printJob()); // Print job, display job status
$ipp->printDebug(); // display debugging output
Obviamente reemplazen ipp url por su direccion ipp y las rutas a los archivos por sus rutas correspondientes.
Y como se dice, el resto es historia.
Pueden usar el mismo archivo de texto para ir imprimiendo, o usar directamente una variable string.
No hay comentarios.:
Publicar un comentario