Hallo erstmals herzlichen Dank an Alle für die Beiträge die zu meiner Frage in so kurzer Zeit eingegangen sind. Deine Antwort hat meinen Wunsch genau getroffen. Ich kann die Druckausgabe eines beliebigen Programms zuerst in eine Datei schreiben, diese analysieren (Ascii, PS,) und nach allfälliger Konvertierung nach PS ansehen und danach weiter zum Drucker, Fax oder Mail senden. Bin begeistert. Grüsse Bernhard . Am Donnerstag, 27. Oktober 2005 11.06 schrieb Hans-Werner Hilse:
Moin,
On Thu, 27 Oct 2005 09:58:52 +0200 (CEST)
Johannes Meixner
wrote: Problematisch! Wie soll "pipe an Vorschau" funktionieren können?
Na, halt statt lpr ein Vorschauprogramm starten.
Hintergrund: Man mache sich klar, wie ein Drucksystem (CUPS und auch LPRng/lpdfilter) arbeitet, [...]
Uninteressant, da das Drucksystem erst nach der Vorschau ins Spiel kommt.
lpr oder lp erzeugen einen Druckauftrag und übergeben den an das Drucksystem. Auf stdout kommt dabei nicht der Druckauftrag raus, sondern die (Fehler)-Meldungen von lpr oder lp. Daher kann "pipe an Vorschau" nicht funktionieren.
Alle Programme, die drucken, tun das für gewöhnlich, indem sie die (Postscript-)Daten an ein Programm pipen.
Der Druckauftrag im Drucksystem wird vom Benutzer "lp" verarbeitet. Dieser Benutzer hat normalerweise keinen Zugriff auf die graphische Oberfläche des Benutzers, der den Druckauftrag gestartet hat. Daher kann "Vorschau" nicht ohne weiteres funktionieren (*).
Wie gesagt, lprng/CUPS/lpr kommen erst nach der Vorschau ins Spiel. Funktionsweise siehe z.B. XPP, http://cups.sf.net/xpp/
Der einzige allgemein funktionierende Ansatzpunkt, der mir einfällt, ist die CUPS Filterkette vor "pstops" um einen zusätzlichen Filter zu erweitern, der dann als Eingabe PostScript bekommt und das dann "irgendwie" - siehe (*) - bei dem Benutzer, der den Druckauftrag gestartet hat, darstellt und je nachdem wie das Darstellungsprogramm (z.B. gv) beendet wurde, entweder das PostScript auf stdout an den Rest der CUPS Filterkette ausgibt, oder abbricht.
Wie erwähnt, würde ich CUPS nicht antasten. Was benötigt wird, ist stattdessen ein kleines bash-Programm: ---snip--- #!/bin/sh PSCACHE=$(mktemp) PDFFILE=/var/pdfarchiv/$(date +%d-%m-%y_%H-%I)_$(id -un).pdf cat > $PSCACHE gv $PSCACHE Xdialog --title "Drucken?" --yesno "Ist alles OK? Drucken?" 9 30 && lpr "$@" $PSCACHE Xdialog --title "PDF erstellen?" --yesno "PDF ins Archiv legen?" 9 30 && ps2pdf $PSCACHE $PDFFILE rm $PSCACHE ----snip----
Das einfach statt lpr benutzen und fertig ist. Es benutzt - Ghostscript - gv - xdialog
Gruß,
-hwh