CIB barcode technischer Leitfaden
Site: | CIB eLearning |
Course: | CIB barcode |
Book: | CIB barcode technischer Leitfaden |
Printed by: | Guest user |
Date: | Sunday, 24 November 2024, 12:14 AM |
1. Lieferumfang
Komponenten |
Softwareumfang |
|
CIB
format/output |
|
CIB format/output Modul (RTF, TIFF, PNG, GIF, BMP, WMF, EMF Eingabedateien) |
JCoMod
|
Nur für JAVA Anwendungen
|
JNI Adapter zu CoMod Java-Klasse für aufrufende Anwendung |
CIB
runshell |
|
CIB runshell, Kommandozeilenshell für WIN32 (nur zu Testzwecken) |
2. Einführung
CIB barcode ist ein vielfältiges und leistungsfähiges Modul (des CIB format) zur Erstellung von Barcodes innerhalb von Dokumenten. Es genügen der Barcodetyp und die im Barcode zu enthaltene Zeichenfolge, schon wird der Barcode erstellt. Unterstützt werden die gängigsten Barcodetypen, z.B. ITF,OMR und Code 39.
Der Barcode oder Strichcode ist eine einfache und kostengünstige Möglichkeit, z.B. Waren für die Erfassung und Auswertung durch einen Computer direkt zu identifizieren. Die Identifikationsdaten können als Barcode codiert und auf Tickets, Verpackungen usw. gedruckt werden. Je nach Verwendungszweck werden die Barcodes mit z.B. unterschiedlichen Scannern gelesen und von einem Computer übertragen. Die ständige und papierlose Verfügbarkeit von Bestandsdaten stellt eines der vielen Vorteile der automatischen Ablesung der Barcode-Informationen dar.
Der Aufdruck von Barcodes auf Druckstücke oder die Einbettung von Barcodes in Dokumente kann auf verschiedene Weisen gelöst werden. In der Regel sind dabei dynamische Barcode gefordert, das heißt solche, deren Darstellung erst zur Laufzeit ermittelt wird. Beispiel:
Die dynamische Erzeugung des Strichmusters oder der Symbolcodes kann dabei während der Datenbereitstellung, beim Rendern der Druckausgabe, während dem Erzeugen der Ausgabedatei oder sogar erst zwischen dem Erzeugen des Druckerdatenstroms und dem eigentlichen Ausdruck gefordert sein.
Hieraus ergeben sich folgende konkrete Fragestellungen:
- Was sind Barcodes, welche gibt es?
- Wie können sie dynamisiert werden?
- Wie erfolgt die Erzeugung des Strichmusters/Symbolcodes zum geforderten Zeitpunkt?
- Wie muss CIB format/barcode dafür benutzt werden?
Der vorliegende Leitfaden beschreibt kurz die erforderlichen Eigenschaften für CIB merge und CIB format/output.
Beim Leser werden Kenntnisse über den Gebrauch von CIB merge und CIB format sowie über das RTF-Format vorausgesetzt.
3. Zusammenfassung
Zunächst wird erläutert, wie die Einbettung von dynamischen und statischen Barcodes in Dokumente aus Anwendersicht funktioniert und welche Voraussetzungen beim Gebrauch erfüllt sein müssen.
Anschließend wird der Begriff Barcode eingeführt und abgegrenzt sowie die relevanten Standards dargestellt. Es wird beschrieben, wie die Barcodes im RTF abgelegt sein können.
Zuletzt folgt ein Entwurf der an CIB merge und CIB format/output erforderlichen Änderungen und Erweiterungen.
4. Gebrauch
Dieser Abschnitt beschreibt die Erzeugung von Dokumenten, die dynamische Barcodes enthalten mit CIB format/output (Komponente innerhalb der CIB docgen Module). Nach der Kurzdarstellung des prinzipiellen Ablaufs werden zu jedem Schritt die Barcodethemen beschrieben.
4.1. Begriffe
Barcode |
Im Ergebnis enthaltenes Strichmuster |
Barcodegrafik |
Bilddatei mit einem Strichmuster |
Barcodewert |
Zeichenfolge, die durch das Strichmuster dargestellt ist |
Barcodefont |
Schriftart, die die Zeichenfolge des Barcodewerts durch eine Folge von Einzel-Strichmustern darstellt |
OMR Strichcode |
Im Ergebnis enthaltenes Strichmuster |
Prüfziffer |
Ist eine je nach Barcodetype berechnete Strichmuster, welches am Ende des Barcodewertes angefügt wird. Die Prüfziffer wird auch Checksumme genannt |
Textmarkenname |
Im Dokument hinterlegte Textmarke, mit welcher man eine Stelle im Dokument markiert |
4.2. Ablauf
Zunächst werden Rohtexte (Textbausteine, Formulare und Textschablonen) mit einem RTF-fähigen Textverarbeitungssystem erstellt.
Die in den Rohtexten einzufüllenden dynamischen Daten werden von der Anwendung bereitgestellt. Alternativen zum dynamischen oder statischen Barcode:
- Unter den bereitgestellten Daten ist auch der Barcodewert.
- Die Anwendung stellt eine eigens generierte Barcodegrafik als Grafikdatei bereit, die an der entsprechenden Stelle im Dokument verknüpft ist.
- Die Anwendung nutzt eine CIB format Schnittstelle um den Barcode von außen auf das Dokument aufzubringen. Spezielle Platzhalter im Dokument sind dann überhaupt nicht erforderlich.
- CIB merge mischt pro Auftrag einen Rohtext (Wurzelbaustein) mit davon aufgerufenen weiteren Textbausteinen und den dynamischen Daten zu einem Ergebnisdokument.
- Der Barcodewert wird über ein REF-Feld in das Dokument eingesetzt. In diesem Fall ist das REF-Feld mit einem Barcodefont formatiert. Dies hat den Nachteil, dass das REF-Feld nicht mehr als REF-Feld erkannt wird. Der Vorteil ist, dass hierdurch gleich eine Art Beispielstrichcode sichtbar wird.
- Der Dateiname der Barcodegrafik wird in das Dokument eingesetzt.
- Es wird ein dynamisch generierter Barcode von CIB format angefordert, indem eine spezielle Anweisung (siehe Abschnitt CIB format) im Rohtext hinterlegt wird. CIB merge ignoriert diese Anweisung und setzt den Barcodewert ein.
- CIB format liest das Ergebnisdokument, positioniert den Barcode geeignet und führt den Zeilen- und Seitenumbruch durch (interne Dokumentstruktur).
- Ist der Barcodewert mit einem Barcodefont formatiert, so fügt Format die entsprechenden "Zeichen" in die Dokumentstruktur ein.
- Eine referenzierte Barcodegrafik wird als Bild in die Dokumentstruktur aufgenommen.
- Die im Dokument enthaltene spezielle Anweisung (siehe Abschnitt CIB format) fordert CIB format auf, eine Barcodegrafik dynamisch im Speicher zu erzeugen und zu positionieren.
- CIB output (PDF, PCL, Postscript, Tiff, usw.) erzeugt aus der internen Dokumentstruktur ein Ergebnisdokument im Ausgabeformat bzw. erzeugt den Ausdruck.
- Die benötigten Zeichen des Barcodefont werden ggf. in die Ausgabedatei eingebettet.
- Die Barcodegrafik wird in das Ausgabedokument eingefügt.
- Die dynamisch generierte Barcodegrafik wird ausgegeben.
5. Barcodes und OMR Strichcodes
Dieser Abschnitt enthält die relevanten Fakten zu Barcodes.
Barcode ist eine Abfolge von dicken und dünnen Linien und spezifizierten Abständen dazwischen, die zusammen eine numerische oder alphanumerische Information beinhalten.
Solche Barcodes werden als eindimensional bezeichnet. Es gibt auch zweidimensionale Barcodes, wo Informationen über Matrixpunkte codiert sind.
Der OMR-Strichcode ist eine Menge von kurzen horizontalen Linien, die auf der rechten oder linken oberen Papierhälfte einer DIN A4 Seite ausgegeben werden. Sie werden von Kuvertiermaschinen ausgewertet.
OMR-Strichcodes beeinflussen das Verhalten von Kuvertiermaschinen. Die Maschinen selektieren hierüber mehrere verschiedene Dokumente für einen Adressaten und kuvertieren sie. Jeder einzelne OMR-Strichcode kontrolliert eine Funktion der Maschine.
Die Bedeutung von OMR Strichcodes sind auch sehr stark Hersteller- bzw. Hardwareabhängig.
CIB format behandelt den OMR-Strichcode wie einen Barcode.
5.1. Einführung
"Menschenschriften" können von Computern nur sehr schwer gelesen werden. OCR Schriften können von Menschen und Computern nur schwer gelesen werden. Deshalb wurde der Barcode entwickelt. Barcodes sind eine einfache Reihe von dünnen und breiten Linien die alphanumerische Informationen darstellen. Der Computer "sieht" eine Art "Morse-Zeichen" von lang und kurz.
Über die letzten Jahre wurden diverse Barcode Schriften entwickelt die alle bestimmte Vorteile und Nachteile haben. Bei der Wahl der richtigen Schrift ist es wichtig darauf zu achten eine standardisierte Schrift zu wählen, die sowohl vom Drucker als auch vom Leser unterstützt wird.
5.2. Barcode Typen
Es sind zahlreiche Barcode Typen definiert. Diese sind entstanden aufgrund unterschiedlicher Anforderungen. Entsprechend den speziellen Erfordernissen kann also für jede Anwendung der am besten geeignete Barcode Typ ausgewählt werden. In diesem Abschnitt werden nur die derzeit geforderten kurz beschrieben.
Code ITF (Code 2/5 Interleaved)Code 2/5 Industrie
Code 2/5 Matrix
Code 39
Code 39 erweitert
Code 128
EAN 8
EAN 13
EAN 128
DataMatrix
QR-Code
PDF417
Code 93
Code 93 Extended
Code ITF (Code 2/5 Interleaved)
Interleaved Two of Five / Code 2/5 Interleaved.
Der Code 2/5 Interleaved (interleaved = überlappt) ist ein Zweibreitencode mit einem Zeichenvorrat von 10 Ziffern (numerischer Code). Er beinhaltet somit nur die Ziffern 0 bis 9. Die Stellenzahl kann beliebig lang sein, muss aber geradzahlig sein. Die Verwendung von Prüfziffern ist nicht vorgeschrieben. Der Urtyp des Codes verwendet keine Prüfsumme. Er bietet, ähnlich dem Code 39 den Vorteil der Selbstprüfung. Es werden ein Start- und ein Stopp-Zeichen verwendet. Die Länge ist variabel. Er ist eine Variante des Code 25.
Dieser Code ist aufgebaut aus 2 breiten und 3 schmalen Strichen, bzw. 2 breiten und 3 schmalen Lücken. Druckverhältnis V: schmales Element : breites Element V = 1 : 2 bis 1 : 3. Ist das schmale Element kleiner als 0,5mm, dann gilt: schmales Element : breites Element V = 1 : 2,25, bis max. V = 1 : 3. Zwei Ziffern bilden immer ein Paar. Die erste Ziffer wird dargestellt mit 5 Strichen, die 2. Ziffer mit den unmittelbar den Strichen der 1. Ziffer folgenden Lücken. Fünf Striche und Lücken stellen ein Ziffernpaar dar. Zielsetzung ist es durch eine paarweise Darstellung der zu codierenden Ziffern eine Platzersparnis zu erhalten. Hieraus ergibt sich eine hohe Informationsdichte z.B. 2,7 mm/Ziffer bei einer Modulbreite X = 0,3 mm und Verhältnis V = 1 : 3.
Vorteil: Hohe Informationsdichte, selbstprüfbar.
Nachteil: Alle Lücken tragen Information, deshalb kleine Toleranz (gute Druckqualität erforderlich); sowie die paarweise Darstellung der Nutzzeichen (kann jedoch umgangen werden indem man dem Code eine Null voranstellt).
Achtung:
Wenn der Barcode-Wert aus einer ungeraden Anzahl von Zeichen besteht, wird durch den Modul CIB barcode die Zeichenzahl durch Voranstellen einer „0“ geradzahlig gemacht. Es erfolgt kein Fehlerhinweis an den Benutzer.
Code 2/5 Industrie
Dieser Barcode ist ein Zweibreitencode, mit dem die Ziffern 0 bis 9 dargestellt werden können. Die Anzahl der Zeichen ist variabel, die Verwendung von Prüfziffern ist nicht vorgeschrieben. Vom Urtyp des Codes werden keine Prüfsummen genutzt. Es werden jeweils ein Start- und ein Stoppzeichen verwendet.
Der Code findet seine Hauptanwendung in der Industrie und ist auch als Code 2 aus 5 bekannt. Der Code ist mittlerweile recht alt und primitiv, dies äußert sich negativ in seinem Platzverbrauch. Deshalb findet der Code heutzutage kaum noch Verwendung.
Der Code 2/5 Industrie ist aus
2 breiten und 3 schmalen Strichen aufgebaut. Nur die Striche sind codiert, die
Lücken tragen keine Information. Druckverhältnis V: schmaler Strich : breitem
Strich V = 1 : 2 bis 1 : 3; (Verhältnis: 3:1 (empfohlen), (auch 5:2 oder
2:1 (High Density) möglich.)
Codeaufbau: Ruhezone, Startzeichen,
Nutzziffern, (Prüfziffer,) Stoppzeichen, Ruhezone; Prüfziffernverfahren:
Standard (Modulo 10 mit der Gewichtung 3)
Vorteil: besteht nur aus Strichen, Lücken tragen keine Information. Grosse Drucktoleranz (+/- 15%), deshalb auch mit den einfachsten Druckverfahren herstellbar, selbstüberprüfend
Nachteil: Kleine Informationsdichte
Code 2/5 Matrix
Dieser Code ist mit der Ausnahme der überbreiten Balken ein Zweibreitencode, mit dem die Ziffern 0 bis 9 dargestellt werden können. Die Anzahl der Zeichen ist variabel. Im Start- und Stoppzeichen befindet sich ein überbreiter Balken. Die Verwendung von Prüfziffern ist nicht vorgeschrieben.
Code 39
Alphanumerischer Code. Darstellbar 0 bis 9, 26 Buchstaben (Großbuchstaben!), 7 Sonderzeichen. Der Zeichenvorrat ist somit 0123456789[Space]ABCDEFGHIJKLMNOPQRSTUVWXYZ-.$/+%. Der Code besitzt keine feste Länge.
Die Prüfziffernberechnung erfolgt nach Modulo 43. Alle Zeichen eines Codes werden Referenzzahlen zugeordnet, welche zu einer Summe addiert werden. Diese wird durch 43 dividiert. Der Rest der Division entspricht der Prüfsumme.
Jedes Zeichen besteht aus 9 Elementen (5 Strichen und 4 Lücken). 3 der Elemente sind breit und 6 schmal, mit Ausnahme der Darstellung der Sonderzeichen. Dies erlaubt die Selbstprüfung des Codes. Die Lücke zwischen den Zeichen (als Trennung) ist ohne Information. Druckverhältnis V: schmales Element : breitem Element V = 1 : 2 bis 1 : 3. Ist das schmale Element kleiner als 0,5mm, dann gilt schmales Element : breites Element V = 1 : 2,25, bis max. V = 1 : 3. Die erste Ziffer wird dargestellt mit 5 Strichen, die 2. Ziffer mit den unmittelbar den Strichen der 1. Ziffer folgenden Lücken. Niedrige Informationsdichte, z.B. 4,8 mm/Ziffer bei einer Modulbreite X = 0,3 mm und Verhältnis V = 1 : 3
Vorteil: Alphanumerische Darstellung, großer Zeichenvorrat
Nachteil: Niedrige Informationsdichte, z.B. 4,8 mm/Ziffer bei einer Modulbreite X = 0,3 mm und Verhältnis V = 1 : 3. Kleine Toleranz.
Code 39 erweitert
Der Code 39 erweitert ist eine erweiterte Version des Code 39. Mit Code 39 erweitert sind auch die 26 Kleinbuchstaben (a-z) sowie die Sonderzeichen der Tastatur darstellbar (alphanumerischer Code). Besitzt ebenfalls keine feste Länge.
Die zusätzlichen Zeichen (z.B. die Kleinbuchstaben) werden durch Kombination von jeweils zwei Zeichen (der bereits von Code 39 existierenden Zeichen) dargestellt. Der Decoder des Lesegerätes interpretiert ein Sonderzeichen gefolgt von einem Großbuchstaben entsprechend der Referenztabelle des Code 39 extended.
Code 39 erweitert kann je nach Anwendungsfall mit oder auch ohne Prüfsumme verwendet werden. Die Prüfsumme wird ebenfalls nach Modulo 43 berechnet.
Nachteil: sehr kleine Informationsdichte, kleine Toleranz
Code 128
Der Code 128 Auto ermöglicht den vollen ASCII-Zeichensatz darzustellen. Hierzu wird automatisch zwischen den 3 Zeichensätzen A, B und C hin- und her geschaltet um damit alphanumerische Daten in der kürzest möglichen Form zu verschlüsseln. Wegen der hohen Informationsdichte und der Fähigkeit, den vollen ASCII-Zeichensatz darstellen zu können, hat sich der Code 128 weit verbreitet.
Ein Zeichen des Codes 128 setzt sich aus 11 Modulen, nämlich drei Strichen und drei Lücken, zusammen. Ausnahme ist das Stoppzeichen, das sich aus 13 Modulen zusammensetzt. Die Codelänge ist variabel.
Die drei Zeichensätze im Einzelnen:
Code 128A: Er enthält Ziffern, Großbuchstaben, Sonderzeichen und ASCII-Steuerzeichen.
Code 128B: Er enthält Ziffern und alle Groß- und Kleinbuchstaben, sowie Sonderzeichen und Umschaltzeichen.
Code 128C: Dieser Zeichensatz ordnet speziell für numerische Erfordernisse den Barcodemustern 100 Wertepaare von „00“ bis „99“ zu (plus Sonderzeichen FNC1).
Der Barcodewert muss aus einer geraden Anzahl von Zeichen bestehen. Wenn der Barcodewert aus einer ungeraden Anzahl von Zeichen besteht, wird der Barcode nicht erzeugt, sondern eine Fehlermeldung ausgegeben.
Diese 3 eigenständigen Zeichensätze sind nur Bestandteil des Code128 Auto und werden daher kaum als eigenständiger Typ verwendet. In der Regel ist eine Nutzung eines speziellen Zeichensatzes unnötig, da der Haupttyp Code128 Auto die Zeichensätze automatisch optimiert auswählt.
Prüfsumme Bei dem Code 128 wird intern eine Prüfsumme gebildet. Sie berechnet sich aus Modulo 103. Sie ist jedoch nicht Teil des Barcodes und wird deshalb in der Klarschriftzeile nicht dargestellt.
Der Code 128 ermöglicht ohne Zeichenkombinationen den vollen ASCII-Zeichensatz darzustellen. Jedoch darf nicht angenommen werden, dass der Code 128 mit seinem Zeichensatz alle ASCII-Zeichen direkt darstellen kann. Es wird zwischen 3 Zeichensätzen A, B und C unterschieden, die je nach Problemstellung zu verwenden sind. Ebenso ist auch eine Vermischung dieser Zeichensätze möglich. Um den vollen ASCII-Zeichensatz darstellen zu können, benötigt man das Startzeichen A oder B in Verbindung mit einem Sonderzeichen des Code 128. Jedes Zeichen besteht aus 11 Modulen, aufgeteilt in 3 Striche und 3 Lücken. Die Striche bestehen immer aus einer gerad zahligen Anzahl von Modulen (gerade Parität) und die Lücken aus einer ungerad zahligen Anzahl von Modulen. Das Stoppzeichen ist die Ausnahme und besitzt 13 Module, bestehend aus 11 Modulen und einem Begrenzungsstrich mit 2 Modulen.
Vorteil. Voller ASCII-Zeichensatz, Hohe Informationsdichte
Nachteil: Kleine Toleranz, Vierbreiten Code, ASCII-Zeichensatz nicht vollständig mit einem Zeichensatz darstellbar
EAN 8
Hier gibt es zwei Zeichensätze A und C mit jeweils 10 Ziffern. Die Länge ist auf acht Stellen festgelegt. Dieser Barcode ist besonders für Artikel gedacht, die wenig Platz zum Aufdruck von Barcodes bereitstellen. Da diese Nummern nur begrenzt verfügbar sind, werden sie nur auf Antrag vergeben. Ein Zeichen setzt sich - wie auch beim EAN 13 - aus sieben Elementen zusammen. Es besteht aus einem 3-stelligen Präfix (Kennzahlorganisation von der EAN zugeordnet) und einer 4-stellige Artikel Identifikation. Die Verwendung von Prüfziffern ist vorgeschrieben. Sie berechnen sich nach Modulo 10. Auch hier werden ein Start-, ein Stopp- und ein Trennzeichen verwendet.
Vorteil: Hohe Informationsdichte in 10 verschiedenen Größen.
Nachteil: Sehr kleine Toleranzen +/- 10%
(Von CIB format nicht unterstützt)
EAN 13
Er dient der Auszeichnung von Gebrauchs- und Verbrauchsgütern. Es stehen drei verschiedene Zeichensätze zur Verfügung mit einem Zeichenvorrat von je zehn Ziffern. Die Zeichen setzen sich aus vier unterschiedlich breiten Elementen zusammen. Prüfziffern sind vorgeschrieben (Modulo 10), die Barcodelänge ist auf dreizehn Stellen begrenzt. Es werden ein Start-, ein Stop- und ein Trennzeichen verwendet. Als Start- und Stopzeichen dienen hier sogenannte Randzeichen.
Vorteil: Hohe Informationsdichte in 10 verschiedenen Größen.
Nachteil: Sehr kleine Toleranzen +/- 10%
(Von CIB format nicht unterstützt)
EAN 128
Entspricht dem Code 128, jedoch wird als Startzeichen die Kombination von Start A, Start B oder Start C mit dem Zeichen FNC1 (der s.g. Function Code 1) verwendet. Diese direkte Aufeinanderfolge von Startzeichen und FNC1 am Anfang ist ein eindeutiges Kennzeichen des EAN 128. Obwohl die Länge des Codes variabel ist sollten 165 mm nicht überschritten werden. Maximal sind 48 Nutzzeichen (inklusive Datenbezeichner/AIs und eventueller FNC1 Trennzeichen) und 35 Symbolzeichen (incl. Hilfszeichen und Prüfzeichen) erlaubt.
Es können mehrere Daten gleichzeitig codiert werden. Üblich ist z.B. Lebensmittelpaletten neben dem Produktcode zusätzlich mit Gewichtsangaben und dem Haltbarkeitsdatum im Barcode auszuzeichnen.
(Von CIB format nicht unterstützt)
DataMatrix
Es wird der gesamte ASCII-Zeichensatz unterstützt. Die Länge ist variabel. Die Prüfziffer wird berechnet nach der Reed-Solomon-Fehlerkorrektur/Interne Fehlerkorrektur.
Dieser Code stellt einer der bekanntesten 2D Codes dar. Er besteht aus 4 Hauptkomponenten. Der Datenbereich enthält die Daten in der codierten Form. Die feste Begrenzungslinie ist die Ecke, die bei normaler Ausrichtung links und unten des Datenbereichs mit einer ununterbrochenen Linie dargestellt wird. Er wird benötigt um die Lage des Codes beim Scannen zu erkennen. Die „offene Begrenzungslinie“ liegt in der gegenüberliegenden Ecke der „festen Begrenzungslinie“. Diese Linien (oben und rechts) bestehen abwechselnd aus schwarzen und weißen Punkten. Sie stellen somit offene Linien dar. Beim Scannen werden diese zum Bestimmen der Zeilen und Spalten verwendet. Die Ruhelinie umgibt den Code. Dieser Bereich muss mindestens so breit sein, wie eine Spalte/Zeile bzw. ein Punkt des Codes.
Es ist möglich 3116 Ziffern oder 2335 Zeichen zu codieren. Je nach Datenmenge ist dies abhängig von einer unterschiedlichen Symbolgröße.
Vorteil: Er ist ein sehr kompakter und sicherer Code.
Nachteil: Er ist nur mit Bildverarbeitungssystemen lesbar und nicht mit linearen Barcodelesern.
QR-Code
(ab CIB format 5.3.237)
Der QR-Code (Quick Response) ist ein 2D-Code, der von der Firma Denso im Jahr 1994 entwickelt und zur Markierung von Baugruppen und Komponenten in der japanischen Automobilproduktion eingesetzt wurde.
Der japanische Standard für QR-Codes "Japan Industrial Standard" X 0510, wurde im Januar 1999 veröffentlicht und entspricht seit dem Jahr 2000 dem Standard ISO/IEC18004.
Der QR-Code besteht aus einer quadratischen Matrix aus schwarzen und weißen Punkten, die die kodierten Daten binär darstellen. Zur Feldbegrenzung enthält er in drei seiner Ecken ein bestimmtes Muster. Über das fehlende Muster in der vierten Ecke erkennt das Lesegerät die Orientierung. Bei zunehmender Größe des Codes werden weitere Muster hinzugefügt, um die Ausrichtung des Codes besser erkennbar zu machen. Zwischen den drei Hauptpositions-Markierungen befindet sich eine Linie aus einer Folge streng abwechselnder Bits, worüber sich die Matrix definiert. Im Code enthalten sind Versionsinformationen und das benutzte Datenformat. Diese Informationen sind neben den Mustern in den Ecken angeordnet. Der restliche Bereich des Quadrats ist der Datenteil, der die kodierten Daten in redundanter Form enthält.
Die Matrixgröße des QR-Codes beträgt mindestens 21×21 und maximal 177×177. Dadurch ergeben sich folgende Darstellungs-Kapazitäten:
- Numerisch: maximal 7.089 Zeichen
- Alphanumerisch: maximal 4.296 Zeichen
- Binär: maximal 2.953 Bytes
Die Randzone (quiet zone) sollte mindestens 4 Elemente breit sein. Größere Inhalte lassen sich auf bis zu 16 einzelne Codes aufteilen.
Es existieren vier Fehlerkorrektur-Levels, die eine Rekonstruktion von 7 % (Level L) bis zu 30 % (Level H) beschädigter Daten zulassen. Dabei kommt die Fehlerkorrektur der Reed-Solomon-Code zum Einsatz.
PDF417
(ab CIB format 5.3.225)
Dieser 2D-Code besitzt eine variable Länge. Es wird der gesamte ASCII-Zeichensatz unterstützt. Er basiert auf gestapelte Strichcodes (Stapelcodes).
Ein PDF417 Barcode besteht aus 3 bis 90 Zeilen, von denen jede ein Strichcode ist. Jede Zeile besteht aus:
- Einer “quiet zone”, d.h. eine vorgegebene Anzahl Leerstellen vor dem Barcode.
- Ein “Startmuster”, das den Barcode-Typ identifiziert (z.B. PDF417). Jeder Barcode-Typ hat sein spezielles “Start-/Stopmuster”.
- Ein "Zeilen-Codewort-links”, das Informationen über diese Zeile enthält (wie z.B. Zeilennummer, Fehler-Korrektur-Rate)
- 1 - 30 Daten-Codewörter: Ein Codewort ist eine Gruppe von Strichen und Lücken, die jeweils eine Zahl, einen Buchstaben oder ein anderes Zeichen repräsentieren.
- Jede Zeile besteht aus der gleichen Anzahl von Codewörtern.
- Jedes Codewort besteht aus vier Strichen und vier Lücken. Daher kommt die „4“ im Namen des Barcodes.
- Die Gesamtbreite eines Codewortes ist das 17fache der Breite des schmalsten erlaubten Striches (berechnet sich aus der x-Dimension=Anzahl Spalten). Daraus resultiert die „17“, die im Namen des Barcodes enthalten ist.
- Jedes Codewort beginnt und endet mit einem Leerzeichen.
- Es gibt insgesamt 926 mögliche Codewörter, 900 für Daten, 26 für Spezialfunktionen.
- Jedes Codewort wird aus einem von drei verschiedenen „Clustern“ geholt:
- Jedes Cluster enthält ein bestimmtes Strich-/Lücken-Muster für jedes der 926 Codewörter.
- Innerhalb der Cluster kommt jedes Strich-/Lücken-Muster nur einmal vor.
- Die Zeilennummer (mod 3) legt fest, welches Cluster zu verwenden ist.
- Dadurch wird für alle Codewörter einer Zeile das gleiche Cluster verwendet.
- Der Zweck des Clusters ist, eine feste Beziehung zwischen Codewort und Zeile herzustellen. Dadurch kann der Scanner auch waagrecht über den Barcode bewegt werden.
- Ein „Zeilen-Codewort-rechts” mit weiteren Informationen zu der Zeile.
- Ein “Stopmuster”
- Eine “quietzone”.
Die Korrektur-Rate ist von „0“ bis „8“ einstellbar. Bei „8“ können ca. 50% der Zeichen rekonstruiert werden, der Barcode wird dann allerdings sehr groß.
Vorteil: Sehr kompakter und flexibler Code mit variabler Länge. Er hat sehr gute Fehlerkorrektur-Möglichkeiten.
Code 93
Dieser Code umfasst eine variable Länge. Es sind keine Prüfziffern vorgesehen. Er ist ein alphanumerischer Code vergleichbar dem Code 39. Sein Zeichenvorrat beinhaltet die Ziffern 0 bis 9, 26 Großbuchstaben (A–Z), das Leerzeichen sowie die Sonderzeichen Minus, Punkt, Dollarzeichen, Schrägstrich, Plus und das Prozentzeichen.
(Von CIB format nicht unterstützt)
Code 93 Extended
Er stellt eine erweiterte Version des Code 93 dar. Er kann den einfachen ASCII-Zeichensatz darstellen. Es sind die 26 Kleinbuchstaben (a-z) sowie die Sonderzeichen der Tastatur darstellbar. Die Breite des Codes kann hierdurch jedoch erheblich erhöht werden, da einige Zeichen aus zwei Zeichen im Strichcode gebildet werden.
(Von CIB format nicht unterstützt)
5.3. Schriftarten
Sogenannte Barcodefonts enthalten für die einzelnen Zeichen (bzw. Zeichenpaare bei 2/5 interleaved) des Barcodewerts je eine Strichfolge.
5.4. OMR Strichcodes
Enthalten Hinweise für Kuvertiermaschinen.
Ein OMR Strichcode ist für jede Kuvertierungsmaschine speziell definiert und muss angepasst werden.
6. Handhabung von Barcodes mit CoMod
Die CIB office Module unterstützen folgendes Vorgehen um zu einer Barcode- und/oder Strichcodeausgabe innerhalb eines Dokumentes zu kommen:
- Unterstützung von Barcodefonts die der Anwender selbstständig zur Formatierung benutzt.
- Unterstützung von statischen Barcodegrafiken die der Anwender in sein Dokument integriert.
- Erstellung und Einbindung dynamischer Barcode- und Strichcodes, die nachfolgend in Details beschrieben sind.
Zur besseren Übersicht ist an der jeweiligen Stelle auch das Vorgehen für Barcodefonts und statische Barcodegrafiken dokumentiert.
6.1. CIB merge
Eingabe
CIB merge liest Rohtexte korrekt, die mit einem Barcodefont formatierten Text oder mit einem Barcodefont formatierte REF-Feldanweisungen enthalten. Im Dokument eingebettete oder referenzierte Barcodegrafiken werden von CIB merge wie normale Grafiken korrekt behandelt. CIB merge akzeptiert ebenso die speziellen Barcodeanweisungen, die für das CIB format/barcode Modul verfügbar sind. (siehe Abschnitt CIB format).
6.2. CSV/XML-Datendateien
Ausgabe
Feldinhalte, die in eine mit einem Barcodefont formatierte REF-Feldanweisung eingesetzt werden, werden normal behandelt. Das heißt wenn der Schalter \*Zeichenformat in der Feldanweisung angegeben war, ist der Feldinhalt im Ausgabedokument mit der gleichen Schriftart formatiert, wie die Feldanweisung.
In der speziellen Anweisung (siehe Abschnitt CIB format) eingebettete Felder werden aufgelöst, die dadurch eventuell veränderte Anweisung selbst dann wieder ins Ausgabedokument
übernommen.
6.3. CIB format
EingabeDynamisches Generieren der Barcodegrafik in einem Platzhalter im Dokument
Dynamisches Generieren der Barcodegrafik über die CIB format Eigenschaft „BarcodeFilename“
Dynamisches Generieren der Barcodegrafik über eine CIB format Callbackfunktion
Dynamisches Generieren einer OMR Strichcodegrafik
Dynamisches Generieren eines DataMatrix ECC 2D Barcodes
Dynamisches Generieren eines QR-Barcodes
Dynamisches Generieren eines PDF417-Barcodes
Eingabe
CIB format verarbeitet mit Barcodefonts formatierte Texte wie alle anderen formatierten Texte. Das heißt, die Buchstabenbreiten werden aus der Schriftart ermittelt und beim Zeilen- und Seitenumbruch berücksichtigt.
Im Dokument eingebettete oder referenzierte Barcodegrafiken werden wie andere Grafiken positioniert und berücksichtigt.
Im Dokument enthaltene spezielle Anweisungen zur dynamischen Generierung einer Barcodegrafik werden ausgewertet, und eine zum dort angegebenen Barcodewert gehörige Barcodegrafik im entsprechenden Barcodetyp generiert.
Dynamisches Generieren der Barcodegrafik in einem Platzhalter im Dokument
Mit einer speziellen Form des INCLUDEPICTURE-Feldes (EinfügenGrafik) wird die dynamische Generierung einer Barcodegrafik angefordert.
{ INCLUDEPICTURE "BARCODE:<Typ>;<Wert>;<Orientierung>;<Breite>;<Höhe>;<Prüfziffer>" }
Das Feld enthält dazu folgende Informationen:
Anweisung |
Bedeutung |
BARCODE: |
Kennzeichnung, dass ein Barcode oder Strichcode erzeugt werden soll BARCODE:<Typ>;[<Subtyp>;]<Wert>;<Orientierung>;<Breite>;<Höhe>; |
<Typ>[;] |
Ein Barcodetyp aus der von CIB format unterstützten Menge von Typen: CodeITF Code25Industrial Code25Matrix Code39 Code39Extended Code128A Code128B Code128C Code128Auto DataMatrix PDF417 QR |
[<Subtyp>[;]] |
Wird für den Datamatrix Barcode verwendet: ECCn(n = 0 – 200) |
<Wert>[;] |
Der individuelle Wert, den der Barcode darstellen soll. Achtung: Bei Code128C und bei CodeITF muss <Wert> aus einer geraden Anzahl von Zeichen
bestehen. |
<Orientierung>[;] |
Wie das Strichmuster orientiert sein soll: horizontalleft (vertikale Striche nebeneinander, erstes Zeichen links) horizontalright (vertikale Striche nebeneinander, erstes Zeichen rechts) verticalleft (horizontale Striche untereinander, erstes Zeichen oben) verticalright (horizontale Striche übereinander, erstes Zeichen unten) Achtung: Bezugspunkt für die Orientierung des Barcodes ist die Orientierung des INCLUDEPICTURE-Befehls, d.h. ein vertikal geschriebener INCLUDEPICTURE-Befehl kann bei z.B. verticalleft zu einem horizontalen Barcode führen. Bei Eingabe des Barcodes über Property „BarcodeFilename“ wird die Orientierung des Barcodes an dem Seitenlayout ausgerichtet. |
<Breite>[;] |
Vom Barcodetyp abhängige Angaben zu Strichbreiten in mm. (x.xmm ) Für den Typ CodeITF ist der Wert die Strichbreite des schmalen Striches. |
<Höhe>[;] |
Angabe zur Höhe der Barcode-Balken in mm (x.xmm) |
<Prüfziffer>[;] |
Ob der Barcode mit oder ohne Prüfziffer generiert werden soll, wird mit diesem Parameter angegeben. (default = mit Prüfziffer) |
[<Verringerungsmethode>] |
Wird für den Datamatrix Barcode verwendet: auto yes no |
Die spezielle Anweisung hat in der Eingabe für CIB format folgendes Aussehen:
mit Prüfziffer:
{ INCLUDEPICTURE "BARCODE:Code39;1234567890;horizontalleft;0.5mm;7.5mm;" }
ohne Prüfziffer:
{ INCLUDEPICTURE "BARCODE:Code39;1234567890;horizontalleft;0.5mm;7.5mm;nochecksum" }
Der Barcodewert kann auch über die Datenversorgung variabel eingesteuert werden. Die Eingabe für CIB merge kann wie folgt aussehen, damit der Barcodewert an der richtigen Stelle eingesetzt wird:
Variante a:
Durch die CSV Variable wird die komplette Barcodevorgabe angeliefert:
{ INCLUDEPICTURE "{ REF barcode \* Zeichenformat}" }
Variante b:
Durch die CSV Variable wird nur der Barcodewert angeliefert:
{ INCLUDEPICTURE "BARCODE:Code39;{ REF barcodeWert };horizontalleft;0.5mm;15mm;" }
Nachteil: In WORD2007 wird dieser Befehl nach dem ersten Abspeichern aus dem RTF entfernt und durch einen Grafik-Platzhalter ersetzt und damit nicht mehr bearbeitet werden.
Variante c:
{ SET Barcodeanweisung "BARCODE:DataMatrix;ECC200;{REF Text};horizontalleft;20;20;;ansi" }
{ INCLUDEPICTURE "{REF Barcodeanweisung}" }
Diese Variante ist eine Kombination aus a und b, sie vermeidet den Nachteil von Variante b.
Es wird die Verwendung der Variante c empfohlen.
Aus diesen Informationen baut CIB format im Speicher dynamisch das Strichmuster auf der Barcodegrafik auf und positioniert diese entsprechende der INCLUDEPICTURE-Anweisung.
Hinweis:
Wenn es in Variante a durch den Mischvorgang zu einem leeren Inhalt (= nicht versorgter Barcode) kommt, so wird diese INCLUDEPICTURE Vorgabe von CIB format überlesen, als ob keine Anweisung vorhanden ist. Bei Variante b hingegen wird an Stelle der Barcodegrafik ein Platzhalter dargestellt.
Dynamisches Generieren der Barcodegrafik über die CIB format Eigenschaft „BarcodeFilename“
Alternativ zu einem Barcode-Platzhalter im Dokument kann man auch direkt eine Property des CIB format Modules als Aufrufparameter für Barcodeparameter benutzen.
Bei der Ausgabe eines Dokumentes werden dann diese Vorgaben berücksichtigt und auf den gewünschten Seiten an den gewünschten Stellen, die vorgegebenen Barcodes ausgegeben.
Es ist möglich in dieser Property mehrere Barcodeanweisungen nacheinander abzulegen.Die Property „BarcodeFilename“ enthält dazu folgende Informationen
Anweisung |
Bedeutung |
POS: |
Positionsangabe, an der der Barcode aufgedruckt werden soll POS:<x-Wert>;<y-Wert>;< Seitenangabe>;<Barcode> |
<x-Wert>[;] |
x-Position linke obere Ecke in mm vom linken Papierrand. Durch Angabe eines negativen Wertes kann der Bezugspunkt auf den rechten Papierrand geändert werden (ab CIB format 5.3.223). |
<y-Wert>[;] |
y-Position linke obere Ecke in mm vom oberen Papierrand. Durch Angabe eines negativen Wertes kann der Bezugspunkt auf den unteren Papierrand geändert werden (ab CIB format 5.3.223). |
<Seitenangabe>[;] |
Auf welchen Seiten des Dokuments der Barcode ausgegeben werden soll: Textmarkenname (Bar-/Strichcode auf alle Seiten die mit dieser Textmarke (Ausfertigung) markiert sind. Innerhalb einer Ausfertigung kann auch noch, mit Komma getrennt, durch Angabe eines Wertes aus unterer Liste weiter eingeschränkt werden (ab CIB format 5.3.223)). First (nur erste Seite), NoFirst (alle bis auf die erste Seite), Last (nur letzte Seite), NoLast (alle bis auf die letzte Seite), Even (ungerade Seiten) Odd (gerade Seiten) All (alle Seiten) Wert (diese Seite) Wert1-Wert2 (diesem Seitenbereich) Wert1-Wert2[,]Wert3 (diesen Seiten/Seitenbereich) Die Prüfung erfolgt in der Reihenfolge dieser Liste. Erst die Kommandowörter, dann die numerischen Werte und dann Textmarkennamen. |
<Barcode> |
Komplette Barcodeanweisung (siehe Kapitel „Dynamisches
Generieren der Barcodegrafik in einem Platzhalter im Dokument“) und |
Die Seitenangaben besitzen verschiedene Prioritäten:
All, Odd, Even, NoFirst, NoLast Priorität: keine
First, Last, Wert Priorität: DIRECT
Wert1-Wert2 Priorität: RANGE
Dabei gilt folgende Rangfolge: Keine Priorität < RANGE < DIRECT
Besitzen zwei Angaben gleiche Priorität, so gelten beide, ansonsten gilt die mit der höheren Priorität.
Die Angabe „All;Barcode1;Last;Barcode2“ bewirkt also, dass auf allen Seiten bis auf der letzten, Barcode1 platziert wird und auf der letzten Seite stattdessen Barcode 2 (da Last > All).
Möchte man hingegen auf allen Seiten Barcode1 platzieren und zusätzlich auf der letzten Seite Barcode2, ist dies möglich, wenn man die Angaben durch geschweifte Klammern trennt.
{All;Barcode1}{Last;Barcode2}
Alles, was innerhalb der geschweiften Klammern steht ist durch oben genannte Prioritäten geregelt, zwischen den geschweiften Klammern gilt jedoch keine Priorisierung.
Beispiele für PDF-Konvertierung über Runshell
1.
cibRsh.exe BarcodeFilename=" {POS:6.0mm;211.0mm;All;BARCODE:OMR;1;verticalleft;9.0mm;0.75mm;5.5mm;;
POS:6.0mm;215.8mm;All;BARCODE:Code39;000161;verticalright;0.31mm;9.0mm;nochecksum;
POS:6.0mm;255.0mm;Last;BARCODE:OMR;1;verticalleft;9.0mm;0.75mm;5.5mm;}
" -f Test.rtf
Im Ergebnis-PDF sind auf allen Seiten, außer der letzten, der erste OMR-Barcode und der Code39 aufgebracht, auf der letzten Seite nur der 2. OMR-Barcode.
2.
cibRsh.exe BarcodeFilename=" {POS:6.0mm;211.0mm;All;BARCODE:OMR;1;verticalleft;9.0mm;0.75mm;5.5mm;;
POS:6.0mm;215.8mm;All;BARCODE:Code39;000161;verticalright;0.31mm;9.0mm;nochecksum
};
{POS:6.0mm;255.0mm;Last;BARCODE:OMR;1;verticalleft;9.0mm;0.75mm;5.5mm;}
" -f Test.rtf
Durch das verwenden von Klammern ändert sich das aufbringen der Barcodes, so das auf allen Seiten der erste OMR-Barcode und der Code39, jedoch auf der letzten ZUSÄTZLICH der 2. OMR-Barcode enthalten ist.
3.
cibRsh.exe BarcodeFilename=" {POS:6.0mm;211.0mm;All;BARCODE:OMR;1;verticalleft;9.0mm;0.75mm;5.5mm;;
POS:6.0mm;215.8mm;All;BARCODE:Code39;000161;verticalright;0.31mm;9.0mm;nochecksum;
POS:6.0mm;255.0mm;NoLast;BARCODE:OMR;1;verticalleft;9.0mm;0.75mm;5.5mm;}
" -f Test.rtf
In diesem Beispiel werden auf allen Seiten alle drei Barcodes aufgebracht, auf der letzten aber nur die ersten beiden.
4.
cibRsh.exe BarcodeFilename=" {POS:6.0mm;211.0mm;AUSF1,1,AUSF2,1;BARCODE:OMR;1;verticalleft;9.0mm;0.75mm;5.5mm;}
" -f Test.rtf
Der Barcode wird nur auf die erste Seite der Ausfertigungen AUSF1 und AUSF2 aufgebracht.
Dynamisches Generieren der Barcodegrafik über eine CIB format Callbackfunktion
Als weitere Alternative zu einem Barcode-Platzhalter im Dokument kann man dem CIB format Module auch eine Callbackfunktion setzen, die dann bei jeder generierten Ausgabeseite durchlaufen wird.
Man kann auf diese Weise seitenabhängig dynamische Barcodes mit der unter „Dynamisches Generieren der Barcodegrafik über die CIB format Eigenschaft“ beschriebenen Property setzen.
Bei der Ausgabe eines Dokumentes werden dann diese Vorgaben berücksichtigt und auf den gewünschten Seiten an den gewünschten Stellen, die vorgegebenen Barcodes ausgegeben.
Dynamisches Generieren einer OMR Strichcodegrafik
Die in den Kapiteln „Dynamisches Generieren der Barcodegrafik in einem Platzhalter im Dokument“ bis „Dynamisches Generieren der Barcodegrafik über eine CIB format Callbackfunktion“ beschriebenen Verfahren können auch zum Einfügen von OMR Strichcodes genutzt werden. Diese enthalten folgende Information:
Spezielle OMR Strichcodegrafik
Anweisung |
Bedeutung |
BARCODE: |
Kennzeichnung, dass ein Bar- oder Strichcode erzeugt werden soll BARCODE:<Typ>:<Subtyp>;<Daten>;<Orientierung>;<Strichbreite>;<Strichhöhe> |
<Typ> |
OMR Dient der Steuerung von Kuvertier-Maschinen. |
<Subtyp> |
Der Subtyp beschreibt die Funktionen, die die spezielle Kuvertiermaschine unterstützt. <Subtyp> := [<Subtyp_E>][ <Subtyp_S> ][<Subtyp_N>][ <Subtyp_P>]
<Subtyp_E> := “E” | “” (Envelop | Collect) <Subtyp_S> := “S” | “” (Seal | NotSeal) <Subtyp_N> := “1” | “3” | “7” | “” <Subtyp_P> := “P” | “” (Parity | noParity) Beispiel: OMR:ES3 bedeutet, dass die Kuvertiermaschine folgende Funktionen unterstützt: Envelop/Collect Achtung: Die Reihenfolge der Subtypen ist durch obige Beschreibung festgelegt. Auf Groß-/Kleinschreibung muss geachtet werden. |
<Daten> |
Hier wird die konkrete Belegung der von der Kuvertiermaschine unterstützten Funktionen (Subtypen) gemacht, d.h. nur Funktionen, die unter <Subtyp> definiert wurden, können auch mit <Daten> belegt werden.
[<Envelope/Collect>],[<Seal/NotSeal>],[<Kontrollnummerierung>] Beispiel: OMR:ES3;E,,2; bedeutet die Aufbringung der folgenden Striche: Start-Symbol
|
<Orientierung>[;] |
horizontalleft – den Strichcode von links nach rechts ausgeben horizontalright – den Strichcode von rechts nach links ausgeben verticaltopverticalleft - den Strichcode von oben nach unten ausgegeben verticalbottomverticalright – den Strichcode von unten nach oben ausgegeben (default = verticaltop) |
<Strichbreite>[;] |
Breite (Länge) der Striche in mm oder in(inch) |
<Strichhöhe> |
Höhe (Dicke) der Striche in mm oder in(inch) |
Die spezielle Anweisung hat in der Eingabe für CIB format folgendesAussehen:
{ INCLUDEPICTURE "BARCODE:OMR:ES3;E,S,2;verticalleft;10mm;0.5mm;0.16in" }
Offene OMR Strichcodegrafik
Da jede Kuvertiermaschine ihre speziellen Strichfolgen für die einzelnen Funktionen hat, kann man hier direkt die Daten eingeben.
Anweisung |
Bedeutung |
BARCODE: |
Kennzeichnung, dass ein Barcode oder Strichcode erzeugt werden soll BARCODE:<Typ>;<Daten>;<Orientierung>; |
<Typ>[;] |
OMR |
<Daten>[;] |
0 - Lücke 1 - Strich |
<Orientierung>[;] |
horizontalleft – den Strichcode von links nach rechts ausgeben horizontalright – den Strichcode von rechts nach links ausgeben verticaltopverticalleft - den Strichcode von oben nach unten ausgegeben verticalbottomverticalright – den Strichcode von unten nach oben ausgegeben (default = verticaltop) |
<Strichbreite>[;] |
Breite (Länge) der Striche in mm oder in(inch) |
<Strichhöhe>[;] |
Höhe (Dicke) der Striche in mm oder in(inch) |
<Lückenhöhe>[;] |
Höhe (Dicke) der Lücken in mm oder in(inch) Die Lückenhöhe beinhaltet auch den Strich. |
Beispiel in einem vertikalen Barcode:
Die spezielle Anweisung hat in der Eingabe für CIB format folgendes Aussehen:
{ INCLUDEPICTURE "BARCODE:OMR;101011;verticalleft;10mm;0.5mm;0.16in;" }
Dynamisches Generieren eines DataMatrix ECC 2D Barcodes
Die in den Kapiteln „Dynamisches Generieren der Barcodegrafik in einem Platzhalter im Dokument“ bis „Dynamisches Generieren der Barcodegrafik über eine CIB format Callbackfunktion“ beschriebenen Verfahren können auch zum Einfügen von Datamatrix Barcodes genutzt werden. Diese enthalten folgende Information:
Spezielle DataMatrix ECC 2D Barcodes
Anweisung |
Bedeutung |
BARCODE: |
Kennzeichnung, dass ein Bar- oder Strichcode erzeugt werden soll BARCODE:<Typ>;<Daten>;...... |
<Typ>[;] |
Typbezeichnung "DataMatrix" angeben |
<Subtyp>[;] |
Subtypbezeichnung: "ECCn" (n=1-200), default: ECC200 |
<Wert>[;] |
Der individuelle Wert, den der Barcode darstellen soll |
<Orientierung>[;] |
horizontalleft – den Symbolcode von links nach rechts ausgeben horizontalright – den Symbolcode von rechts nach links ausgeben verticaltopverticalleft - den Symbolcode von oben nach unten ausgegeben verticalbottomverticalright – den Symbolcode von unten nach oben ausgegeben Default: horizontalleft |
<Breite>[;] |
Gewünschte Breite in der sich der Wert abbilden soll (in mm). Die Berechnung der Symbolgröße erfolgt dann automatisch. |
<Höhe>[;] |
Gewünschte Höhe in der sich der Wert abbilden soll (in mm), Die Berechnung der Symbolgröße erfolgt dann automatisch. |
<Matrixgröße>[;] |
Es kann die Anzahl der Zeilen und Spalten vorgeben werden: Gültige Werte sind "s" für "Square" (=quadratisches Symbol) oder "r" für "Rectangle" ( = rechteckiges Symbol). Noch nicht implementiert! Gültige Werte sind bei Quadraten: 10x10,12x12,14x14, 16x16, 18x18, 20x20,22x22,24x24, 26x26, 32x32, 36x36, 40x40,44x44,48x48, 52x52, 64x64, 72x72, 80x80,88x88,96x96, 104x104, 120x120, 132x132, 144x144, bei Rechtecken: 8x18, 8x32, 12x26, 12x36, 16x36, 16x48 |
<Codepage>[;] |
Codepage die benutzt wird, um den übergebenen Wert intern zu übersetzen (default: ansi). Gültige Werte: ansi |
<Prüfziffer>[;] |
Die Prüfziffer gibt es bei diesem BarcodeType nicht. Es ist nur ein leerer Platzhalter erforderlich. |
<Komprimierung>[;] |
Bei der Komprimierung von Datamatrix Barcodes wird der Datentyp ASCII Methode unterstützt. Es ist nur ein leerer Platzhalter erforderlich. Komprimierungsmethode benutzt eine ASCII-Komprimierung oder eine C40-Komprimierung für den Datamatrix Barcode.
Gültige Werte: auto – benutzt alle Komprimierungen um den kleinstmöglichen Barcode zu bekommen(default) yes – ASCII-Komprimierung wird immer verwendet no – kein ASCII-Komprimierung wird verwendet |
<Barcodeform> (ab CIB format 5.3.236) |
Die Barcodeform wird nicht mehr ausgewertet. Es ist nur ein leerer Platzhalter erforderlich. Die erzeugten Barcodes können quadratische oder rechteckige Form haben. Gültiger Wert: only-square Eine quadratische Form wird fest vorgegeben . |
{ INCLUDEPICTURE "BARCODE:DataMatrix;ECC200;ABC123456789Z;horizontalleft;28mm;28mm;22x22;ansi;;;" }
Komprimierungsmethode des Datamatrix Barcodes
Bei der Komprimierung von Datamatrix Barcodes wird der Datentyp ASCII Methode unterstützt. Die ASCII-Komprimierung wird benutzt um Daten, welche hauptsächlich ASCII-Zeichen(0-127) beinhalten, zu komprimieren. Es werden ein alphanumerische Zeichen oder zwei numerische Zeichen pro Byte kodiert.
Größendarstellung von Data Matrix Code ECC 200
Untere Aufstellung gibt Auskunft, wie viele Daten in einen Data Matrix Code passen:
Quadratische Symbole
Darstellbare Daten |
||||
Symbolanzahl |
Alpha-numeri-sche Ziffern |
Alpha-numeri-sche Zeichen |
Byte |
Maximal korrigier-bare Fehler |
10x10 |
6 |
3 |
1 |
2 |
12x12 |
10 |
6 |
3 |
3 |
14x14 |
16 |
10 |
6 |
5 |
16x16 |
24 |
16 |
10 |
6 |
18x18 |
36 |
25 |
16 |
7 |
20x20 |
44 |
31 |
20 |
9 |
22x22 |
60 |
43 |
28 |
10 |
24x24 |
72 |
52 |
34 |
12 |
26x26 |
88 |
64 |
42 |
14 |
32x32 |
124 |
91 |
60 |
18 |
36x36 |
172 |
127 |
84 |
21 |
40x40 |
228 |
169 |
112 |
24 |
44x44 |
288 |
214 |
142 |
28 |
48x48 |
348 |
259 |
172 |
34 |
52x52 |
408 |
304 |
202 |
42 |
64x64 |
560 |
418 |
278 |
56 |
72x72 |
736 |
550 |
366 |
72 |
80x80 |
912 |
682 |
454 |
96 |
88x88 |
1152 |
862 |
574 |
112 |
96x96 |
1392 |
1042 |
694 |
136 |
104x104 |
1632 |
1222 |
814 |
168 |
120x120 |
2100 |
1573 |
1048 |
204 |
132x132 |
2608 |
1954 |
1302 |
248 |
144x144 |
3116 |
2335 |
1556 |
310 |
Rechteckige Symbole
Darstellbare Daten |
|||||
Symbolanzahl |
Ziffern |
Zeichen |
Byte |
Maximal korrigierbare Fehler |
|
8x18 |
10 |
6 |
3 |
7 |
|
8x32 |
20 |
13 |
8 |
11 |
|
12x24 |
32 |
22 |
14 |
32 |
|
12x36 |
44 |
31 |
20 |
44 |
|
16x36 |
64 |
46 |
30 |
64 |
|
16x48 |
98 |
72 |
47 |
98 |
Regeln für DataMatrix ECC 2D Barcodes
Folgende Regeln werden in unten genannter Reihenfolge auf die Aufrufparameter eines Datamatrix-Barcodes angewendet (Auszug aus dem Programmcode):
1) no MM size (no width and no height), no matrix size (no NxN)
a) matrix - first smallest suitable matrix size
b) cell size - 1x1 mm
2) no MM size, largest matrix size
a) matrix - largest matrix size
b) cell size - 1x1 mm
3) no MM size, too small matrix size
a) matrix - first smallest suitable matrix size
b) cell size - 1x1 mm
4) no MM size, wrong matrix size
a) matrix - first smallest suitable matrix size
b) cell size - 1x1 mm
5) MM size (width is set, no height), matrix size (all cases 1-4)
a) matrix - according to case 1-4
b) cell size = [width / matrix.cx, width / matrix.cx] (mode which allow to scale the whole barcode by x-axis)
6) MM size (no width, height is set), matrix size (all cases 1-4)
a) matrix - according to case 1-4
b) cell size = [height / matrix.cy, height / matrix.cy] (mode which allow to scale the whole barcode by y-axis)
7) MM size (width is set, height is set), matrix size (all cases 1-4)
a) width / matrix.cx == height / matrix.cy (i.e. correct proportion was set)
b) matrix - according to case 1-4
c) cell size = [width / matrix.cx, height / matrix.cy]
d) width / matrix.cx != height / matrix.cy (i.e. incorrect proportion was set)
e) matrix - according to case 1-4
f) cell size = [width / matrix.cx, width / matrix.cx]
Dynamisches Generieren eines QR-Barcodes
Die in den Kapiteln „Dynamisches Generieren der Barcodegrafik in einem Platzhalter im Dokument“ bis „Dynamisches Generieren der Barcodegrafik über eine CIB format Callbackfunktion“ beschriebenen Verfahren können auch zum Einfügen von QR-Barcodes genutzt werden. Diese enthalten folgende Information:
QR-Barcode
(ab CIB format
Version 5.3.237, bzw. 6.0.14)
Anweisung |
Bedeutung |
BARCODE: |
Kennzeichnung, dass ein Bar- oder Strichcode erzeugt werden soll. Syntax: BARCODE:<Typ>“;" <Wert> ";" <Orientierung> ";" <Breite> ";" <Höhe> ";" <Matrixgröße> ";" <Codepage> “;” <Prüfziffer/Korrekturlevel> “;” <Komprimierung> |
<Typ>[;] |
Typbezeichnung "QR" angeben |
<Wert>[;] |
Der individuelle Wert, den der Barcode darstellen soll |
<Orientierung>[;] |
horizontalleft – den Symbolcode von links nach rechts ausgeben horizontalright – den Symbolcode von rechts nach links ausgeben verticaltopverticalleft - den Symbolcode von oben nach unten ausgegeben verticalbottomverticalright – den Symbolcode von unten nach oben ausgegeben Default: horizontalleft |
<Breite>[;] |
Gewünschte Breite in der sich der Wert abbilden soll (in mm). |
<Höhe>[;] |
Gewünschte Höhe in der sich der Wert abbilden soll (in mm). |
<Matrixgröße>[;] |
Keine Eingabe. |
<Codepage>[;] |
Codepage die benutzt wird, um den übergebenen Wert intern zu übersetzen (default: ansi). Gültige Werte: ansi |
<Prüfziffer/Korrekturlevel>[;] |
Die Prüfziffer gibt es bei 2D-Barcodes nicht. Hier kann aber das Korrekturlevel (ECL) angegeben werden. Das Level geht von 0 (gering Korrektur) bis 3 (maximale Korrektur = default). Level Parameter Korrektur-Möglichkeit L ECL0 7% zerstörte Information M ECL1 15% zerstörte Information Q ECL2 25% zerstörte Information H ECL3 30% zerstörte Information
Mögliche Eingaben: nochecksum|ECL0|ECL1|ECL2|ECL3 |
<Komprimierung> |
Bei QR-Barcodes gibt es keine Komprimierung. |
Beispiel für einen QR-Barcode:
{ INCLUDEPICTURE "BARCODE:QR;Test QR-Code;horizontalleft;20;20;;ansi;ECL1;" }
Dynamisches Generieren eines PDF417-Barcodes
Die in den Kapiteln „Dynamisches Generieren der Barcodegrafik in einem Platzhalter im Dokument“ bis „Dynamisches Generieren der Barcodegrafik über eine CIB format Callbackfunktion“ beschriebenen Verfahren können auch zum Einfügen von PDF417-Barcodes genutzt werden. Diese enthalten folgende Information:
PDF417-Barcode
(ab CIB format
Version 5.3.225, bzw. 6.0.6)
Anweisung |
Bedeutung |
BARCODE: |
Kennzeichnung, dass ein Bar- oder Strichcode erzeugt werden soll. Syntax: BARCODE:<Typ>“;”<Subtyp> ";" <Wert> ";" <Orientierung> ";" <Breite> ";" <Höhe> ";" <Matrixgröße> ";" <Codepage> “;” <Prüfziffer/Korrekturlevel> “;” <Komprimierung> |
<Typ>[;] |
Typbezeichnung "PDF417" angeben |
<Subtyp>[;] |
Leer, wird derzeit nicht unterstützt. Es ist nur ein leerer Platzhalter erforderlich. |
<Wert>[;] |
Der individuelle Wert, den der Barcode darstellen soll |
<Orientierung>[;] |
horizontalleft – den Symbolcode von links nach rechts ausgeben horizontalright – den Symbolcode von rechts nach links ausgeben verticaltopverticalleft - den Symbolcode von oben nach unten ausgegeben verticalbottomverticalright – den Symbolcode von unten nach oben ausgegeben Default: horizontalleft |
<Breite>[;] |
Gewünschte Breite in der sich der Wert abbilden soll (in mm). |
<Höhe>[;] |
Gewünschte Höhe in der sich der Wert abbilden soll (in mm). Wenn die Angaben von Höhe und/oder Breite fehlen, wird die Größe des Barcodes aus der Matrixgröße und einer Standard-Balkengröße von 1mm x 1mm berechnet. |
<Matrixgröße>[;] |
Dimension der Matrix für den PDF417-Barcode.
<Faktor> gibt das Verhältnis Zeilen zu Spalten in der Form <#.#> an. Aus Breite, Höhe und Matrixgröße wird automatisch die Balkengröße berechnet. Diese Angabe ist nicht zwingend erforderlich. Bei Fehlen wird als Default ein Faktor von 0.5 angenommen. |
<Codepage>[;] |
Codepage die benutzt wird, um den übergebenen Wert intern zu übersetzen (default: ansi). Gültige Werte: ansi |
<Prüfziffer/Korrekturlevel>[;] |
Die Prüfziffer gibt es bei 2D-Barcodes nicht. Hier kann aber das Korrekturlevel (ECL) angegeben werden. Das Level geht von 0 (keine Korrektur = default) bis 8 (sehr große Korrekturmöglichkeiten).
Mögliche Eingaben: nochecksum|ECL0|ECL1|ECL2|ECL3|ECL4|ECL5|ECL6|ECL7|ECL8 |
<Komprimierung> |
Bei PDF417-Barcodes gibt es keine Komprimierung. |
Beispiel für einen PDF417-Barcode:
{ INCLUDEPICTURE "BARCODE:PDF417;;ABC123456789Z;horizontalleft;20;40;;;ECL2" }
6.4. CIB format/output
Das CIB format/output Modul setzt die bisher beschriebenen Verfahren intern zu einem dynamischen Grafik- bzw. einzelnen Linienobjekten um und gibt diese entsprechend der Vorgaben aus.
Darüber hinaus werden alternative Verfahren wie die Verwendung von Barcodefonts zur Formatierung spezieller Zeichenketten oder vom Anwender im Dokument eingebundene selbsterzeugte Barcodegrafiken unterstützt.
Die Glyphen eines mit einem Barcodefont formatierten Textes werden wie andere Buchstaben und Symbole ausgegeben.
Dynamische und statische Barcodegrafiken werden wie normale Grafiken ausgegeben.
7. Schneller Einstieg
Dieses Kapitel zeigt Ihnen in einem Kurzüberblick eine mögliche Nutzung des dynamischen Barcodes mit CIB format/output in einer Kundenapplikation.
Hinweis:
Mit CIB output ist es möglich eine MultiRTF Eingabedatei in verschiedene Ausgabeformate überzuführen. Eine MultiRTF Datei ist EINE physikalische Datei, die intern aber mehrere RTF-Dokumente beinhaltet.
Sie kann z.B. über CIB merge unter Verwendung des –o+ Parameters über mehrere Mischläufe aneinandergehängt werden.
Herkömmliche RTF-Verarbeitungsprogramme (z.B. MS-Office) können MultiRTFs i.d.R. zwar einlesen, zeigen aber dann nur den Inhalt der allerersten RTF Datei.
CIB view/output sind in der Lage den kompletten Inhalt auszugeben.
Bei einer MultiRTF-Umsetzung in andere Zielformate kann man unterscheiden ob die Ausgabe in lauter einzelne Zieldateien erfolgen soll, oder ob eine Zieldatei den gesamten Inhalt wiedergeben soll.
Ein C- Beispiel mit MultiRTF und dynamischen Barcodes
Nachfolgendes Beispiel konvertiert eine MultiRTF Datei nach PDF und setzt auf jede Dokumentseite einen Barcode eigenen Inhalts.
#include "cibprt.h" BOOL DoMultiRTFToPdfWithBarcode()
{
BOOL t_fSingleOutput = TRUE; /*Es soll nur eine Zieldatei entstehen*/
CibPrSetProperty(COMOD_PROP_MULTIRTF_SINGLEOUTPUT, &t_fSingleOutput, sizeof(BOOL));
BOOL t_MultirtfPropertiesSupported = FALSE; /*Abwärtskompatibilität*/
BOOL t_MultiRtfPending = FALSE; /*default ist kein MultiRTF*/
/*Eingabedatei setzen "InputFilename"*/
CibPrSetProperty(COMOD_PROP_INPUT_FILENAME, "MultiTest.rtf");
/*Ausgabedatei setzen "OutputFilename"*/
CibPrSetProperty(COMOD_PROP_OUTPUT_FILENAME, "BarcodeAusgabe.pdf");
/*Ausgabeformat setzen "OutputFormat" "FormatPdf"*/
CibPrSetProperty(COMOD_PROP_OUTPUT_FORMAT, COMOD_OPT_FORMAT_PDF);
do {
if(!CibPrLoad())
{
/*Fehlerbehandlung einbauen*/
return FALSE;
}
char* t_PageCount[15]; /*StringProperty*/
memset(t_PageCount,0,15); /*initialisieren*/
/*Anzahl Seiten des aktiven Einzeldokumentes abholen "PageCount"*/
CibPrGetProperty(COMOD_PROP_PAGECOUNT,&t_PageCount,14);
/*abhängig von der Seitenzahl jetzt einen beliebigen String*/
long t_nPageCount = atol(t_PageCount,10); /*mit mehreren Bacrodeinfo's zusammenbauen*/
char t_MultiBarcodeString[4096];
memset(t_MultiBarcodeString,0,4096);
for(int i=0; i < t_nPageCount; i++)
{
char t_PageBarcode;
/*hier kann jetzt dynamisch abhängig von der Seitenangabe etc.*/
/*eine Barcodevorgabe generiert werden*/
strcpy(t_PageBarcode,"POS:x;y;<PageNr>;BARCODE:Code39;1234567890; horizontalleft;0.5mm;7.5mm;nochecksum");
if(i > 0)
strcat(t_MultiBarcodeString,";"); /*Trenner dazwischen*/
strcat(t_MultiBarcodeString,t_PageBarcode);
}
/*Barcodeinfo für dieses Dokument absetzen "BarcodeFilename"*/
CibPrSetProperty(COMOD_PROP_BARCODE_FILENAME,&t_MultiBarcodeString);
if(!CibPrSave())
{
/*Fehlerbehandlung einbauen*/
return FALSE;
}
/* ACHTUNG: Ältere CIB Dlls können das nicht*/
t_MultirtfPropertiesSupported = CibPrGetProperty(COMOD_PROP_MULTIRTF_PENDING, &t_MultiRtfPending, sizeof(BOOL));
}
while (t_MultirtfPropertiesSupported && t_MultiRtfPending);
/* Anzahl der enthaltenen Dokumente ausgeben*/
long t_MultiRtfIndex = 0;
CibPrGetProperty(COMOD_PROP_MULTIRTF_INDEX, &t_MultiRtfIndex, sizeof(long));
if (t_MultirtfPropertiesSupported && (t_MultiRtfIndex > 1))
printf("%ld Dokumente.\n", t_MultiRtfIndex);
}/* DoMultiRTFToPdfWithBarcode*/
8. Übersicht Barcodetypen
Barcode-Bezeichnung |
Abbildung |
Klartext Zeichenfolge |
Beschreibung, gültige Zeichen |
Font verfügbar ? |
Anzahl Nutzzeichen |
Code 39 Code39 extended |
|
3084456AB |
von 0-9, Großbuchstaben A-Z (o. Umlaute) und -.$/+% Code 39 extended insgesamt 128 Zeichen aus ASCII |
Code-39-25 |
empfohlen sind bis zu 20 Zeichen |
EAN 13 |
|
308445623891 / 3*piffgz#xc,.ym* |
Ziffern 0-9 |
Code EAN |
fest 12 Zeichen bei EAN 8: 7 Zeichen |
EAN Addon |
|
56987456982536 2 bzw. 5-stelliger Zusatzcode |
wie EAN 13 Addon auch bei EAN 8 möglich |
Code EAN |
fest vorgeschrieben 2 bzw. 5 stellig |
Code 2/5 Interleaved |
|
308445623891 0308445623891 / <gl,8{Yu> |
Ziffern 0-9 immer Ziffernpaare |
Code-25-25-Int |
beliebig jedoch gerade Anzahl |
Code 2/5 Industrie |
<56238914> 5623891
|
5623891 /<56238914> |
Ziffern 0-9 |
Code-25-Ind |
beliebig |
Code 2/5 Matrix |
|
12345 |
Ziffern 0-9 mit breiten Balken als Start- und Stoppzeichen |
|
beliebig |
Code 128 |
|
30844AbCd / Ä>tÖ4AbCdIÈ |
voller ASCII-Zeichensatz: Ziffern 0-9, A-Z, a-z (o. Umlaute) !#$%&'()*+,-./:;><=?@[]\^_{}|~ |
Code-128 |
beliebig |
OMR Strichcodes |
|
10101110 |
Ziffern 0-1 |
|
beliebig |
DataMatrix |
|
|
Kompletter ASCII-Zeichensatz |
|
beliebig |
Die Unterstützung der folgenden Barcodetypen ist für den CIB format in Planung:
Barcode-Bezeichnung |
Abbildung |
Klartext Zeichenfolge |
Beschreibung, gültige Zeichen |
Font verfügbar ? |
Anzahl Nutzzeichen |
PDF417 |
|
|
|
|
beliebig |
Code 93 |
|
|
0123456789[Space]ABCDEFGHIJKLMNOPQRSTUVWXYZ-.$/+% |
|
beliebig |
Code 93 Extended |
|
|
über den Code 93 hinaus auch: !#&‘()*,:;<=>?@[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ |
|
beliebig |
9. Fehlerbehandlung
CIB format/barcode liefert beim Ausführen von Funktionen einen Rückgabewert FALSE(=0) wenn ein Fehler aufgetreten ist.
Die Barcodevorgaben selbst führen zu keinem Fehlerausgang, sondern erzeugen ggf. ein Kreuz aus zwei 45Grad Linien im Falle einer nicht möglichen Umsetzung. Details können dann über einen Trace ausgewertet werden.
10. Trace
Für unklare Fehlersituationen haben Sie mehrere Möglichkeiten eine zusätzliche Protokolldatei zu erzeugen:
- Sie setzen die Umgebungsvariable CIB_PRTRACE auf einen Dateinamen und führen den Vorgang aus
- Sie setzen die Property Tracefilename und vollziehen den Vorgang