Skript

Das Gateway erzeugt aus den eingehenden ZPL-Druckdaten lediglich zwei Dateien: eine mit den konvertierten PCL-Druckdaten und eine Index-Datei. Damit ist im Prinzip aber noch keine Funktion realisiert.

Die eigentliche Funktion eines Gateways ist sehr stark von den Anforderungen des Kunden und dessen Installationsumgebung abhängig. Von daher ist klar, dass das nicht generell in convert4print vorkonfiguriert werden kann. Daher startet das Gateway über eine bei seiner Konfiguration festgelegte Befehlszeile ein Skript, das die eigentliche Aufgabe erledigt.

Für die Programmierung des Skripts können die üblichen Skriptsprachen wie PHP oder Perl genutzt werden. Die Laufzeitumgebung für die Skripte ist nicht Bestandteil von convert4print und muss in der Regel selbst installiert und konfiguriert werden. 1)

Alternativ ist es natürlich auch möglich, selbstgeschriebene kompilierte Programme aufzurufen.

Das Grundgerüst für ein Skript oder ein Programm zur Weiterverarbeitung der Etiketten ist relativ simpel:


Als Beispiel soll ein PHP-Skript dienen, das aus der PCL-Datei ein PDF-Dokument erstellt und es in einem festen Ziel­verzeichnis auf einem Server ablegt. Der Einfachheit halber wird angenommen, dass je Druckauftrag nur ein Etikett übertragen wird. 2)

Der Name des PDF-Dokuments soll dabei von einem Wert aus dem Etikett ermittelt werden. 3)

Die Befehlszeile für dieses Skript muss als "C:\php7\php.exe" "%1\zpl.php" "%1" "%2" %4 konfiguriert werden. Die Parameter sind die Platzhalter für das Skriptverzeichnis, das Spoolverzeichnis und den Dateinamen der Druck- und Index-Datei (ohne Erweiterung).

In der Ablaufverfolgung des Gateways kann kontrolliert werden, wie diese Platzhalter expandiert werden:

"C:\php7\php.exe" "C:\Users\Public\Documents\SPE Systemhaus GmbH\convert4print\c4pScript\zpl.php" "C:\Users\Public\Documents\SPE Systemhaus GmbH\convert4print\c4pScript" "C:\Users\Public\Documents\SPE Systemhaus GmbH\convert4print\c4pSpool" 5EF443CE_536


Für das Skript kann der folgende PHP-Code als Grundgerüst für eigene Entwicklungen verwendet werden: 4) 5)

zpl.php
<?php
// Gateway command line:    "C:\php\php.exe" "%1/zpl.php" "%1" "%2" %4
 
$Script = $argv [1];                                        /* path to script */
$Spool = $argv [2];                               /* path to spooled document */
$Document = $argv [3];                                    /* name of document */
 
$Target = "\\archiv\\temp\\";
 
if ($Script == "" || $Spool == "" || $Document == "") 
  exit (-1);                                               /* wrong arguments */
 
chdir ($Spool);           /* make it current directory to shorten some pathes */
 
if (preg_match ("/(.*_[0-9]+)/", $Document, $Matches) == 1) {
    $Document = $Matches [1];              /* document name without extension */
}
else exit (-4);                                        /* illegal name passed */
 
$Delivery = ""; 
 
$Index = fopen ($Document . ".ctl", "r"); 
 
if ($Index) {
    while (($Line = fgets ($Index, 4096)) !== false) {
        if (preg_match ("/\[01036311B8\]([0-9A-Z]+)/", $Line, $Matches)) {
            $Delivery = trim ($Matches [1]); 
        }
    }
    fclose ($Index); 
}
 
if ($Delivery == "")                                   /* wrong document type */
  $Delivery = $Document;
 
$PDF = $Delivery . ".pdf";
 
$Cmd = "\"" . $Script . "\\gpcl6win32.exe\"" .
                        " -dNOPAUSE" .
                        " -sDEVICE=pdfwrite" .
                        " -r600" .
                        " -g2700x3900" .
                        " -dPDFFitPage" .
                        " -dPDFA=1" .
                        " \"-sOutputFile=" . $PDF . "\"" .
                        " \"" . $Document . ".pcl\"";
system ($Cmd, $Result);                 /* convert the pcl-file to a pdf-file */
 
if ($Result != 0) { exit (-3); }             /* can't convert to PDF document */
 
unlink ($Document . ".ctl");                              /* no longer needed */
unlink ($Document . ".pcl");
 
if (copy ($PDF, $Target . $PDF))          /* transfer PDF to target directory */
  unlink ($PDF);
else
  exit (-4);                           /* result PDF document can't be copied */
 
exit (0); 
?>



Für die Inbetriebnahme des Gateways und den Test des Skriptes sei noch einmal ausdrücklich auf die in den Tips 'Visual Studio Code für PHP installieren', 'Test von PHP-Skripten' und 'PHP-Skript ohne Gateway testen' präsen­tierten Informationen verwiesen.

1)
Für PHP kann der convert4print-Installer eine Laufzeitumgebung nachladen und installieren. Diese ist bereits ent­sprechend vorkonfiguriert - insbesondere ist ein Debugger mit eingebunden.

2)
Werden mehrere Etiketten innerhalb eines Druckauftrags übertragen, muss das Skript die Etiketten noch vereinzeln. Das kann anhand der Index-Datei leicht gesteuert werden.

3)
Der Index, dessen Inhalt für den Namen Verwendung finden soll, muss natürlich entsprechend den eigenen Bedürfnissen angepasst werden. Genauso der damit verbundene Reguläre Ausdruck.

4)
Das Programm 'pcl6win32.exe' ist der Konverter GhostPCL aus dem Project GhostScript, der die Konvertierung nach PDF erledigt. Das Programm kann in der benötigten Variante (32-/64-Bit) von der Projektseite geladen werden.

5)
Der im Skript sichtbare Parameter '-g' definiert die Grösse des Etiketts und muss gegebenenfalls angepasst werden. Masseinheit ist hier 1/600 Zoll (Parameter '-r'). Die gezeigten Werte sind für ein typisches 4 x 6 Zoll Etikett. Es ist zu beachten, dass wegen der undruckbaren Ränder bei PCL-Druckern ein weiteres halbes Zoll zugegeben wurde, um sicherzustellen, dass alle Druckdaten sichtbar sind, falls ZPL wirklich von Rand zu Rand druckt.