Entradas con la etiqueta ‘conversor pdf a ps’

Imprimir por impresora desde PHP-GTK

Jueves, 24 de Julio de 2008

En esta ocasión vamos a ver como imprimir algo desde un programa en PHP-GTK con nuestra impresora, usaremos además el terminal de Linux.

En nuestro caso necesitamos imprimir datos para generar ‘tickets’, con lo que la copia debe tener algo de estilo. Esto nos traerá algún problema, puesto que no es imprimir sólo texto. Además, es previsible que estos tickets sean consultados vía web remotamente.

Para empezar hay que comentar que en Linux no tiene la libreria printer_php.dll, con lo que hay que imprimir desde terminal, al hacerlo nos damos cuenta que la solución es multiplataforma, así que en Windows debería funcionar bien lo que vamos a explicar.
Para desarrollar la idea hemos creado un programa con el Glade 2, que tiene una caja de texto(textview) y un botón, al botón le asignamos un evento al ser clickado, que llamara a la función ‘Conecta’ y le advertimos que coja como fuente de datos el textView.

Ahora generamos el blade y vamos al archivo PHP.
Vamos a hacer un ejemplo simple ya que para generar los pdf podeis visitar su web oficial.

function conecta($textView){
$textBuffer = new GtkTextBuffer();
$salida = shell_exec(’ls -l /home’); //en caso de windows shell_exec(’dir c:’);, por ejemplo
$textBuffer->set_text($salida);
$textView->set_buffer($textBuffer);

}

Con este pequeño ejemplo, al pulsar el boton el terminal ejecutara un listado de directorios del sistema, y colocara la salida en la caja de texto.

Como véis, el comando a utilizar en php es shell_exec, que envia al modo consola del servidor (tu maquina si estas en local, que es nuestro caso), una orden y la devuelve a la variable $salida.

Para imprimir en modo consola tanto en linux como en Windows con la impresora el comando es ‘lpr NOMBRE_ARCHIVO’, con eso le envias el archivo especificado a la cola de impresión de la impresora.

function conecta($textView){

$salida=shell_exec(’ls -l /home’);
$textBuffer = new GtkTextBuffer();
$pdf=new FPDF(’P',’cm’);
//aquí iria toda la generación del PDF con FPDF, poniendo el contenido de $salida como texto de     pagina
$pdf->Output(’prueba.pdf’); //genera el archivo prueba.pdf
$textBuffer->set_text($salida);
$textView->set_buffer($textBuffer);
shell_exec(’pdf2ps Calefaccio.pdf prova.ps’); //convertir de PDF a PS
shell_exec(’lpr prova.ps’);

}

¿Qué hace exactamente este nuevo código?

Primero de todo coje como $salida la respuesta al listado de directorio, genera un PDF con el texto que deseemos, puede ser por ejemplo la $salida que por eso la hemos hecho en este caso, al generar el PDF crea el archivo en el mismo directorio.

shell_exec(’pdf2ps Calefaccio.pdf prova.ps’); //convertir de PDF a PS
shell_exec(’lpr prova.ps’);

Esta es la parte interesante del asunto, si provais de imprimir directamente el archivo PDF desde el modo consola tendreis problemas y vereis como salen impresas unas cosas muy raras, ya que la consola de windows o el terminal de linux no sabe imprimir PDF, lo que hay que hacer es convertir de PDF a PS el archivo, en este caso en modo consola de linux con la funcion pdf2ps, y darle a imprimir ese mismo archivo PS.

Haciendo pruebas ha procesado la creación y conversión de 72 paginas en unos 2 segundos aproximadamente, osea que realmente no va mal ;-)

En windows previamente habria que crear un puerto tcp/ip para la impresora, ya que la funcion ‘lpr’ es imprimir remotamente, ‘lp’ es impresión normal.

Aunque tambien puede usarse printer en php si se funciona sobre Windows y quiere imprimir.