  COMOSEHACEN Filtros de Impresin
  Paco Andrs
  Maquetador Linuxdoc-SGML: Antonio Ismael Olea Gonzlez,
  olea@poboxes.com 2:345/108.9@fidonet.org
  V1.0, 14 de agosto 1997 (por esta edicin)

  OJO .- Esto es una versin Alfa (No os la creais mucho ;-) Nota: este
  documento tiene su origen en la red FidoNet de la cual lo extrajo el
  maquetador. Por desgracia no puede informar de su fecha original ni de
  alguna versin ms reciente ni siquiera de alguna forma para contactar
  con el autor va la Red.
  ______________________________________________________________________

  ndice General:

  1.      El sistema de impresin de Linux

  2.      Los filtros de impresin

  3.      Cmo se hacen?

  4.      Ejemplos

  5.      Peticiones

  6.      Los ejemplos
  ______________________________________________________________________

  1.  El sistema de impresin de Linux

  Nota: En este fichero se nombra muchas veces el fichero printcap, es
  el fichero /etc/printcap. Su contenido est muy bien explicado en el
  Configuracion-Impresion-Como.

  El sistema de impresin de Linux, y en general de todos los Un*x
  basados en BSD, funciona (a grandes rasgos) de la siguiente manera.

  El comando lpr copia el fichero a imprimir en el directorio de spool
  indicado en el fichero printcap (sd=directorio-spool) y crea en dicho
  directorio un fichero de control en el que indica: el fichero (del
  directorio de spool) a imprimir, el usuario que solicit ese servicio
  de impresin, los parmetros que se le pasaron en la lnea de
  comandos, etc.  y ah termina su funcin.

  A continuacin entra en juego un daemon (una especie de tsr para los
  que venimos del MS-2) llamado lpd. Este programa se activa
  peridicamente y comprueba si hay ficheros de control en el directorio
  de spool, y en caso de que los haya realiza las siguientes acciones
  para cada uno de dichos ficheros :

  1. imprime la pgina de banner, si sta no se encuentra suprimida
     (orden sh del fichero printcap) , pasndola a travs del filtro de
     salida si hay alguno definido (orden of del fichero printcap) ;

  2. si (segn el fichero de control) se indic al comando lpr que tena
     que emplear algn filtro de impresin en concreto (ej.: lpr -t) se
     ejecuta el filtro indicado en la correspondiente entrada del
     fichero printcap;  si no se indic ningn filtro al comando lpr, se
     ejecuta el indicado por el parmetro 'if' del fichero printcap.

  3. Cuando se ejecuta el filtro, se redirecciona su entrada estndar al
     fichero a imprimir (el creado por lpr en el directorio de spool) ,
     y su salida estndar a :

    la entrada estndar del filtro de salida (si ste est definido en
     el fichero printcap) y la salida de dicho filtro al dispositivo de
     impresin asociado a esta impresora (orden 'lp' del printcap) ;

    al dispositivo de impresin indicado en el fichero printcap.

  2.  Los filtros de impresin

  Segn la descripcin anterior un filtro de impresin no es ms que un
  programa (generalmente un script) que teniendo en su entrada estndard
  un fichero en un formato determinado (ej.: troff) , escribe en su
  salida estndar los cdigos necesarios para que la impresora imprima
  dicho fichero.

  Fcil, eh!  ;-)

  3.  Cmo se hacen?

  A no ser que dispongis de una impresora PostScript es muy raro que
  tengis programas que puedan imprimir directamente ficheros en muchos
  de los formatos ms habituales (troff, dvi, etc...) . Por eso, lo que
  se suele hacer es:

    para aquellos ficheros para los que tengis programas que lo
     impriman directamente en vuestra impresora, (ej.: dvilj,
     ghostscript, etc) , emplear dichas utilidades;

    para los dems formatos (TeX, troff, ...) , convertidlos a un
     formato que podis imprimir lo ms directamente posible, o que os
     guste ms (DVI, PostScript, etc...) .

  4.  Ejemplos

  A continuacin os pongo dos ejemplos de juegos de filtros de
  impresin. El primero emplea el PostScript como formato intermedio,
  por lo que podis adaptarlo fcilmente a cualquiera de las muchas
  impresoras soportadas por el ghostscript, y el segundo ejemplo emplea
  el formato DVI como formato intermedio.

  Ambos ejemplos estn preparados para una impresora HP-Deskjet 5??
  monocroma, aunque no debe resultaros muy difcil adaptarlos a vuestra
  impresora en concreto.

  5.  Peticiones

  En primer lugar, este texto tiene muchos errores, cosas mal
  explicadas, etc. Enviadme por Net todas las sugerencias y correcciones
  al texto que creis interesantes.

  Si adaptis estos filtros para otras impresoras, hacis otros nuevos,
  los mejoris, etc, mandadme el nuevo juego de filtros (o las
  diferencias si son pocas) de forma que podamos ir creando una base de
  datos de filtros de impresin y ponerla a disposicin de todos, no
  teniendo los usuarios nuevos que reinventar la rueda cada vez (aunque
  en este caso no sea muy difcil de reinventar ;-) ).
  6.  Los ejemplos

  Fichero /etc/printcap

       #
       # Copyright (c) 1983 Regents of the University of California.
       # All rights reserved.
       #
       # Redistribution and use in source and binary forms are permitted
       # provided that this notice is preserved and that due credit is given
       # to the University of California at Berkeley. The name of the University
       # may not be used to endorse or promote products derived from this
       # software without specific prior written permission. This software
       # is provided ``as is'' without express or implied warranty.
       #
       #    @(#) etc.printcap  5.2 (Berkeley) 5/5/88
       #

       #   Modificado  5-1-95 por Paco Andres para incluir los filtros
       #   para la impresora HP-Deskjet. Y quitar lo que sobra.
       #

       #
       # HP Deskjet
       # Se han agnadido los siguientes filtros :
       #    lpr #, donde # puede ser :
       #    -d  -->  Ficheros DVI
       #    -n  -->  Ficheros generados por gtroff
       #    -t  -->  Ficheros a procesar por groff (este ya llama gtroff si es
                 necesario)
       #    -f  -->  Ficheros PostSript
       lp|hpdj:\
           :lp=/dev/lp0:\
       :sh:\
           :sd=/usr/spool/lp0:\
           :mx#0:\
           :if=/usr/spool/lp0/hpdjlp:\
       :df=/usr/spool/lp0/filtro.dvi:\
       :nf=/usr/spool/lp0/filtro.gro:\
       :tf=/usr/spool/lp0/filtro.troff:\
       :rf=/usr/spool/lp0/filtro.postscript:\
           :lf=/usr/spool/lp0/hp-log:

  Tened en cuenta que la lnea :lp=/dev/lp0: le indica al sistema que la
  impresora est conectada a lp0, si la tenis en otro puerto (lp1, lo
  ms habitual) tendris que cambiar esa lnea a lp1 en la inmensa
  mayora de los casos.

  1. Con PostScript

     Nota: el parmetro -n es para que el comando echo no mande un
     avance de lnea despus de los cdigos.

     Fichero /usr/spool/lp0/hpdjlp (-- En caso de ser una distribucin
     RedHat, /var/spool/lpd/lp0/hpdjlp. Suele ser til hacer un symlink:
     ln -s /var/spool /usr/spool--)

     Programa la impresora para que use el juego de caracteres
     ISO-8859-1, papel A4, 66 lneas por pgina (ms o menos el estndar
     Unix) , y que acepte los avances de lnea com CR+LF.

       #!/bin/bash
       echo -ne "\033E\033(0N\033&l26A\033&l66P\033&k2G"
       cat
       echo -ne "\033E"

  Fichero /usr/spool/lp0/filtro.dvi

  Permite imprimir los ficheros dvi en la impresora HP-Deskjet. Los pasa
  primero a PostScript, y luego lo imprime mediante el ghostcript.  Cam
  biando el parmetro -sDEVICE (y probablemente la resolucin) se puede
  indicar otro tipo de impresora.

       #!/bin/bash
       cat > /tmp/fich.dvi.$$
       /usr/TeX/bin/dvips -q '-f*' < /tmp/fich.dvi.$$ | gs -q -sDEVICE=deskjet -r300 -dNOPAUSE \
       -sPAPERSIZE=a4 -sOutputFile=- -
       rm /tmp/fich.dvi.$$

  Fichero /usr/spool/lp0/filtro.gro

       #!/bin/bash
       #           Filtro de impresora para procesar la salida de Troff
       grops -g | gs -q -sDEVICE=deskjet -r300 -dNOPAUSE -sPAPERSIZE=a4 -sOutputFile=- -

  Fichero /usr/spool/lp0/filtro.troff

       #!/bin/bash
       #           Filtro de impresora para procesar ficheros Troff
       /usr/bin/groff -i -mdoc -mm -man | gs -q -sDEVICE=deskjet -r300 -dNOPAUSE -sPAPERSIZE=a4 \
       -sOutputFile=- -

  Fichero /usr/spool/lp0/filtro.postscript

       #!/bin/bash
       #           Filtro de impresora para procesar ficheros PostScript
       gs -q -sDEVICE=deskjet -r300 -dNOPAUSE -sPAPERSIZE=a4 -sOutputFile=- -

  2. Con DVI

     El fichero /etc/printcap es el mismo que en el caso anterior

     Fichero /usr/spool/lp0/hpdjlp

     Programa la impresora para que use el juego de carcteres
     ISO-8859-1, papel A4, 66 lneas por pgina (ms o menos el estndar
     Unix) , y que acepte los avances de lnea com CR+LF.

       #!/bin/bash
       #
       #   Filtro de impresora de caracter general.
       #
       #

       PATH=/usr/spool/lp0:$PATH:/usr/bin:/bin:/usr/local/bin:/usr/TeX/bin
       DIR_FILTROS=/usr/spool/lp0     # Directorio en el que se encuentran
                                      # los filtros de esta impresora

       echo -ne "\033E\033(0N\033&l26A\033&l66P\033&k2G"
       cat
       echo -ne "\033E"

  Fichero /usr/spool/lp0/filtro.dvi Permite imprimir los ficheros dvi en
  la impresora HP-Deskjet, emplea el programa dvidj500

       #!/bin/bash
       #
       #   Filtro de impresora   para los ficheros dvi.
       PATH=/usr/spool/lp0:$PATH:/usr/bin:/bin:/usr/local/bin:/usr/TeX/bin
       DIR_FILTROS=/usr/spool/lp0     # Directorio en el que se encuentran
                                      # los filtros de esta impresora

       TEXFONTS=/var/texfonts/pk/HPDeskJet/
       export TEXFONTS

       fichero=/tmp/filtro.dvi.$$
       cat > $fichero ;

       #echo -ne "\033E"          # Reseteo la impresora por si acaso

       # anulo la salida de errores para que lpd no guarde todo el rollo del
       # MakeTeXPK
       /usr/local/bin/dvidj500   <  $fichero  2> /dev/null

       rm $fichero

  Fichero /usr/spool/lp0/filtro.gro

  #!/bin/bash
  #           Filtro de impresora para procesar la salida de Troff
  grodvi  | /usr/spool/lp0/filtro.dvi

  Fichero /usr/spool/lp0/filtro.troff

       #!/bin/bash
       #           Filtro de impresora para procesar ficheros Troff
       PATH=/usr/spool/lp0:$PATH:/usr/bin:/bin:/usr/local/bin:/usr/TeX/bin
       DIR_FILTROS=/usr/spool/lp0     # Directorio en el que se encuentran
                                      # los filtros de esta impresora

       TEXFONTS=/var/texfonts/pk/HPDeskJet/
       export TEXFONTS

       /usr/bin/groff -i -Tdvi -mdoc -mcn -mgm -mgmse -man | $DIR_FILTROS/filtro.dvi

  Fichero /usr/spool/lp0/filtro.postscript

       #!/bin/bash
       #           Filtro de impresora para procesar ficheros PostScript
       gs -q -sDEVICE=deskjet -r300 -dNOPAUSE -sPAPERSIZE=a4 -sOutputFile=- -

  Espero que os sea til todo este rollo.

