Ein Etikett für Laserdrucker erstellen

Anforderung

Für eine Logistikanwendung soll ein Versandetikett entworfen werden, das mit Daten aus dem existierenden Lieferschein gefüllt werden soll. Das Etikett soll auf einem PCL-Laserdrucker ausgegeben werden. Für den Import in das print2forms-System wird das Import-Gateway und der Import-Filter verwendet.

In diesem Beispiel wird ein Etikett für den Versand durch die Deutsche Post AG entworfen, der neben der Zieladresse noch zwei Barcodes mit codierten Angaben zum Ziel und dem Weg dorthin enthält. Diese Daten können nicht durch print2forms errechnet werden, sondern müssen aus Datenbanken der Deutschen Post AG entnommen werden. Obwohl es prinzipiell möglich ist, diese Datenbanken auch direkt durch print2forms abzufragen (via ODBC) wollen wir zur Vereinfachung hier annehmen, daß die benötigten Information am Anfang des Lieferscheins von der Logistikanwendung eingedruckt wurden.

Der entsprechende Ausschnitt aus dem Lieferschein sieht wie folgt aus:

Vorüberlegungen

Zum Drucken von Etiketten gibt es im print2forms-System einen speziellen Typ von Ressource. Im Gegensatz zu den üblichen Ressourcen mit den Druckdaten von Formularen, Bildern oder Logos enthalten diese Ressourcen zusätzlich eine Liste von sogenannten Feldzuordnungen. Bei einer Zuordnung handelt es sich um eine Beschreibung, welche Teile der Druckdaten gegen Nutzdaten ersetzt werden sollen.

Wird eine solche Ressource im Rahmen eines Druckauftrags benötigt, werden während des Ladevorgangs der Ressource in den Drucker alle in den Feldzuordnungen beschriebenen Teile der Ressource entfernt und gegen Teile der Nutzdaten ersetzt. Man kann sich diesen Vorgang bildlich so vorstellen, daß aus einem ausgefüllten Formular (der gespeicherten Ressource) alle variablen Daten entfernt und gegen neue Daten (aus dem aktuellen Druckdatenstrom) ersetzt werden. Dabei beschreiben die Feldzuordnungen einerseits, wo die variablen Daten im Formular stehen (über einen eineindeutigen Namen), und andererseits wo im Druckdatenstrom die neuen Daten stehen (über einen Feldindex).

Um eine Liste mit den Feldzuordnungen erstellen zu können, werden also demnach zwei Dateien benötigt: der Druckdatenstrom für die Ressource die das ausgefüllte Formular darstellt, und der Nutzdatenstrom aus dem die neuen variablen Daten entnommen werden sollen.

Für die Erstellung der Datei mit der Ressource wird ein Programm benötigt, mit dem das ausgefüllte Formular (in unserem Fall hier der Aufkleber) entworfen werden kann. Hier ist im Prinzip jedes Zeichenprogramm, ein Editor oder auch ein vom Druckerhersteller speziell für diesen Zweck zur Verfügung gestelltes Programm einsetzbar. Im Beispiel hier wurde das Modul 'Draw' aus der Open-Office-Suite verwendet.

Für die Erstellung der Datei mit den Nutzdaten gibt es prinzipiell zwei Möglichkeiten. Unterstützt das Betriebssystem des Rechners, auf dem die Nutzdaten erzeugt werden, das Drucken in eine Datei (zum Beispiel Windows), ist es am einfachsten, die Nutzdaten über den print2forms-Treiber in eine Datei zu drucken. Die entstehende Datei sollte die Endung '.prn' oder '.pcl' haben.

Steht diese Möglichkeit nicht zur Verfügung, wird einfach auf einem der im print2forms angelegten Drucker eine Aufzeichnung des Eingangsdatenstroms aktiviert. Nach dem Ausdruck der Nutzdaten auf diesem Drucker kann die Aufzeichnung, eine Datei mit der Endung '_h.log', gesichert und für unsere Zwecke hier verwendet werden.

Der Import der erstellten Ressource kann nur über das print2forms-Import-Gateway erfolgen - ein direkter Import im Administrationsprogramm des print2forms-Servers ist nicht vorgesehen. Das Import-Gateway kann auf einem beliebigen anderen Rechner im Netzwerk ausgeführt werden. Der Rechner, auf dem die Ressource erstellt wird, muß lediglich eine Route zu dem Rechner mit dem Import-Gateway haben.

Die eigentliche Erstellung der Feldzuordnungen erfolgt durch den print2forms-Import-Filter, der auf dem Rechner, auf dem die Ressource erstellt wird, installiert und aktiviert sein muß. Für den Import-Filter wird im Windows-System der übliche print2forms-Druckertreiber installiert. Der Import-Filter generiert dann beim Drucken der Ressource (dem Import) in einem Dialog mit dem Ersteller der Ressource die Feldzuordnungen und überträgt sie via Netzwerk zusammen mit der eigentlichen Ressource an das Import-Gateway.

Für die Installation und Konfiguration des Import-Gateways und des Import-Filters wird auf die zugehörige Dokumentation verwiesen.

Realisierung

Zum Entwurf eines Etiketts für Laserdrucker ist wichtig zu wissen, daß weder das Programm (hier 'Draw') noch der Drucker selbst Barcodes unterstützen (siehe auch die Hinweise am Ende des Kapitels). Im Layout des Etiketts wird daher lediglich ein Platzhalter für den Barcode eingefügt. Der eigentliche Barcode wird dann durch print2forms selbst erzeugt - inlusive Berechnung der Prüfziffer und Erzeugung der Klartextzeile unter dem Barcode.

Das fertige Layout des Etiketts sieht dann im Zeichenprogramm 'Draw' etwa so aus:

Im Layout sind für alle Stellen, an denen später die Nutzdaten eingesetzt werden sollen, Platzhalter (Namen) eingefügt. Es ist wichtig, daß für die Namen eineindeutige Zeichenfolgen verwendet werden. Das heist auch, daß diese Zeichenfolgen nicht in den statischen Daten des Layouts vorkommen dürfen, oder das eine Zeichenfolge der Anfang einer anderen als Name benutzen Zeichenfolge ist. Die Namen dürfen Leerstellen und Sonderzeichen aber keine läderspezifischen Zeichen (wie Umlaute) enthalten. Die hier verwendeten Namen sind Leitcode, Identcode, Name, Strasse, Zusatz, Ort und 999.

Die Länge des Platzhalters ist in diesem Beispiel ohne Bedeutung, weil alle Texte linksbündig positioniert werden. Sehr wohl eine Rolle spielen aber Schriftgröße, Schrifttyp und Schriftstil, weil diese Attribute an die später eingesetzten Nutzdaten vererbt werden. Das heist, die eingesetzten Nutzdaten erscheinen in genau derselben Schrift wie der Platzhalter.

Die Namen Leitcode und Identcode sind die Platzhalter für die Barcodes. Hier spielt Schriftgröße und Schriftstil keine Rolle, da der Platzhalter lediglich für die Positionierung des Barcodes verwendet wird. Lediglich der Schrifttyp muss von print2forms lesbar sein.

Damit print2forms die Texte innerhalb des Layouts 'lesen' kann, dürfen für die Namen der Platzhalter nur druckerresidente Schriften verwendet werden. Dies hat seine Begründung darin, daß bei der Verwendung von geladenen Schriften, vom Windows-Treiber nur die Buchstaben geladen werden, die im Platzhalter verwendet werden. Enthalten die später eingefügten Nutzdaten dann andere Zeichen, sind diese dann undefiniert und werden nicht gedruckt.

Um eine druckerresidente Schrift zu verwenden, muß in der Konfiguration des benutzten Windows-Druckers (in unserem Fall der dem Import-Filter zugeordnete Drucker) in den Ersetzungstabellen für Schriften die betreffende Schrift einer Druckerschrift zugeordnet werden. In diesem Beispiel wird für die Windows-Schrift 'Arial' die druckerresidente 'Arial' verwendet. Damit wird aller Text in dieser Schrift für print2forms lesbar.

Ist das Layout erstellt, muß es in print2forms importiert werden. Dies geschieht ganz einfach durch Drucken auf dem dem Import-Filter zugeordneten Drucker. In den Eigenschaften dieses Druckers befindet sich ein Reiter mit dem Titel Import, der die Angaben zum Import enthält.

Hier wird neben dem Benutzernamen und dem Passwort des print2forms-Benutzers (nur registrierte Benutzer können importieren) angegeben, was importiert werden soll: eine Ressource oder ein Anhang. In diesem Fall muß eine Ressource angewählt werden. Anschliessend muß noch angegeben werden, ob eine neues Objekt erzeugt werden soll, oder ob ein existentes Objekt überschrieben werden soll. Da das Etikett bereits Teil der Beispielinstallation ist, wird hier Überschreiben ausgewählt.

Um auszuwählen, welche Ressource überschrieben werden soll, wird in der Baumdarstellung der bekannten Ressourcen aus dem Subcontainer Etiketten die Ressource mit dem Namen Postpaket ausgewählt. Der Name des Subcontainers und der Name der Ressource erscheinen dann in den entsprechenden Feldern.

Wird der Dialog mit den Druckereigenschaften geschlossen und der eigentliche Druck ausgelöst, erscheint ein Dialogfenster mit den im Layout erkannten Texten. Ein Teil der Texte ist hier rot eingefärbt. Es handelt sich um die aus den Feldzuordnungen der existenten Ressource her bekannten Namen der Platzhalter.

Durch Klick auf die Schaltfläche Druckdaten erscheint ein Auswahldialog, in dem die für das Ausfüllen des Etiketts zu verwendenten Nutzdaten ausgewählt werden sollen. Um an eine Datei mit den Nutzdaten zu gelangen, müssen diese entweder in eine Datei gedruckt werden (z.B. unter Windows) oder ein print2forms-Client wird mit einer aktivierten Aufzeichnung der empfangenen Daten gestartet, um so einen Druckauftrag aufzuzeichnen. Die dabei entstehenden Dateien mit der Endung '_h.log' können direkt als Vorlage für die Nutzdaten verwendet werden.

Nach erfolgter Auswahl der Datei mit dem Namen 'Lieferschein.pcl' wird diese eingelesen und alle Texte werden extrahiert und in einem neuen Fenster angezeigt. Die Datei 'Lieferschein.pcl' befindet sich im Installationsverzeichnis von print2forms im Unterverzeichnis 'p2fSample'. Es erscheint ein neues Dialogfenster mit den Nutzdaten aus der Datei 'Lierferschein.pcl'.

In diesem Moment wechselt die Farbe der bisher in Rot angezeigten Namen der Platzhalter in Blau als Zeichen dafür, daß den Platzhaltern bereits Nutzdaten zugeordnet sind. Die entsprechenden Passagen in dem Fenster mit den Nutzdaten werden ebenfalls in Blau, oder bei mehrfacher Zuweisung, in Grün angezeigt.

In diesen beiden Fenstern können nun die Feldzuordnungen getroffen werden. Es ist möglich, diese Zuordnung mit der Maus zu steuern. Dafür stehen zwei Kontextmenüs zur Verfügung, die abhängig von der aktuellen Position des Cursors die erlaubten Operationen anbieten.

Andererseits kann die komplette Zuordnung aber auch sehr effizient und präzise mit der Tastatur vorgenommen werden - in den Kontextmenüs sind die entsprechenden Tasten angegeben. Zusätzlich zu diesen Tasten wechselt die 'Tab'-Taste zwischen den beiden Fenstern hin und her. Dies aber nur selten notwendig, weil abhängig von der gerade aktivierten Aktion die Fenster automatisch gewechselt werden.

Für einen ersten Gehversuch kann der Cursor im Fenster mit den Nutzdaten in die in Grün angezeigte '04' gesetzt und die Leertaste angeschlagen werden. Sofort wird das Fenster mit den Platzhaltern in den Vordergrund gebracht. Abwechselnd werden nun die beiden Platzhalter 'Leitcode' und '999 markiert als Hinweis darauf, daß die '04' zu diesen beiden Platzhaltern gehört. Wird der Cursor in die anderen, mit Blau markierten Nutzdaten gesetzt und die Leertaste gedrückt, werden deren zugeordneten (einzigen) Platzhalter angezeigt.

Als nächstes wird der Cursor in den Platzhalter '999' gesetzt, und im Kontextmenü der Punkt 'Entfernen' ausgewählt oder die 'Minus'-Taste gedrückt. Dadurch wird der Import-Filter aufgefordert, den Platzhalter '999' zu löschen. Nach Bestätigung der Sicherheitsabfrage, wird die Farbe der '999' von Blau in Schwarz wechseln und im Fenster mit den Nutzdaten wird die '04' von Grün in Blau wechseln als Zeichen dafür, daß sie nur noch zu einem Platzhalter gehört.

Jetzt kann im Fenster mit den Platzhaltern zur Übung die '999' mit der Maus oder mit den Cursortasten wieder markiert werden. Im Kontextmenü wird nun der Menüpunkt 'Hinzufügen' aufgerufen oder die 'Plus'-Taste wird gedrückt. Damit wechselt die Farbe der '999' in Rot (wegen der Markierung als Türkis zu sehen), und das Fenster mit den Nutzdaten kommt in den Vordergrund. Dort wird jetzt wieder die '04' am Ende der ersten Zeile markiert (mit Maus oder Cursortasten). Durch den Menüpunkt 'Zuordnen' aus dem Kontextmenü oder die 'Plus'-Taste wird die '04' jetzt wieder dem Platzhalter '999' zugeordnet. Die '04' wechselt ihre Farbe in Grün als Zeichen für die Mehrfachzuweisung und das Fenster mit den Platzhaltern wird wieder in den Vordergrund genommen. Die Farbe des Platzhalters '999' ist jetzt von Rot in Blau gewechselt, als Zeichen für die erfolgte Zuordnung.

Mit diesen wenigen Handgriffen werden alle Platzhalter definiert und ihnen Nutzdaten zugeordnet.

Eine Besonderheit stellen die beiden Platzhalter 'Leitcode' und 'Identcode' dar. Wird der Cursor in einen der Platzhalter gesetzt und die Leertaste gedrückt, erscheint im Eingabefeld 'Feldreferenz' der Test 'Leitcode' angezeigt. Dies ist ein Hinweis darauf, daß dieser Platzhalter durch ein Feld aus einem print2forms-Formular ersetzt wird. In diesem Fall hier sind dies die Barcode-Felder.

Eine solche Feldzuweisung wird dadurch hergestellt, daß vor dem Zuweisen von Nutzdaten in dem Eingabefeld 'Feldreferenz' der Name des Formular-Feldes eingegeben wird.

Werden im Fenster mit den Nutzdaten Zeichen mit der Maus oder mit den Cursor-Tasten markiert, ist zu beobachten, daß in dem Eingabefeld mit der Bezeichnung 'Auswahlmuster' eine Zeichenkette mit einem Vergleichsmustern generiert wird. Diese Zeichenkette ist nach genau denselben Regeln aufgebaut, wie die anderen in print2forms verwendeten Vergleichsmuster. Beispielsweise bedeutet das Muster '.{19}(.{12}).*', daß zunächst die ersten 19 Zeichen des Textes überlesen und dann die nächsten zwölf Zeichen ausgewählt werden. Eventuell noch nachfolgende Zeichen werden wieder überlesen. Ein Muster von '.{19}(.*)' bedeutet, daß alle Zeichen ab dem Zwanzigsten bis zum Ende der Zeichenkette ausgewählt werden. Selbstverständlich können neben diesen automatisch erzeugten Vergleichsmustern aber auch alle anderen im print2forms-System gültigen Muster per Hand in das Eingabefeld 'Auswahlmuster' eingeben werden. Bei der Eingabe des Musters werden ungültige Muster in Rot angezeigt, was während der Eingabe normal ist. Als gültig erkannte Muster werden dann in Schwarz angezeigt - im nachfolgenden Beispiel alle eins bis acht Zeichen langen, durch eine Leerstelle begrenzten Texte ab der elften Spalte.

Lediglich zur Kontrolle wird in dem Eingabefeld 'Feldindex' der den ausgewählten Nutzdaten entsprechende Feldindex angezeigt. Damit kann später bei Problem leicht kontrolliert werden, ob Fehlfunktionen auf Verschiebungen in den Nutzdaten zurückzuführen sind.

Mit einem Klick auf die Schaltfläche 'Import' im Fenster mit den Platzhaltern wird dann die zu importierende Ressource zusammen mit den gemachten Feldzuordnungen an das Import-Gateway gesendet. Dieses erzeugt dann auf dem print2forms-Server die neue oder geänderte Ressource.

Im Administrationsprogramm des print2forms-Servers kann man sich jetzt das Ergebnis des Importvorgangs ansehen. Falls der entsprechende Container bereits geöffnet ist, muß vorher aus dem Kontextmenü des Containers der Menüpunkt 'Aktualisieren' ausgewählt werden, damit das Administrationsprogramm die neue oder geänderte Ressource erkennt. Im Fensters des Administrationsprogramms sollte jetzt die Ressource zusammen mit der Zuordnungsliste erscheinen.

Wird für eine Ressource mit einer Zuordnungsliste ein Testausdruck auf einem Laserdrucker angefordert (Kontextmenü des entsprechenden Objekts, Menüpunkt 'Testausdruck'), werden die Platzhalter in Hellgrau angedruckt, um sie so vom statischen Inhalt der Ressource abzuheben.

Wie im print2forms üblich, kann eine Ressource nicht direkt benutzt werden, sondern wird über ein übergeordnetes Formular aufgerufen. Mit Hilfe dieses Formulars können nun über zwei Barcodefelder die noch fehlenden Barcodes erzeugt werden. Die beiden Felder müssen genau die Namen bekommen, die in der Zuordnungsliste der Ressource angegeben wurden. In diesem Fall also 'Leitcode' und 'Identcode'. Das Formular mit dem Namen 'Postpaket' ist in der Beispielinstallation bereits vorhanden und sieht wie folgt aus:

Zu guter Letzt brauchen wir auch noch einen Prozess, der dieses Formular aufruft. Dieser Prozess mit dem Namen 'Postpaket' liest die Lieferscheindaten ein, und übergibt die Daten der ersten Seite (Seitentyp 'Nutzdatenseite') an das Formular 'Postpaket'. Alle weiteren Seiten des eventuell mehrseitigen Lieferscheins werden ignoriert. Der Prozess ist ebenfalls Bestandteil der Beispielinstallation und hat folgendes Aussehen:

Jetzt ist der Augenblick gekommen, an dem das Etikett das erste Mal benutzt werden kann. In dem mit print2forms gelieferten Beispielprogramm gibt es ein Beispiel mit dem Namen 'Aufkleber Postpaket', das die erforderlichen Nutzdaten erzeugt. Da wir den Prozess 'Postpaket' nicht als Dokumentprozess definiert haben, ist es unsinnig, mehr als einen Lieferschein zu drucken - die nachfolgenden Lieferscheine würden als Folgeseiten des ersten Lieferscheins angesehen.

Bei der Ausgabe auf einem realen Laserdrucker kann es unter Umständen durch das ungewöhnliche Papierformat 'ISO A6 Postkarte' im Prozess 'Postpaket' zu Problemen kommen, wenn der Laserdrucker dieses Format nicht unterstützt. In diesen Fällen kann der Prozess ohne weiteres so abgeändert werden, daß das Papierformat 'ISO A4' verwendet wird.

Bemerkungen