[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