PDFs mit Briefbogen per Samba erzeugen

E-Mails mit PDF-Anhängen lösen das gute alte Fax ab. Viele Programme erzeugen PDF-Dateien, aber viele Word- und Excel-Vorlagen sind zum Ausdrucken auf Briefpapier gedacht. 

 

Bisher haben wir tatsächlich den Brief auf Papier ausgedruckt, eingescannt und dann per E-Mail verschickt. Das ist nicht nur umständlich, sondern erzeugt auch große, qualitativ minderwertige PDF-Dateien, die keinen echten Text enthalten und darum nicht gescheit durchsuchbar sind.

 

Dabei ist die Lösung doch so einfach, wenn man einen Linux- oder BSD-Server hat. Der Fileserver samba stellt hervorragende Druckdienste zur Verfügung.

 

Unter anderem kann man einen virtuellen PostScript-Drucker zur Verfügung stellen, auf den die Windows-Computer drucken können. So erhält man auf dem Server eine gültige PostScript-Datei, die mit dem Tool ps2pdf einfach in ein PDF umgewandelt werden kann.

 

Das Tool pdftk kann diese PDF-Datei mit einer Briefbogen-PDF-Datei hinterlegen, so dass mit einem Druck-Befehl eine perfekte Geschäfts-E-Mail erhält, die der Server im einfachsten Fall auf dem Server speichert, wo der Benutzer sie abholen kann.

 

Voraussetzung:

Ein laufender Samba-Server sowie die Pakete ghostscript (enthält ps2pdf), pdftk und CUPS.

 

Inspiriert durch die kleine HowTo habe ich das folgende Skript mit dem Namen /usr/sbin/pdfprint.sh geschrieben:

#!/bin/bash                                                                                        
# /usr/sbin/pdfprint.sh
#
#Konvertiert die gedruckte PostScript-Datei in pdf                                                #und unterlegt einen Briefbogen                                                                    
#
#$1 = spool file                                                                                   
#$2 = uid (Username)                                                                               
#$3 = Firma                                                                                        

OUTPUTFILE=pdf-$2-`date +%Y%m%d%H%M%S`.pdf
OUTPUTPATH=/srv/files/

# Hier liegen die Briefbogendateien                                                                
LOGFILE=pdfcreate.log
BRIEFBOGENPATH=/srv/files/briefboegen
# Der Dateiname heißt 'Firma'_briefbogen.pdf                                                       
BRIEFBOGENSUFFIX=_briefbogen.pdf
# Folglich sieht so der Dateiname des leeren Briefbogens aus                                       
BRIEFBOGENFILE=$BRIEFBOGENPATH/$3$BRIEFBOGENSUFFIX
# Gibt es den Briefbogen?                                                                          
if [ -e $BRIEFBOGENFILE ]; then
    echo Konvertierte $1 mit $BRIEFBOGENFILE in $OUTPUTPATH/$OUTPUTFILE >> $OUTPUTPATH/$LOGFILE
    /usr/bin/ps2pdf $1 - | /usr/bin/pdftk - background $BRIEFBOGENFILE output $OUTPUTPATH/$OUTPUTFILE >> $OUTPUTPATH/$LOGFILE
else
    echo Briefbogendatei $BRIEFBOGENFILE nicht gefunden >> $OUTPUTPATH/$LOGFILE
    echo Konvertierte $1 in $OUTPUTPATH/$OUTPUTFILE >> $OUTPUTPATH/$LOGFILE
    /usr/bin/ps2pdf $1 $OUTPUTPATH/$OUTPUTFILE
fi
echo PDF erstellt. Spool-Datei löschen $1 >> $OUTPUTPATH/$LOGFILE
rm $1 >> $OUTPUTPATH/$LOGFILE
echo Fertig. >> $OUTPUTPATH/$LOGFILE
echo >> $OUTPUTPATH/$LOGFILE

Die Variablen BRIEFBOGENPATH, OUTPUTPATH sollte man natürlich an seine Festplattenstruktur anpassen.

 

Das Skript wird aufgerufen mit dem Namen der Spool-Datei (PostScript), dem Benutzernamen (der Bestandteil) des PDF-Dateinamens wird und dem Firmennamen, der zur Auswahl des korrekten Briefpapiers benötigt wird.

 

Wenn kein gültiger Firmenname übergeben wird (wenn keine Briefbogendatei gefunden wird), wird eine PDF-Datei ohne Briefpapier erzeugt.

 

Die wichtigste Zeile ist:

ps2pdf $1 - | pdftk - background $BRIEFBOGENFILE output $OUTPUTFILE

 

Man könnte sie auch direkt in die smb.conf schreiben, aber dieses Skript finde ich etwas ordentlicher. Tipp: Wenn man statt background den Befehl stamp verwendet, wird die Briefbogen-Datei auf den Text gelegt. Das macht natürlich nur dann sinn, wenn diese auch transparente Bereiche hat.

 

Wichtig ist, dass das Skript mit

chmod u+x pdfprint.sh 

ausführbar gemacht wird. Sonst läuft es nicht.

 

Jetzt muss noch die smb.conf um die Drucker erweitert werden:

[global]
   ...
   printing = sysv
   load printers = yes
   ...

[printers]
   comment = All Printers
   path = /var/spool/samba
   public = yes
   guest ok = yes
   writeable = yes
   printable = yes
   browseable = yes

[pdf-acme]
   comment = PDF mit Acme-Briefbogen auf K: erzeugen
   path = /var/tmp
   printable = Yes
   print command = /usr/sbin/pdfprint.sh %s %U acme
   lpq command = /bin/true
   create mask = 0600
   use client driver = yes

Damit das ganze läuft, muss man den Briefbogen der Firma acme dort hinterlegen, wo pdfprint ihn erwartet: 

 

/srv/files/briefboegen/acme_briefbogen.pdf

 

Wichtig ist, dass der Server die Leserechte hat.

 

Das Skript ist modular aufgebaut. Man kann also in der smb.conf noch weitere PDF-Drucker anlegen, wenn man mehrere Firmen im Netzwerk hat.

 

Nachdem der Server mit dem Befehl

killall -HUP smbd 

gezwungen wurde, die smb.conf neu einzulesen, sieht man auf den Windows-Clients schon den pdf-acme-Drucker.

 

Wenn man ihn doppelklickt, wird man von Windows nach dem Druckertreiber gefragt. Entscheident ist, dass man jetzt einen PostScript Drucker auswählt. Ich habe gute Erfahrungen mit "HP LaserJet 5P/5MP" gemacht. Unter Windows 7 mit 64 Bit verwende ich den "HP Color LaserJet 2800 Series PS"

Windows XP: Druckertreiber auswählen
Windows XP: Druckertreiber auswählen

Fertig! Wenn man jetzt auf diesen neuen Drucker druckt, entsteht fast augenblicklich die PDF-Datei im dafür vorgesehenen Ordner.

 

Für die Benutzer ist das also kinderleicht. Sie können mit jedem Windows-Programm auf diesen Drucker drucken. Man sollte ihnen natürlich verraten, wo sich die fertige PDF-Datei befindet.

Write a comment

Comments: 0