Auch beim Einsatz von Etikettendruckern kommt der Wunsch auf, bei statischem Etikettendesign ein Logo abhängig von irgendeiner Mandanteninformation auszutauschen. Der Brute-Force-Ansatz, einfach für jeden Mandanten ein eigenes Etikett zu gestalten und in print2forms abzulegen, kommt schnell an seine Grenzen, wenn die Zahl der Mandanten oder die Zahl der Varianten von Etiketten steigt.
Der Änderungsaufwand einer solchen Lösung ist beträchtlich. Ändert sich ein Etikett, muss es in so vielen Varianten abgeändert werden, wie es Mandanten gibt. Ändert sich bei einem Mandanten etwas, muss jede Etikettenvariante angefasst werden.
Es wäre wünschenswert, einen Lösungsansatz zu finden, der diese Multiplikation der Aufwände verhindert, und bestenfalls einen linearen Aufwand verursacht.
Die allermeisten Etikettendrucker bieten die Möglichkeit, Graphiken in den Drucker zu laden und diese Graphiken dann über eine Kennung zu referenzieren. Das ist insbesondere auch bei ZPL-Druckern so. Anhand der Etikettendruckersprache ZPL soll aufgezeigt werden, wie die oben beschriebene Anforderung realisiert werden kann.
Zunächst muss einmal festgestellt werden, dass es in print2forms für Etikettenprozesse keine Unterstützung für irgendetwas gibt, was den für PCL-Drucker verfügbaren Ressourcenfeldern entspricht. Nur die 'nichtdruckenden' Felder, wie Suchfelder, HTTP- und ODBC-Felder, sind auch mit Etikettendruckern nutzbar.
Deshalb scheidet die für PCL-Drucker ganz offensichtliche Realisation über ein Ressourcenfeld hier aus.
Grundidee für eine alternative Herangehensweise ist die Überlegung, die Auswahl des einzudruckenden Logos in Form einer Liste von bedingten Unterformularen zu realisieren.
Dazu müssen zunächst einmal alle in Frage kommenden Logos als Ressource importiert und in einem zweiten Schritt als Formular angelegt werden.
Das nachfolgende ZPL-Beispiel soll die nicht ganz intuitive Lösung illustrieren.
Ausgangspunkt sind im Beispiel drei unterschiedliche Logos, die auch für das blosse Auge leicht zu unterscheiden sind. Es ist wichtig, dass alle Graphiken einen eineindeutigen Namen haben, der später leicht auf das Unterscheidungsmerkmal in den Nutzdaten abgebildet werden kann. Im Beispiel hier wird als Referenz einfach eine Ziffer an das Wort LOGO angehängt, weil wir später aus den Nutzdaten eine Ziffer zur Auswahl des Logos extrahieren.
Die Referenz muss keine Zahl sein. Es wäre auch denkbar, die Logos direkt mit dem Namen eines Mandanten zu versehen, und die Referenz darüber herzustellen - das erhöht sogar die Wartbarkeit, weil direkt klar ist, zu wem das Logo gehört.
~DGR:LOGO1.GRF,00080,010, FFFFF000000000000000 00F00000000000000000 00F00000000000000000 00F00000000000000000 00F00000000000000000 00F00000000000000000 00F00000000000000000 FFFFF000000000000000 |
~DGR:LOGO2.GRF,00080,010, FFFFF00FFFFF00000000 00F000000F0000000000 00F000000F0000000000 00F000000F0000000000 00F000000F0000000000 00F000000F0000000000 00F000000F0000000000 FFFFF00FFFFF00000000 |
~DGR:LOGO3.GRF,00080,010, FFFFF00FFFFF00FFFFF0 00F000000F000000F000 00F000000F000000F000 00F000000F000000F000 00F000000F000000F000 00F000000F000000F000 00F000000F000000F000 FFFFF00FFFFF00FFFFF0 |
Die Logos werden einfach importiert, ohne dass irgendwelche Platzhalter definiert werden. Anschliessend wird für jedes Logo ein Formular mit dem gleichen Namen angelegt:
Das Etikett, welches die variablen Logos enthalten soll, muss als nächstes definiert werden. In der nachfolgenden Abbildung ist zu sehen, dass dort eine Graphik mit dem Namen LOGONUMMER.GRF aufgerufen wird. Dabei ist die Zeichenkette NUMMER als Platzhalter gedacht, der später gegen die tatsächliche Nummer des Logos ausgetauscht wird. |
^XA ^LH10,10 ^FO20,10^AD^FDVariables Logo für Kunde Nummer^FS ^FO20,40^XGR:LOGONUMMER.GRF,1,1^FS ^XZ |
Beim Import des Etiketts werden folgerichtig dieser Platzhalter und der Text Nummer in der Textzeile darüber mit einem Wert aus den zu druckenden Nutzdaten für das Etikett verbunden. (Die Aufzeichnung der Nutzdaten zeigt drei Seiten!)
Folglich zeigt der Text auf dem Etikett auch immer direkt an, welches Logo gerade angezeigt wird. Die beiden Platzhalter unterscheiden sich für print2forms, weil Gross-/Kleinschreibung berücksichtigt wird. Nachdem das alles soweit vorbereitet ist, müssen jetzt die zwei entscheidenden Formulare erzeugt werden. |
Jetzt ist alles soweit eingerichtet und ein erster Test mit den Nutzdaten kann erfolgen. Zum besseren Verständnis sind die Nutzdaten (PCL-Datenstrom) nachfolgend abgebildet: Es ist zu erkennen, dass zuerst ein Etikett für den Kunden 2, dann zwei für den Kunden 1, dann eines für den Kunden 3 und am Schluss wieder eines für den Kunden 1 gedruckt werden soll. Im Listing auf der rechten Seite ist zu sehen, welchen ZPL-Datenstrom print2forms aus diesen Nutzdaten erzeugt. Als erstes wird die Graphik für das Logo 2 geladen und anschliessend im Etikett aufgerufen. Es ist deutlich zu sehen, wie die beiden Platzhalter aus der Etikettenressource gegen die Ziffer 2 ausgetauscht worden sind. Anschliessend wird die Graphik für das Logo 1 geladen und ein Etikett mit diesem Logo gedruckt. Beim zweiten Etikett mit dem Logo 1 ist zu sehen, dass die Graphik nicht wieder geladen wurde. print2forms weiss, dass die Graphik bereits im Drucker ist, und unterdrückt das wiederholte Laden der Graphiken.
Schliesslich wird die Graphik für das Logo 3 geladen und ein Etikett mit diesem Logo gedruckt. Beim anschliessenden erneuten Druck eines Etiketts mit dem Logo 1 wird wieder keine Graphik nachgeladen.
|
~DGR:LOGO2.GRF,00080,010, FFFFF00FFFFF00000000 00F000000F0000000000 00F000000F0000000000 00F000000F0000000000 00F000000F0000000000 00F000000F0000000000 00F000000F0000000000 FFFFF00FFFFF00000000 ^XA ^LH10,10 ^FO20,10^AD^FDVariables Logo für Kunde 2^FS ^FO20,40^XGR:LOGO2.GRF,1,1^FS ^XZ ~DGR:LOGO1.GRF,00080,010, FFFFF000000000000000 00F00000000000000000 00F00000000000000000 00F00000000000000000 00F00000000000000000 00F00000000000000000 00F00000000000000000 FFFFF000000000000000 ^XA ^LH10,10 ^FO20,10^AD^FDVariables Logo für Kunde 1^FS ^FO20,40^XGR:LOGO1.GRF,1,1^FS ^XZ ^XA ^LH10,10 ^FO20,10^AD^FDVariables Logo für Kunde 1^FS ^FO20,40^XGR:LOGO1.GRF,1,1^FS ^XZ ~DGR:LOGO3.GRF,00080,010, FFFFF00FFFFF00FFFFF0 00F000000F000000F000 00F000000F000000F000 00F000000F000000F000 00F000000F000000F000 00F000000F000000F000 00F000000F000000F000 FFFFF00FFFFF00FFFFF0 ^XA ^LH10,10 ^FO20,10^AD^FDVariables Logo für Kunde 3^FS ^FO20,40^XGR:LOGO3.GRF,1,1^FS ^XZ ^XA ^LH10,10 ^FO20,10^AD^FDVariables Logo für Kunde 1^FS ^FO20,40^XGR:LOGO1.GRF,1,1^FS ^XZ |