===== PDF-Datei erzeugen ===== ==== Anforderung ==== Im Zusammenhang mit dem Einsatz eines (c4p)-Gateways ist eine der häufigsten Anforderungen die, die Druckausgabe in ein anderes Format, wie zum Beispiel PDF zu konvertieren, um dann die Druckausgabe per E-Mail zu versenden oder an ein Archiv zu übergeben. Für die Umwandlung einer PCL-Datei in eine PDF-Datei wird ein Programm gebraucht, welches quasi einen Laserdrucker simuliert. Das war in der Vergangenheit ein Programm der amerikanischen Firma Lincoln & Co, was inzwischen nach einem Verkauf der Firma aber nicht mehr am Markt erhältlich ist. Als Alternative bietet sich das Programm [[https://www.ghostscript.com/GhostPCL.html|GhostPCL]] an. Damit lassen sich nicht nur PDF-Dateien erzeugen, sondern auch fast alle Arten von Bilddateien generieren, sodass zur Not auch noch ein Fax-Anschluss realisiert werden könnte. ((**GhostPCL** steht unter einer modifizierten GNU-Lizenz - der [[https://www.gnu.org/licenses/agpl-3.0.html|AGPL]] - die auch die kommerzielle Nutzung erlaubt.\\ \\ )) \\ \\ ==== Realisierung ==== Das (c4p)-Gateway erzeugt für jeden Druckauftrag zwei Dateien: eine mit dem PCL-Datenstrom (Endung '.pcl'), der das gedruckte Dokument erzeugt, und eine Textdatei (Endung '.ctl'), in der die im Druckdatenstrom erkannten Texte mit einem Index entsprechend ihrer Position im Dokument aufgelistet sind. ((Der eigentliche Name der Dateien besteht aus der internen Kennung des Gateways als Hexadezimalzahl, gefolgt von einer laufenden dezimalen Nummer. Er ist in der Regel nicht weiter von Bedeutung, ausser dass er die zusammenge(-)hörenden '.pcl' und '.ctl' Dateien kennzeichnet.\\ \\ )) Nachdem beide Dateien erzeugt worden sind, kann vom Gateway über eine Kommandozeile ein Skript aufgerufen werden, das diese Dateien dann weiterverarbeitet. ((Der Parameter '**%1**' wird gegen das Skript-Verzeichnis und der Parameter '**%2**' gegen das Spool-Verzeichnis ersetzt. Der Parameter '**%4**' ist der Name der erzeugten Dateien.\\ \\ )) Im nachfolgenden ist ein Skelett für ein PHP-Skript abgebildet, welches als Gerüst für eigene Entwicklungen dienen kann. Das Skript extrahiert im ersten Schritt aus der Textdatei (mit der Endung '.ctl') eine Kunden- und eine Dokumentnummer. Im zweiten Schritt wird die Erzeugung der %%PDF%%-Datei vorbereitet. Die neueren Versionen von GhostPCL erlauben eine einfache Bestimmung der Meta-Daten (Autor, Erzeuger, Titel) einer %%PDF%%-Datei durch die Interpretation eines Vorspanns mit einer PJL-Sequenz. Diese %%PJL%%-Sequenz wird erst einmal in eine Datei geschrieben. Im dritten Schritt erfolgt die Erzeugung der %%PDF%%-Datei durch Aufruf des Programms GhostPCL. Die dafür notwendige Kommandozeile enthalt vor der %%PCL%%-Datei das Einfügen der eben erzeugten PJL-Sequenz. Eine ausführliche Beschreibung der Kommandozeilen-Parameter ist in der [[https://www.ghostscript.com/doc/9.26/Use.htm|Dokumentation]] zu GhostPCL zu finden. Im vierten und letzten Schritt wird die erzeugte %%PDF%%-Datei in einem Verzeichnis nach Kundennummern sortiert abgelegt. Falls zu einer Kundenummer noch kein Unterverzeichnis existiert, wird es vorher angelegt. \\ \\ \\ ==== Bemerkungen ==== * Das Skript soll nur als Grundlage für eigene Entwicklungen dienen. Es gibt in der Praxis oft noch einige mögliche Fehlerquellen, die hier nicht berücksichtigt worden sind. Insbesondere ist das einfache Abbrechen des Skripts meist nicht wirklich eine sinnvolle Fehlerbehandlung. Hier wäre etwa das Ausschleusen der Dateien und die Erzeugung einer Nachricht für einen Administrator das bessere Vorgehen. * Das Skript setzt voraus, dass GhostPCL ((Es werden lediglich die beiden Dateien 'gpcl6win64.exe' und 'gpcl6dll64.dll' benötigt!\\ \\ )) im Verzeichnis des Skripts liegt. Ansonsten ist natürlich der Zugriffspfad anzupassen. * Die Indices in den beiden regulären Ausdrücken zur Suche der Kunden- und der Dokumentnummer sind nur beispiel(-)haft und müssen noch an die konkreten Einsatzbedingungen angepasst werden. * Zur Inbetriebnahme des Skripts kann es hilfreich sein, zunächst die Zeilen am Ende des Skripts mit den drei 'unlinks' auszukommentieren. Damit bleiben die erzeugten Dateien erhalten, und lassen sich inspizieren. * Zur Inbetriebnahme des Skripts sei auch noch einmal ausdrücklich auf die Tips [[convert4print:tips:tip70|Visual Studio Code für PHP installieren]] und [[convert4print:tips:tip71|Test von PHP-Skripten]] hingewiesen. \\