PCL-Testausdrucke anzeigen

Anforderung

Beim Entwurf neuer Prozesse und Formulare mit print2forms werden oft viele Testausdrucke benötigt, insbe­sondere, wenn die Formulare dynamische Inhalte enthalten. Dann muss mit verschiedenen Testdaten geprüft werden, inwieweit sich das Formular an die geänderten Druckdaten anpasst.

Dabei geht einige Zeit für die Erstellung der Ausdrucke ins Land und es entstehen Kosten für Papier und Toner/Tinte.

Ein Fortschritt wäre, wenn man sich die Ausdrucke stattdessen direkt am Rechner ansehen könnte, ohne dass tatsächlich Papier bedruckt werden müsste. 1)

Zu diesem Zweck wurde bereits vor einiger Zeit ein spezielles Hilfsprogramm p2fViewer.exe geschrieben, welches einen Netzwerkdrucker simuliert und die empfangenen Daten als PCL-Datei ablegt. Um dann diese PCL-Datei in ein Druckbild zu ver­wandeln, wurde in der Vergangenheit ein Programm der Firma Lincoln & Co (http://www.lincolnco.com/) verwendet (siehe auch Tip PDF- und TIFF-Datei erzeugen).

Leider hat es den Anschein, dass dieses Programm nicht mehr weiterentwickelt wird. Jedenfalls nutzt print2forms inzwischen eine ganze Reihe von PCL-Sequenzen, die nicht oder nicht korrekt dargestellt werden können. Das betrifft vor allem die neuen Schriften aus der Schriftenbibliothek, wenn es um die Kodierung UTF-8 geht, die Grundlage der Nutzung von vielen multinationalen Zeichensätzen ist.

Es musste also eine Alternative gesucht werden, damit auch die neuen Features von print2forms uneingeschränkt genutzt werden können.

Realisierung

Als Alternative bietet sich das Programm GhostPCL der Firma Artifex an, das für die Nutzung durch Endanwender unter der GNU Affero GPL Lizenz kostenfrei eingesetzt werden kann. 2) Bei diesem Programm handelt es sich aber lediglich um einen reinen Konverter, der aus dem PCL-Datenstrom andere Datenströme, Bilder oder PDF-Dateien erzeugt.

Man benötigt also noch irgendein anderes Programm zum Anzeigen des Druckergebnisses.

Schaut man sich die möglichen Ausgabeformate von GhostPCL an, bieten sich zwei Lösungsmöglichkeiten an:

Lösung mit PDF

Das naheliegendste scheint zu sein, GhostPCL aus den Druckdaten eine PDF-Datei machen zu lassen, und dann ein beliebiges auf dem Rechner bereits installiertes Programm zur Anzeige der PDF-Datei aufzurufen.

Das kann sowohl der Adobe-Reader, der Foxit-Reader oder etwa SumatraPDF sein.

Die Programme unterscheiden sich in ihrem Leistungsumfang erheblich, aber das ist im hier vorliegenden Fall nur insofern von Interesse, als es die Startzeit des Programms beeinflusst. Viel wesentlicher ist, ob die Einstellungen zur Anzeige von einem externen Skript her gesetzt werden können. Da das nur sehr eingeschränkt möglich ist, gilt eigentlich die Empfehlung, nicht den Standard-PDF-Betrachter zu wählen, sondern einen, der ausschliesslich für die Anzeige von print2forms-Ausgaben eingestellt werden kann.

Aus diesem Grund nutzt das nachfolgende Beispiel SumatraPDF, welches in der portablen Version über eine lokale Konfigurationsdatei (editierbarer Text) verfügt. SumatraPDF ist frei und kann für diesen Zweck genutzt werden.

Der Einfachheit halber gehen wir davon aus, dass alle notwendigen Dateien in einem Verzeichnis C:\View installiert sind. Das reduziert die Pfadlänge entsprechend 3) und vermeidet eine ganze Reihe sonst notwendiger Hochkommata. Dort soll GhostPCL liegen (die gpcl6win64.exe und die gpcl6win64.dll für 64-Bit Systeme, ansonsten gpcl6win32.exe und die gpcl6win32.dll für 32-Bit Systeme). Ausserdem die Batch-Dateien mit den Kommandos, wie unten beschrieben. Für die Lösung mit PDF muss in diesem Verzeichnis auch die Datei SumatraPDF.exe liegen.

In der Kommandozeile des Programms p2fViewer.exe wird jetzt statt wie bisher kein Programm, sondern eine Batch-Datei mit Befehlen für die Windows-Commandshell aufgerufen (die Hochkommata sind wichtig!): 4)

 cmd /s /c ""C:\View\makepdf.bat" "%1"" 

Das Spool-Verzeichnis des p2fViewers muss auf C:\View gesetzt werden. Diese Batch-Datei selbst enthält folgende Befehle:

makepdf.bat
C:\View\gpcl6win64.exe -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile="C:\View\View.pdf" %1
C:\View\SumatraPDF.exe -view "single page" "C:\View\View.pdf"
del C:\View\View.*

Als erstes wird GhostPCL aufgerufen, um eine PDF-Datei aus der angelieferten PCL-Datei zu erzeugen. Die PDF-Datei erhält dabei der Einfachheit halber immer den Namen View.pdf. Diese PDF-Datei wird dann an das Programm SummatraPDF zur Anzeige übergeben. Nachdem die Anzeige in SumatraPDF beendet ist, werden die PDF- und die PCL-Datei gelöscht.

Lösung mit Bildern

Eine zweite Lösung, die keine weiteren Programme benötigt, nutzt die Erzeugung von Bildern durch GhostPCL. Das ist nicht wirklich langsamer, ermöglicht aber, den mit Windows mitgelieferten Bildbetrachter einzusetzen.

Die Grundidee beruht darauf, für jede Seite des gedruckten Dokuments eine PNG-Datei zu erzeugen, die dann vom Bildbetrachter nacheinander zur Anzeige gebracht werden können. Dazu wird die Kommandozeile des Programms p2fViewer.exe wie folgt konfiguriert:

 cmd /s /c ""C:\View\makepng.bat" "%1"" 

Die ausgeführte Batch-Datei hat folgenden Inhalt:

makepng.bat
C:\View\gpcl6win64.exe -dNOPAUSE -sDEVICE=png16m -r600 -dDownScaleFactor=2 -sOutputFile=c:\View\Seite-%%d.png %1
%SystemRoot%\System32\rundll32.exe "%ProgramFiles(x86)%\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen c:\View\Seite-1.png
del c:\View\Seite-*.png
del %1

Als erstes wird GhostPCL aufgerufen, um PNG-Dateien mit einer Farbtiefe von 16-Millionen Farben (24-Bit) zu erzeugen. Die Dateien erhalten im Namen einen Seitenzähler und heissen dann Seite-1.png, Seite-2.png, usw. Das Prozentzeichen muss in der Batch-Datei verdoppelt werden, um es von Environment-Variablen unterscheiden zu können.

Anschliessend wird der Bildbetrachter aus dem Windows-Verzeichnis (nur eine DLL) aufgerufen und gewartet, bis der Benutzer den Bildbetrachter schliesst. Sobald das der Fall ist, werden die erzeugten PNG-Dateien und die PCL-Datei gelöscht.



Hinweise



Extra Tip

Wenn man auch auf dem Rechner gespeicherte PCL-Dateien anzeigen möchte, kann man die beiden BAT-Dateien ebenfalls einsetzen. 5)

Vorausgesetzt, PCL-Dateien haben eine einheitliche Endung wie etwa '.pcl', kann man über die rechte Maustaste aus dem Kontextmenü einfach den Eigenschaftendialog für diese Datei öffnen.

Ein Klick auf die Schaltfläche Ändern rechts neben Öffnen mit: erlaubt die Auswahl eines Programms, das zum Anzeigen der Datei verwendet werden soll.

Wenn man dort zu einer der beiden BAT-Dateien im Verzeichnis C:\View navigiert und diese auswählt, genügt zukünftig ein Doppelkllck auf die PCL-Datei oder auch nur die Taste Enter, um die Datei anzuzeigen. Das funktioniert auch mit mehrseitigen PCL-Datenströmen.

In jedem Fall öffnet sich zunächst einmal ein Kommando­fenster zur Ausführung der BATCH-Datei. Erst anschliessend öffnet sich der PDF-Viewer oder die Windows Bildanzeige. Das kann bei PCL-Dateien mit vielen Seiten durchaus seine Zeit dauern.

Wird der PDF-Viewer oder der Bildbetrachter geschlossen, beendet sich auch das Kommandofenster.


1)
In der Version 4 von print2forms ist der hier beschriebene Mechanismus in einer etwas abgewandelten Form auch Teil des Administrationsprogramms. Somit können Formulare, Ressourcen und auch Testausdrucke direkt im Admini­strations­programm angesehen werden. Das neue Administrationsprogramm simuliert auch einen PCL-Drucker, der analog zur hier vorgestellten Lösung genutzt werden kann, allerdings nur maximal zehn Seiten darstellt.

2)
GhostPCL ist ein Teil des grossen Projekts GhostScript als Interpreter für PostScipt und PDF.

3)
Natürlich darf auch jedes andere Verzeichnis gewählt werden, in dem Rechte zum Ausführen von Programmen zur Verfügung stehen.

4)
Bitte mindestens den Build 149 von p2fViewer.exe einsetzen, um zu vermeiden, dass ein zusätzliches Fenster für die Commandshell aufgeht.

5)
Das funktioniert nur mit von externen Programmen erzeugten PCL-Dateien oder solchen, die durch Umwandlung von Aufzeichnungen entstanden sind. Es funktioniert nicht (!) mit PCL-Dateien, die sich innerhalb des p2fRoot-Verzeichnisses befinden, weil diese beim Importieren zerlegt und umkodiert werden.