Ich brauche sicher nicht zu erklären, dass das Portable Document Format (PDF) ein nicht mehr wegzudenkendes Dokumentenformat darstellt. Und so kennt auch jeder Administrator die Anforderung, dass für die Erstellung dieser Dokumente geeignete Lösungen existieren müssen. Der Kunde wird dabei immer sagen: Wenn möglich, sollte es nichts kosten.

Der folgende Leitfaden dient zum einen als Dokumentation für wiederkehrende Projekte aber auch als Anregung für Dritte. Dabei wird eine für ein Netzwerk geeignete Lösung für die automatische Erstellung und Ablage von PDF-Dokumenten über einen zentralen Drucker vorgestellt.

Update vom 13. August 2012

Auf Grund der größeren Veränderungen des PDFCreator nach Version 1.3.x habe ich einen vollständig überarbeiteten, neuen Artikel zur aktuellen Version geschrieben.

Voraussetzungen

Die folgenden Komponenten werden für die Funktion der vorgestellten Lösung benötigt:

  • Windows-Domäne mit zentraler Ablage der Benutzer-Basis-Ordner (Eigene Dateien)
  • Gruppenrichtlinie für die automatische Ordnererstellung (PDF-Dokumente)
  • Druckserver (ab Windows Server 2003 bis zu Windows Server 2008 R2)
  • Freeware: PDFCreator für die Erstellung der PDF Dokumente via Ghostscript
  • Skript SetACL.vbs für das Setzen der Dateiberechtigungen

Anleitung

Zu Beginn sollte eine Gruppenrichtlinie definiert (oder eine bestehende geändert) werden, die den neuen, Benutzer-spezifischen Ordner erstellt, der später die PDF-Dokumente enthalten soll. Die funktioniert am Einfachsten über die neuen Gruppenrichtlinenerweiterungen von Windows Server 2008. Unter der Annahme, dass die eigenen Dateien aller Domänen-Benutzer an einen zentralen Dateiserver umgeleitet werden

\\<Server>\User\%Username%\Eigene Dateien

so kann die neue Einstellung der Gruppenrichtlinie wie folgt aussehen (Benutzerkonfiguration, Einstellungen, Windows-Einstellungen, Ordner):

Dabei wird für jeden Benutzer (für den die Richtlinie Anwendung findet) ein Unterordner PDF-Dokumente innerhalb der eigenen Dateien erstellt.

Die zentrale Ablage der (Benutzer-)Daten auf einem Dateiserver hat nicht nur den Vorteil, das sich selbige einfach und zuverlässig sichern lassen, mit Hilfe des Ressourcen-Manager für Dateiserver (ab Windows Server 2003 R2) lassen sich so auch Kontingente (Speicherplatz-Quotas) oder Dateiprüfungen (Speicherverbot für bestimmte Dateitypen) elegant umsetzen.

Auf dem zentralen Druckserver (unter Windows Server 2008 R2 wird dafür die Rolle Druckverwaltung installiert) kann nun die Software PDFCreator als Serverversion installiert werden. Diese erstellt zunächst einen neuen Anschluss vom Typ PDFCreator Redirected Port und einen neuen lokalen Drucker, hier PDF-Drucker genannt:

Die Verknüpfung des PDFCreator sollte unbedingt aus dem Autostart-Ordner entfernt werden, da dieser Probleme bei zweimaliger Ausführung verursacht. Bevor der Drucker genutzt werden kann, muss er noch konfiguriert und als Dienst eingerichtet werden. Dafür benötigt man zwei Programme aus dem Windows Ressource Kit: srvany.exe und instsrv.exe (beide Tools sind auch voll unter Windows Server 2008 R2 funktionsfähig). Die Datei srvany.exe kann bspw. nach C:\Windows kopiert werden, die Syntax für die Registrierung des Dienstes würde in diesem Fall wie folgt lauten:

instsrv PDFCreator C:\Windows\srvany.exe

Im Anschluss kann mit Hilfe des Befehls

sc description PDFCreator “Netzwerk-PDF-Drucker”

eine Beschreibung definiert werden. Danach muss die Registrierung um folgende Einträge ergänzt werden (die Pfade sind entsprechend anzupassen):

[HKLM\SYSTEM\CurrentControlSet\Services\PDFCreator\Parameters]
REG_SZ:Application:"C:\Program Files (x86)\PDFCreator\PDFCreator.exe"
REG_SZ:AppDirectory:"C:\Program Files (x86)\PDFCreator"

Da der Drucker später PDF-Dokumente in den Verzeichnissen der Domänen-Benutzer erstellen soll, muss der Dienst als ein Benutzer gestartet werden – sinnvollerweise ist dieser Nutzer ein Mitglied der Domänen-Administratoren:

Der Drucker muss nun noch freigegeben und anschließend für die Benutzer (Clients) verbunden werden, letzteres kann eleganterweise wieder über eine Gruppenrichtlinie erfolgen:

Bevor die Benutzer den Drucker verwenden können, muss selbiger konfiguriert werden, dies geschieht über den Aufruf der Programmverknüpfung des PDFCreator. Es ist sinnvoll, für die Konfiguration des PDFCreator den erstellten Dienst zu beenden und alle Einstellungen über den PDF Druckmonitor vorzunehmen:

Um die PDF-Dokumente nach dem Druckauftrag automatisch im jeweiligen Ordner des Benutzers abzulegen, muss die Option “Automatisches Speichern” aktiviert und konfiguriert werden:

Die im Pfad verwendete Variable <REDMON_USER> entspricht dabei der Variable %Username%, weshalb das erzeugte PDF im Ordner des betreffenden Benutzers landet:

\\<Server>\User\%Username%\Eigene Dateien\PDF-Dokumente\<PDF-Datei>.pdf

Der Dateiname kann den eigenen Vorstellungen und Wünschen durch Nutzung verschiedener Variablen definiert werden. Außerdem kann die gesamte PDF-Erzeugung mit all ihren Parametern extrem granular – je nach Anforderung – eingestellt werden. Im Anschluss kann das Programm geschlossen und der Dienst erneut gestartet werden – der Drucker ist nun einsatzbereit.

Verwendung

Im folgenden Beispiel wurde für den Benutzer Testuser der freigegebene Drucker PDF-Drucker über eine Gruppenrichtlinie verbunden.

Druckt der Benutzer Testuser nun eine Testseite, so wird im Order PDF-Dokumente (Unterordner der eigenen Dateien von Testuser) nach Erhalt der Statusmeldung

die folgende Datei erstellt:

Besonders hervorzuheben ist die Eigenschaft, dass nach der Installation des PDFCreators (Definition des neuen Anschlußtyps und des ersten Druckers) im Drucker-Menü weitere neue PDF-Drucker hinzugefügt werden können:

Dabei nutzen alle Drucker den selben Anschluss PDFCreator: (PDFCreator Redirected Port, siehe oben), die unterschiedlichen Konfigurationen der jeweiligen Drucker lassen sich über individuelle Profil-Einstellungen verwalten und dem betreffenden Drucker zuweisen:

Erst dadurch wird der PDFCreator meiner Meinung nach zu einer extrem umfangreichen, flexiblen und variantenreichen Lösung.

Sonderfall der Dateiberechtigungen

In meinem Fall konnte ich als Testuser die so erstellte Datei allerdings nicht öffnen, da der Benutzer keine Zugriffsrechte besaß. Warum? Der zentrale Benutzer-Ordner ist auf dem Dateiserver wie folgt konfiguriert:

  • ERSTELLER-BESITZER: Speziell: Nur Unterordner und Dateien (Vollzugriff)
  • SYSTEM: Vollzugriff: Dieser Ordner, Unterordner und Dateien
  • Domänen-Admins: Vollzugriff: Dieser Ordner: Unterordner und Dateien
  • Domänen-Benutzer: Speziell: Nur dieser Ordner
    (Order erstellen, Besitz übernehmen, Attribute schreiben, Berechtigungen lesen)

Durch diese Einstellungen können alle Benutzer-Ordner automatisch erstellt werden, wobei der jeweilige Benutzer automatisch Vollzugriff auf seine Unterordner und Dateien hat (da er Ersteller-Besitzer ist), ohne das andere Benutzer seine Daten lesen können.

Allerdings wird die PDF-Datei auf dem Druckserver nicht von dem Besitzer des Ordners (in diesem Fall Testuser) sondern von einem Domänen-Administrator (Anmeldekonto des PDFCreator-Dienstes) erzeugt. Dieser ist selbstverständlich der Ersteller-Besitzer der Datei – diese Eigenschaft verliert so der Testuser und damit auch den Zugriff auf die Datei.

Aus diesem Grund habe ich zur Lösung des Problems das VBS-Skript SetACL.vbs geschrieben, das in das folgende Verzeichnis auf dem Druckserver (Installation des PDFCreator) entpackt werden muss:

C:\Program Files (x86)\PDFCreator\Scripts\RunProgramAfterSaving

Im Anschluss muss im Einstellungsmenü des PDFCreator die Option Aktion nach dem Speichern aktiviert werden:

Dadurch wird nach der Erzeugung der PDF-Datei das Skript mit den beiden Parametern <OutputFilename> und <REDMON_USER> aufgerufen. Dieses ruft wiederum das interne Windows-Tool icacls.exe auf, um die Berechtigung für die erzeugte PDF-Datei entsprechend zu ändern:

%Windir%\System32\icacls.exe “<OutputFilename>” /grant <REDMON_USER>:F

Der Befehl bewirkt, dass dem Benutzer <REDMON_USER> (der der den Druckauftrag erzeugt hat) die Berechtigung Vollzugriff (F) auf die Datei (kompletter Pfad in <OutputFilename>) gewährt wird.

Update vom 1. September 2011

Ich habe das Skript SetACL.zip soeben in der Version 1.2 bereitgestellt. Zusätzlich zum Vollzugriff wird nun auch die Besitzübernahme durch den in <REDMON_USER> übergebenen Benutzer vollzogen:

%Windir%\System32\icacls.exe “<OutputFilename>” /setowner <REDMON_USER>

Dadurch wird die erstellte PDF-Datei auch ordnungsgemäß in einer möglichen Kontingentbeschränkung erkannt.

Außerdem werden die Einträge im Ereignisprotokoll des Druckservers nun sehr detailliert mit Hilfe des Windows-Tools eventcreate.exe protokolliert – die Ereignisquelle lautet nun PDF-Drucker (<REDMON_PRINTER>):

PDF-Drucker-Skript <Skript-Name> auf <Druckservername>
Drucker: <REDMON_PRINTER>
Dokument: <Dokumentenname>.pdf
Speicherort: <Pfad zum Dokument>
Benutzer: <Domäne>\<Benutzer>
Dateigröße: xx,x KBytes

Dadurch wird jeder Ausdruck auch auf dem Druckserver (für jeden definierten PDF-Drucker) ordnungsgemäß protokolliert.

Fazit

Der obige Beitrag soll als Hilfestellung und Anregung für die Umsetzung eines zentralen PDF-Druckers mit automatischer Speicherung für die einzelnen Benutzer einer Domäne dienen. Es gibt professionelle (und kostenpflichtige) Varianten, die meist einfacher und mit etwas weniger Aufwand umzusetzen sind. Dafür bietet die beschriebene Lösung einen flexiblen Einsatz, da verschiedene Profile für unterschiedliche Einstellungen mehrerer Drucker erstellt werden können. Die Einrichtung ist in kurzer Zeit abgeschlossen und als Kosten fallen nur die Arbeitszeit an.

Wie bei allen meinen Beiträgen gilt: Bei Tipps, Vorschlägen sowie Fragen oder Kritiken hinterlasst bitte einen Kommentar.