miércoles, 11 de julio de 2007

Eh Broda' print me

El sistema de impresión en Linux siempre ha sido una cosa que me ha fascinado y aterrorizado a partes iguales. Cuando en mis tiempos mozos me miré cómo configurar una impresora con el sistema LPD me entraba un nosequé que queseyó.

Hoy en día con CUPS todo es más fácil. No te tienes que preocupar de los filtros a utilizar, puedes elegir la impresora de un listado... y con la ayuda de linuxprinting todo se hace mucho más sencillo. Y aún más cuando la impresora que tienes que instalar es PostScript, con las que sólo hace falta enchufarle el fichero PPD y listos.

Listos... si el PPD está bien. Hoy en el curro he tenido un pollo con una impresora de esas que pasan de departamento en departamento "porque no va bien". La impresora está muy apañada, es una Brother HL-2700CN láser y a color, y lo único que "no va bien" es que tiene la correa un poco rayada y deja unas rayitas en la parte superior de la página. La cuestión es que ayer la instalé, utilizando el paquete linuxprinting.org-ppds de Debian Etch, que trae zillions de ppds para todo lo habido y por haber. En principio iba todo bien hasta que hoy me han dicho que había un PDF que no imprimía bien.

Después de romperme la cabeza y activar algunas opciones de la impresora he llegado a la conclusión de que había algo en un logo del PDF que hacía que se le enviaran órdenes PJL a la impresora (y evidentemente ésta no las soporta). Una vez modificado el logo (que tenía toneladas de mierda en pseudo-xml embebidas en la imagen por el Photoshop) me salía otro error al intentar imprimir el mismo PDF:


ERROR NAME:

undefined

COMMAND:

-12345X@PJL

OPERAND STACK;


Pues buscando por ahí he visto que es un error relacionado con una orden PostScript que no está soportada por la impresora, pero ¿quién mandaba esa orden? La respuesta es.... ¡el propio ppd! Vamos, que tenía un "driver" para una impresora que contenía instrucciones no soportadas por esa impresora. Cojonudo.

Buceando por el ppd he comentado unas líneas que parecían las ofensivas y todo ha comenzado a ir rodado (una vez reiniciado el servidor CUPS):

*%JCLBegin: "<1b>%-12345X@PJL JOB<0a>"
*%JCLToPSInterpreter: "@PJL ENTER LANGUAGE = POSTSCRIPT <0a>"
*%JCLEnd: "<1b>%-12345X@PJL EOJ <0a><1b>%-12345X"


La verdad es que no sé si esa es la forma correcta de solucionar el error, pero desde que he realizado los cambios todo va a la perfección.

No hay comentarios: