[cups.general] A2ps filter for text

Kevin Ivory Ivory at SerNet.de
Mon Jul 11 03:21:40 PDT 2005


On 2005-07-06 18:26, Eric PEYREMORTE wrote:
> Does anyone know how to use a2ps as default filter for text files ?

I have done it and you can use my filter as a template for a similar
or more general one. Sorry, all comments are in German - but I hope
you will get the idea simply by reading the code. I needed a hack to
get landscape to work correctly. I am not sure if still needed for
recent cups versions.

1. /etc/cups/mime.convs
application/x-cshell    application/postscript  33      texttops-a2ps
application/x-perl      application/postscript  33      texttops-a2ps
application/x-shell     application/postscript  33      texttops-a2ps
text/plain              application/postscript  33      texttops-a2ps
text/html               application/postscript  33      texttops-a2ps

2. /usr/lib/cups/filter/texttops-a2ps

#!/bin/bash
# /usr/lib/cups/filter/texttops-a2ps
# 2001-10-23 ki
#   Das mit cups gelieferte texttops füllt die komplette Seite ohne Zusatzinfo.
#   Dieses Skript versucht soviele Defaults wie möglich zu verwenden.
#   Problematisch:
#     * file modification time: current time (-> left-title=)
#     * file name: temporary name (-> use $3)
#     * user: lp daemon (-> use $2 to extract passwd gecos field)
#  Bemerkung: CUPS-Filter müssen berücksichtigen, dass entweder fünf oder sechs
#       Argumente verwendet werden: Wenn lpr Stdin erhält, sind es fünf.
#       Wenn lpr als Argument einen Dateinamen bekommt, wird dieser als sechstes
#       Argument an den Filter weiter gereicht. a2ps kann problemlos mit beiden
#       Fällen umgehen.
#       Werden lpr mehrere Dateinamen übergeben, kommt nur der erste als
#       Argument im Filter an. :-(
# 2002-04-02 ki A2PS_BIN und A2PS_OPT Variablen, --pretty-print wg HTML-Problem
# 2004-07-26 ki landscape Behandlung mit a2ps statt mit Cups texttops
export LANG=german LC_TIME=de_DE
unset TZ
A2PS_BIN=/usr/bin/a2ps
A2PS_OPT="--left-title= --medium=A4 --pretty-print=plain --footer= --columns=1"
user="$2"
title="$3"
A2PS_OPT="$A2PS_OPT --center-title=${title} --title=${title}"
# Variable fullname wg Leerzeichen hier mit Anführungszeichen referenzieren
fullname="$(/bin/grep ^$user: /etc/passwd|/usr/bin/cut -f 5 -d :)"
# wenn da nichts drin steht, nehmen wir $user
fullname=${fullname:=$user}
# wenn da nichts drin steht, nehmen wir 'Unknown'
fullname=${fullname:='Unknown'}
#A2PS_OPT="$A2PS_OPT --define=user.name=${fullname}"
case "$5" in
  *landscape* )
# Sowohl a2ps als auch Cups texttops haben miserable landscape Defaults.
# Leider muss die Seitendrehung wieder entfernt werden, da sie von Cups spaeter
# noch einmal durchgefuehrt wird.
# Typische Werte fuer chars-per-line sind 112 oder 132. Wir verwenden mehr.
        A2PS_OPT="$A2PS_OPT --landscape --chars-per-line=160"
        $A2PS_BIN $A2PS_OPT --define=user.name="${fullname}" --output=- $6 |\
          /bin/grep -v '^sh 0 translate 90 rotate$'
        ;;
  * )
        A2PS_OPT="$A2PS_OPT --portrait --chars-per-line=80"
        $A2PS_BIN $A2PS_OPT --define=user.name="${fullname}" --output=- $6
        ;;
esac


Hope this helps,
Kevin
-- 
   _             |  Kevin Ivory          |  Tel: +49-551-3700000
  |_     |\ |    |  Service Network GmbH |  Fax: +49-551-3700009
  ._|ER  | \|ET  |  Bahnhofsallee 1b     |  mailto:Ivory at SerNet.de
 Service Network |  37081 Goettingen     |    http://www.SerNet.de/




More information about the cups mailing list