Gelegentlich kommt es vor, dass man vor der Aufgabe steht mehrere Dokumente in doppelter Ausführung zu drucken und das am besten noch in einer farbigen und in einer monochromen Ausgabe. Oft bedeutet das viel manuelle Arbeit, da jeweils der Druckauftrag für die farbige Fassung und für die schwarz/weiße gestartet werden muss.

Hierfür gibt es jedoch Abhilfe und verschiedene Lösungsansätze. Wer schon nach Software gesucht hat, welche das Verteilen eines Druckauftrages an zwei Drucker realisieren kann, ist bestimmt auf das Programm PrintMulti gestoßen. PrintMulti ist ein sehr mächtiges Tool, man hat viele Einstellungsmöglichkeiten und ist für Clientbetriebssysteme kostenfrei erhältlich, jedoch ist der Konfigurationsaufwand nicht ohne. Deswegen möchte ich hier eine Alternative vorstellen welche aus einer Kombination von Foxit-PDF Reader, CutePDF und einem AutoIT 3 Skript besteht.

Grundlage dafür bot mir aus dem AutoIT Forum ein Beitrag mit Codebeispiel, der schon fast dem entsprach, was ich in die Tat umsetzen zu versuchte. Die Funktionsweise ist schnell und einfach erklärt.

Es wird das zu druckende Dokument als PDF mittels CutePDF (oder anderen PDF-Exporten) ausgegeben und an einen bestimmten Ort abgelegt. Das AutoIT Skript schaut nach, ob neue Dateien vorhanden sind, wenn ja werden diese in einen Archivorder verschoben und umbenannt (aktuelles Datum+Uhrzeit) und im Anschluss mit FoxitPDF der Druckauftrag für beide Drucker gestartet. Zwar ist dies nicht die eleganteste Lösung, jedoch funktioniert sie in der Praxis recht gut und hat einen geringeren Einrichtungsaufwand als PrintMulti. Im Anschluss noch der Quelltext des AutoIT Skripts:

$ordner = "C:\PDFs\"
$archiv = "C:\druck\"
$foxit = "C:\Programme\Foxit Software\Foxit Reader\Foxit Reader.exe"
$drucker1 = "Drucker 1"
$drucker2 = "Drucker 2"

While 1
  Sleep(1000)
  $file = FileFindFirstFile($ordner & "*.pdf")
  If $file <> -1 Then Print()
  FileClose($file)
WEnd

Func Print()
While 1
  $pdffile = FileFindNextFile($file)
  $neuname = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & @MSEC
  If @error Then ExitLoop
    FileMove($ordner & $pdffile, $archiv & $neuname & ".pdf")
    While 1
      Sleep(100)
      If FileExists($archiv & $neuname & ".pdf") Then
    ExitLoop
  EndIf
WEnd

RunWait('"' & $foxit & '" /t "' & $archiv & $neuname & '.pdf" $drucker1')
RunWait('"' & $foxit & '" /t "' & $archiv & $neuname & '.pdf" $drucker2')
WEnd
EndFunc ;==>Print

In den Variablen $drucker1 und $drucker2 kann man die Druckernamen, welche auf dem System vorhanden sind definieren. Natürlich kann man auch die Drucker selber umbenennen. Wichtig hierbei ist, dass die Drucker direkt von dem Client angesprochen werden und nicht über eine Samba Freigabe. Die Ordner „druck“ und „PDFs“ müssen manuell angelegt werden und natürlich schreibende sowie auch lesende Zugriffsrechte für die jeweiligen Nutzer haben.

(Picture by glasseyes view)

Edit TA (13.12.2017):

@Sascha hat in den Kommentaren das Skript hergenommen, aktualisiert und um eine Funktion erweitert: Fächerauswahl!

Unbedingter Lesebefehl!

Marcus Hanisch

Autor: Marcus Hanisch

Marcus hat bei NETWAYS eine Ausbildung zum Fachinformatiker Systemintegration absolviert und diese mit einer Projektarbeit zu "OpenNebula" erfolgreich abgeschlossen. Nun ist er als System-Engineer, Packet Radio Spezialist und Fachbeauftragter für gastronomische Köstlichkeiten bei uns unter Vertrag und wir sind froh dass wir ihn haben.