Página siguiente Página anterior Índice general

4. ¿Qué es un filtro de impresión y cómo se construye?

Antes que nada es necesario recordar el mecanismo de spooling típico de los servidores de impresión en linux. En primer lugar el servidor lpr/lprng copia el fichero a imprimir en el directorio de «spool» (sd) indicado en el fichero /etc/printcap, creando en dicho directorio un fichero de control indicando el trabajo a imprimir, el usuario que solicita el servicio de impresión, parámetros pasados en línea de órdenes, etc. Luego, el demonio de impresión (lpd) comprueba periódicamente si hay ficheros de control en el directorio spool, y si es así, realiza las siguientes tareas:

Por lo tanto un filtro de entrada de impresión no es más que un programa (generalmente un guión) que teniendo en su entrada estándar (STDIN) un fichero en un formato determinado , p. ej., ps (postscript), escribe en su salida estándar (STDOUT) los códigos necesarios para que la impresora imprima dicho fichero.

Consideremos que disponemos de una impresora HP Laserjet Plus y vamos a escribir algunos filtros. La resolución será de 300x300; el formato de papel, A4; y el controlador de dispositivo es ljetplus.

Vamos a escribir el filtro para ficheros PS como un shell script:

#!/bin/bash/
#Filtro de ficheros postscript
/usr/bin/gs -q -dSAFER -dNOPAUSE -sDEVICE=ljetplus -r300 -sPAPERSIZE=a4 -sOutputFile=- -

Como podemos ver, gs lee la STDIN desde el fichero de control que ha creado el servidor de impresión lpr; se ejecuta el filtro y la opción -sOutputFile=- envía la salida a STDOUT. El demonio lpd tomará los datos que se encuentren en STDOUT y los enviará a la cola de impresión.

Para procesar un fichero PDF aprovechando la utilidad pdf2ps (shell script que convierte un fichero PDF a PS), escribiremos el filtro:

#!/bin/bash/
#Filtro de ficheros pdf
/usr/bin/pdf2ps | /usr/bin/gs -q -dSAFER -dNOPAUSE -sDEVICE=ljetplus -r300 -sPAPERSIZE=a4\
-sOutputFile=- -

Para un texto en formato troff, emplearíamos este otro

#!/bin/bash/
#Filtro de ficheros troff
/usr/bin/grops -g | /usr/bin/gs -q -dSAFER -dNOPAUSE -sDEVICE=ljetplus -r300 -sPAPERSIZE=a4\
-sOutputFile=- -

(la opción -g para la orden grops permite generar documentos en formato letter o a4)

Como puede verse el concepto de filtro sería un shell script con los siguientes campos:

#!/bin/bash
#Comentario 'filtro para ficheros XYZ'
/usr/bin/XYZps | /usr/bin/gs -q -dSAFER -dNOPAUSE -sDEVICE=ljetplus -r300 -sPAPERSIZE=a4\
-sOutputFile=- -

Donde XYZps es un programa (con opciones) que convierte el formato XYZ a PS. Hay una gran cantidad de ellos que servirían para hacer filtros con posibilidad de imprimir gráficos; así el formato TIFF se pasa directamente con la utilidad tiff2ps, mientras que los GIF y JPEG se pasan a formato PNM mediante los programas giftopnm y djpeg, respectivamente. Una vez en este formato, se traduce a PS con la utilidad pnmtops.


Página siguiente Página anterior Índice general