===== Binärdaten in Schablonen ===== ==== Anforderung ==== Im Zusammenhang mit dem Einsatz von Sonderzeichen in Symbolschriften oder bei der Nutzung von Barcodes kommt es immer wieder einmal vor, dass die Daten innerhalb der Schablone eines Text- oder Barocde-Feldes nicht anzeigbare Zeichen enthalten muss, die zudem über die Tastatur nicht ohne weiteres erzeugt werden können. Bisher wurde dafür mit der Syntax '\x##' die Möglichkeit geschaffen, beliebige Werte im Bereich Hexadezimal '00' bis 'FF' in die Schablone mit aufzunehmen. Desweiteren konnten Zahlen über die Formatierung als Binärwert mit in die Schablone aufgenommen werden (siehe Tips [[print2forms:tips:tip61|Formatierung in Schablonen]] und [[print2forms:tips:tip13|Deutsche Post Datamatrix Code]]). Mit der Umstellung von (p2f) auf die Nutzung von **Unicode** innerhalb des Administrationsprogramms und innerhalb der Clients und Gateways birgt die Nutzung von Binärdaten aber erhebliche Riskiken für Fehlinterpretationen, die sehr oft nicht das gewünschte Druckergebnis liefern. Deshalb ist das genaue Verständnis des Konvertierungsprozesses von Schablonen bis letztlich zum gewünschten Zielzeichensatz des Druckers von grosser Bedeutung. \\ \\ ==== Realisierung ==== Ab der Build-Nummer 5830 des (p2f)-Clients und der Build-Nummer 3104 des (p2f)-Gateways steht neben der Notation '\x##' jetzt zusätzlich die Notation '\u##' zur Verfügung. Die neue Notation liefert ebenfalls hexadezimal ange(-)gebene Werte, diese werden aber nicht als Binärdaten interpretiert, sondern als Unicode-Zeichen. Der entscheidende **Unterschied** zwischen den beiden Notationen liegt darin, dass die mit '\x##' kodierten Daten nicht (!) an der Konvertierung von Unicode in den Zielzeichensatz des Druckers teilnehmen. ((Das gilt insbesondere sogar für den Fall, dass die so kodierten Binärdaten eine korrekte UTF-8 Kodierung darstellen - das wird maskiert und deshalb gar nicht erkannt!\\ \\ )) Die mit '\u##' kodierten Daten hingegen werden aber korrekt konvertiert. ((Die Unicode-Zeichen werden von (p2f) intern automatisch in UTF-8 Sequenzen konvertiert. Es ist also so, dass mit '\u##' tatsächlich der Unicode-Codepoint angegeben wird, und nicht etwa seine UTF-8 Kodierung! Diese Codepoints können den Zeichentabellen der Schriften aus der Bibliothek entnommen werden, oder, wenn Zugriff besteht, der [[https://unicode.org/charts/|Unicode-Spezifikation]] ISO 10646.\\ \\ )) Die von (p2f) Unicode-Zeichen liegen im Bereich von hexadezimal '20' bis 'FFFFFF'. Deshalb gibt es nicht nur die Kodierung '\u##', sondern auch '\u####' und '\u######', wobei '#' für eine beliebige Hexadezimalziffer in Gross- oder Kleinschreibung steht. Die Angabe von drei oder fünf Ziffern ist nicht erlaubt. \\ \\ Basis für die Unicode-Unterstützung von (p2f) ist die **[[print2forms:schriften:schriften|Schriftenbibliothek]]**, mit der Dutzende Schriften mit tausenden von Zeichen zur Verfügung gestellt werden. So lassen viele zusätzliche Alphabete (wie Kyrillisch, Griechisch, Chinesich, Koreanisch, etc) nutzen, selbst wenn die physischen Drucker keine Unterstützung für diese Alphabete anbieten. Bei der direkten Angabe von Unicode-Zeichen mittels '\u' innerhalb der Schablone ist zu beachten, dass sechstellige Werte grösser 'FFFF' Zeichen jenseits der BMP (Basic Multilingual Plane) adressieren. Aktuell enthält nur die Schrift **Noto Sans SC** noch Zeichen in der SIP (Supplementary Ideographic Plane). Sollten druckerinterne Schriften auch Zeichen aus der SMP (Supplementary Multilingual Plane) oder der TIP (Tertiary Ideographic Plane) unterstützen, können auch diese Werte angegeben werden. \\ \\ ==== Bemerkungen ==== * Ein besonders tückischer Fehler im hier diskutierten Zusammenhang tritt auf, wenn Binärdaten mit den Schriften aus der Schriftenbibliothek verwendet werden. War es in bisherigen Versionen von (p2f) möglich, z.B. ein Piktogramm aus einer Symbolschrift, das auf dem Grossbuchstaben 'U' lag, als '\x55' zu schreiben, geht das jetzt nicht mehr. Der Grund liegt darin, dass das Zeichen für das binär kodierte 'U' nicht als druckbares Zeichen erkannt wird, und infolgedessen von der Schriftverwaltung nicht in den Druckerspeicher geladen wird. Daher muss in diesen Fällen unbedingt '\u55' zur Anwendung kommen, weil nur dann das Unicode-Zeichen tatsächlich als 'U' erkannt und in den Druckerspeicher geladen wird. * Die Notation '\u##' sollte der Kodierung von ganz besonderen Unicode-Zeichen vorbehalten sein. Die Hexadezimal(-)zahlen sind nicht wirklich selbsterklärend, und lassen im Dunkeln, was hier ausgegeben werden soll. Ist im Administrationsprogramm eine Schrift mit grossem Zeichenumfang ausgewählt, z.B. **Arial Unicode** oder **Deja Vu Sans**, können Unicode-Zeichen auch direkt eingegeben und angezeigt werden: {{print2forms:tips:0086-1.png}} \\ \\ \\ besser {{print2forms:tips:0086-2.png}}\\ * Ein Tip: Das rechte Panel im Administrationsprogramm ist in Wirklichkeit ein **Browser-Fenster**. Von daher kann es mit Strg-Plus und Strg-Minus vergrössert und verkleinert werden. Auch die Nutzung des Scrollrades bei gedrückter Alt-Taste wird unterstützt. ((Strg-Null stellt die Darstellungsgrösse wieder auf den Normalzustand zurück!\\ \\ )) Damit lassen sich sehr kleine, kaum lesbare Zeichen in der Darstellung beliebig vergrössern:\\ \\ {{print2forms:tips:0086-3.png}} \\ \\