PDF-Drucker unter Linux

Ein Linux-System als zentraler PDF-Server für Windows- und Linux-Nutzer spart Kosten und vereinfacht den Administrationsaufwand. Die vorgestellten Lösungen funktionieren in vernetzten Umgebungen und über verschiedene Plattformen hinweg.

Im Folgenden wird beschreiben, wie man einen PDF-Netzwerkdrucker unter Linux einrichtet.

Grundvoraussetzung für die Ausgabe von Druckjobs in eine PDF-Datei ist eine Software, die die notwendige Umwandlung der Daten übernimmt. Unter Linux bietet sich für diese Aufgabe das Paket Ghostscript an.

Dieser universelle Übersetzer für Postscript-Dateien bietet neben vielen anderen Optionen auch den Export in das PDF-Format an. Zudem ist Ghostscript in quasi jeder aktuellen Linux-Distribution verfügbar und per Default bereits eingerichtet, was den Installationsaufwand deutlich minimiert.

Da das endgültige Ziel ein über das Netz ansprechbarer, virtueller Drucker sein soll, bietet es sich an, gleich eines der unter Linux verfügbaren Systeme CUPS oder Samba für diese Aufgabe heranzuziehen.

 


Samba und ps2pdf

 

Eine relativ einfache Möglichkeit einen zentralen PDF-Schreiber zu erstellen ist die Kombination aus Samba und den ps2pdf-Tools aus Ghostscript. Dazu richten wir uns erstmal, an einem geeigneten Ort, ein Script ein, welches die Umwandlung durchführt:

 

#!/bin/sh
USER=`whoami`
#ZEIT=`date +%Y'-'%m'-'%d'-'%H'.'%M`   #liest die zeit aus

ZEIT=`date +%Y'-'%m'-'%d'-'%H'.'%M`

#und haengt den Benutzernamen an
#ZEIT=`date +%Y'-'%m'-'%d'-'%H'.'%M'.'$USER`
#und haengt den Spoolnamen an
#ZEIT=`date +%Y'-'%m'-'%d'-'%H'.'%M'.'$S1`

#erzeugt PDF-Datei, dateiname = $zeit
#konvertiert PostScript nach PDF mittels ghostscript
#ps2pdf $1 $ZEIT.pdf
#konvertiert PostScript nach PDF 1.2 (kompatibel zu Acrobat 3)
#ps2pdf12 $1 $ZEIT.pdf
#konvertiert PostScript nach PDF 1.3 (kompatibel zu Acrobat 4)
ps2pdf13 $1 $ZEIT.pdf
rm -f $1
mv $ZEIT.pdf /samba/transfer/pdf/

 

Dieses Script muß mit chmod 755 ps2pdf.sh ausführbar gemacht werden, damit Samba es auch ausführen kann. Auch muß der Pfad in der letzten Zeile vorhanden sein und globale Schreibrechte besitzen.

Als nächstes richten wir uns die nachfolgende Sektion in der smb.conf von Samba ein:

 

[PS2PDF]
    path                 = /spool
    comment              = PDF - Druck => ps2pdf
    guest ok             = yes
    printable            = yes
    browseable           = yes
    print command        = /myjob/ps2pdf.sh %s

 

Das Verzeichnis /spool, wie es hier verwendet wird muß vorhanden sein und world-writeable sein. Man kann auch /tmp oder etwas ähnliches verwenden. Es muß halt zusammenpassen. Das Gleiche gilt für das Verzeichnis, in welchem wir das Script ps2pdf.sh abgelegt haben.

Ist all dies geschehen, muß nur noch Samba neu gestartet oder geladen werden. Dies geschieht am besten mit:

/etc/rc.d/smb restart

oder

/etc/rc.d/smb reload

 

Windows-Drucker einrichten

Nun sollte dieser Drucker in der Netzwerkumgebung verfügbar sein.

Ein Doppelklick darauf startet den Drucker-Installationsassisten.

Unter Window 2000 wähle ich den Apple Color LW 12/660 PS aus.

 

 

Danach steht der PS2PDF-Drucker unter Windows zur Verfügung. Alle erzeugten PDF`s landen dann im vorgegebenen Verzeichnis, zu welchem die Windows-Clients natürlich Zugang haben sollten.

Grundsätzlich ist es möglich auch einen anderen als den von mir verwendeten PostScript-Treiber zu verwenden. Möglicherweise gibt es ja auch bessere. Da hilft eben nur ausprobieren.

 


CUPS-PDF-Drucker

 

Mit Hilfe von CUPS scheint es mehrere Möglichkeiten zu geben PDF-Dokumente zu erstellen und diese auch gezielt und benutzerspezifisch zuzustellen.

Die Lösung von Volker C. Behr legt in einem benutzerspezifischen Verzeichnis die erzeugten PDF-Dateien ab. Die benötigten Quellen oder RPM's sowie die englische Beschreibung befinden sich unter: http://www.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/

 

Die Vorgehensweise:

- In der Datei /etc/cups/cupsd.conf muß die Variable RunAsUser von Yes auf No geändert werden. Denn leider benötigt der verwendete Treiber root-Rechte.

 

- Dann laden wir das aktuelle TAR herunter und entpacken es mit:

tar xzvf cups-pdf_2.3.1.tar.gz

 

- Wir wechseln in das neu erstellte Verzeichnis und dann in das Verzeichnis src, passen bei Bedarf die Datei cups-pdf.h an, und geben folgenden Befehl ein:

gcc -O9 -s -o /usr/lib/cups/backend/cups-pdf cups-pdf.c

 

- Dann wird die Datei cups-pdf.conf nach /etc/cups/ und die Datei PostscriptColor.ppd.gz nach /usr/share/cups/model/ kopiert. Beide Dateien befinden sich im Unterverzeichnis extra.

 

- Die Datei PostscriptColor.ppd.gz muß noch mit

chmod 755 /usr/share/cups/model/PostscriptColor.ppd.gz

ausführbar gemacht werden.

 

- Um die Vorbereitung abzuschließen, muß nur noch CUPS neu gestartet werden. Dies geschieht am besten mit /etc/rc.d/cups restart.

 

- Jetzt müssen wir nur noch einen CUPS-Drucker einrichten. Zuvor stellen wir aber sicher, dass CUPS den Back-End-Treiber auch erkannt hat und verwendet. Dazu dient der folgende Aufruf des Hilfsprogramms lpinfo:

lpinfo -v | grep cups-pdf

Erfolgt keine Fehlermeldung, dann geben wir

lpadmin -p CUPS-PDF -v cups-pdf:/ -P /usr/share/cups/model/PostscriptColor.ppd.gz -E

Hat alles geklappt, gibt das Kommando keinerlei Rückmeldung aus. Jedwede Ausgabe von Informationen auf dem Bildschirm entspricht hingegen einem aufgetretenen Fehler.

 

- Zu guter Letzt muß nur noch ein geeigneter Druckertreiber unter Windows 2000/XP eingerichtet werden. Ich habe mit den Treibern für den Apple Color LW 12/660 PS oder Apple Color Laserwriter 12/600 oder Minolta Color Pageworks/Pro PS recht gute Erfahrungen gemacht. Diese Treiber sind in Windows 200/XP bereits vorhanden. Wie man einen solchen Treiber, der über HTTP druckt einrichtet, steht in meiner Anleitung für CUPS.

 

- Wird dann über den neu eingerichteten Drucker gedruckt, so wird in /var/spool/cups-pdf/benutzername/ die frisch erstellte PDF-Datei abgelegt.

 


 

 

CUPS und ps2pdf

 

Jetzt wäre es noch etwas schöner, wenn die erzeugten PDF's den Benutzern per eMail zugestellt werden könnten. Dafür habe ich mir folgendes Script zusammengestellt:

 

#!/bin/sh
#
PRINTTIME=`date +%Y-%m-%d_%H.%M.%S`

# Verzeichnis in dem CUPS die Spooldateien ablegt
# wichtig ist der Joker
SOURCEFILE=/var/spool/cups/d*$1-001

# Verzeichnis in welches das PDF-Dokument geschrieben werden soll
# mit Datum und Uhrzeit
#OUTFILE=/transfer/PDF/$PRINTTIME.pdf
# mit Benuter, Datum und Uhrzeit
OUTFILE=/transfer/PDF/$2-$PRINTTIME.pdf

# nur fuer Testzwecke
#rm /transfer/PDF/test.txt
#touch /transfer/PDF/test.txt
#chown nobody:nogroup /transfer/PDF/test.txt
#chmod 666 /transfer/PDF/test.txt
#echo $PRINTTIME >> /transfer/PDF/test.txt
# Jobnummer
#echo $1 >> /transfer/PDF/test.txt
# Benutzername
#echo $2 >> /transfer/PDF/test.txt
# Dateiname aus der Anwendung
#echo $3 >> /transfer/PDF/test.txt
#echo $4 >> /transfer/PDF/test.txt
#echo $5 >> /transfer/PDF/test.txt
#echo $6 >> /transfer/PDF/test.txt


#konvertiert PostScript nach PDF mittels ghostscript
#ps2pdf $SOURCEFILE $OUTFILE
#konvertiert PostScript nach PDF 1.2 (kompatibel zu Acrobat 3)
#ps2pdf12 $SOURCEFILE $OUTFILE
#konvertiert PostScript nach PDF 1.3 (kompatibel zu Acrobat 4)
#ps2pdf13 $SOURCEFILE $OUTFILE
ps2pdf13 -r144 -dPDFSETTINGS=/prepress $SOURCEFILE $OUTFILE

chmod 666 $OUTFILE

#mutt -s "PDF-File" -a "$OUTFILE" $2@mydomain.de < /dev/null
#mail -s "PDF-File" -a "$OUTFILE" $2@mydomain.de < /dev/null
mail -s "PDF-File" -a "$OUTFILE" $2@mydomain.de < /myjob/mail.txt

rm $OUTFILE

 

Dieses Script wird einfach im Verzeichnis /usr/lib/cups/backend mit dem Namen pdf gespeichert. Eigentümer dieser Datei sollte root sein. Auch müssen wir diese Datei noch ausführbar machen.

Abschliessend wird noch eine PPD- Datei für das CUPS benötigt. Problemlosen Betrieb ermöglicht die "distiller.ppd" von Acrobat. Diese ist auf der Website von Adobe im freien Download

oder hier erhältlich:

Die "distiller.ppd" ist in das Verzeichnis /usr/share/cups/model/ zu kopieren und CUPS anschließend zu restarten ("service cups restart") oder /etc/rc.d/cups restart

Wichtig ist noch, dass die distiller.ppd die richtigen Leserechte besitzt.

 

Nach den o.g. vorbereitenden Aktivitäten wird unter CUPS der Drucker eingerichtet:

 

lpadmin -p PDF -v pdf:/ -E -P /usr/share/cups/model/distiller.ppd

 

Jetzt steht die neue Druckerwarteschlange zur Verfügung.

- Zu guter Letzt muß nur noch ein geeigneter Druckertreiber unter Windows 2000/XP eingerichtet werden. Ich habe mit den Treibern für den Apple Color LW 12/660 PS oder Apple Color Laserwriter 12/600 oder Minolta Color Pageworks/Pro PS recht gute Erfahrungen gemacht. Diese Treiber sind in Windows 200/XP bereits vorhanden. Wie man einen solchen Treiber, der über HTTP druckt einrichtet, steht in meiner Anleitung für CUPS.

 

Noch ein paar Anmerkungen zum Script:

  • Es wurde auf einer SuSE 9.0 entwickelt, sollte aber auf jeder anderen Distribution funktionieren.
  • Die Variable SOURCEFILE muß der Distribution entsprechend angepaßt werden.
  • Die Variable OUTFILE muß angepaßt werden. Einfach ein anderes Verzeichnis wählen und/oder anlegen und mit entsprechenden Schreibrechten versehen.
  • Die Datei /myjob/mail.txt muß angelegt werden, da in dieser Datei die Mitteilung für den Benutzer liegt. Möglich ist selbstverständliche ein anderes Verzeichnis.
  • Dieses Script wird nur in einer Netzwerkumgebung funktionieren, in welcher keine SMTP-Authentifizierung nötig ist.
  • Die Parameter -r144 -dPDFSETTINGS=/prepress haben bei mir eine Verbesserung der Bildqualität bewirkt. Ohne diese Angaben werden Grafiken oder Bilder etwas unscharf. Wer etwas mehr dazu wissen will, der sollte sich mal die Beschreibung für ps2pdf anschauen. Weiterhin kann es hilfreich sein sich mal folgenden Befehl anzusehen:
    gs -dBATCH -dUseCIEColor -dNOPAUSE -r144x144 -sDEVICE=pdfwrite -sOutputFile=$OUTFILE $SOURCEFILE
    Dieser Ghostscript-Befehl ist für alle interessant, die eine Farbumwandlung von CMYK nach RGB benötigen.

Für alle, denen ein LDAP-Server zur Verfügung steht, für die habe ich hier ein modifiziertes Script, mit eingebauter LDAP-Abfrage:

pdf

Selbstverständlich müssen dann unter LDAP Parameter noch ein paar Anpassungen durchgeführt werden.

Auch muß die Adresse administrator@mydomain.de, welche im Fehlerfall die Mail zugeschickt bekommt, angepasst werden.


Mit Ghostscript einen kostenlosen PDF-Writer erstellen (Windows 2000)

Selbstverständlich ist es auch möglich direkt unter (Windows 2000) mit Hilfe von Ghostscript v7.04 PDF's zu schreiben. Allerdings werde ich hier keine Anleitung dafür platzieren, da es dafür bereits eine sehr gute Anleitung von Wolfgang Reszel gibt, die ich bereits vor einiger Zeit erfolgreich getestet habe.

Erreichen kann man diese unter:

http://www.rumborak.de/produktives/ghostscript/win2k/pdf.html

 

Weitere brauchbare Anleitungen gibt es unter:

http://einklich.net/anleitung/pdf.htm

 

Für einen einzelnen Arbeitsplatz ist dies sicherlich die praktikabelste Lösung. Innerhalb eines größeren Netzwerks ist, wegen des nicht zu vernachlässigenden Installationsaufwandes, eine andere Lösung vorzuziehen.