CIB barcode technischer Leitfaden

Site: CIB eLearning
Course: CIB barcode
Book: CIB barcode technischer Leitfaden
Printed by: Guest user
Date: Friday, 3 May 2024, 4:08 AM

1. Lieferumfang

Komponenten

Softwareumfang

CIB format/output

  • CibPrt32.dll

CIB format/output Modul (RTF, TIFF, PNG, GIF, BMP, WMF, EMF Eingabedateien)

JCoMod

 

Nur für JAVA Anwendungen

  • JCoMod.dll
  • CoModJobs.jar                      

 

JNI Adapter zu CoMod

Java-Klasse für aufrufende Anwendung

CIB runshell

  • cibrsh.exe

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-Zeichen­satz 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

Eingabe
Dynamisches 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>;
<Prüfziffer>[;<Verringerungsmethode>]

<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.
Details siehe Kapitel „Barcode Typen“

<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)
Soll keine Prüfziffer erstellt werden, wird als letzter Parameter 'nochecksum' gesetzt, ansonsten ist hier keine Eingabe notwendig.

[<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" }


Einsteuern des Barcodewertes über Variable

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
OMR-Strichcode (siehe Kapitel OMR Strichcodes“)

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)
Seiten an eine Adresse werden gesammelt (Collect) und bei Adressenwechsel kuvertiert (Envelop).

<Subtyp_S> := “S” | “”  (Seal | NotSeal)
Schließen (Seal) oder nicht schließen (NotSeal) eines Kuverts.

<Subtyp_N> := “1” | “3” | “7” | “”
Kontrollnummerierung, mit der die Kuvertiermaschine die richtige Reihenfolge der Seiten überprüft.

<Subtyp_P> := “P” | “”  (Parity | noParity)
Durch Angabe einer Parität kann die Verarbeitungs-Qualität erhöht werden. Bei gesetzter Parität wird bei ungerader Strichanzahl ein Strich ergänzt.

Beispiel:

OMR:ES3   bedeutet, dass die Kuvertiermaschine folgende Funktionen unterstützt:

Envelop/Collect
Seal/NotSeal
Kontrollnummerierung mit 3 möglichen Nummern (1,2,3)
keine Parität

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.
Die unter <Daten> beschriebenen OMR-Symbole werden auf die Druckseite aufgebracht.
Das Start-Symbol wird immer ausgegeben.

 

[<Envelope/Collect>],[<Seal/NotSeal>],[<Kontrollnummerierung>]

Beispiel:

OMR:ES3;E,,2;   bedeutet die Aufbringung der folgenden Striche:

Start-Symbol
Envelop
NotSeal
Kontrollnummerierung

 

<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>;
<Strichbreite>;<Strichhöhe>;<Lückenhöhe>;

<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 .


Die spezielle Datamatrix Anweisung hat in der Eingabe für CIB format/barcode innerhalb eines Dokumentes folgendes Aussehen:
{ 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

Symbol­anzahl

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

Symbol­anzahl

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.
Default ist daher immer nochecksum.

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.
Es werden die Anzahl der gewünschten Zeilen und Spalten angegeben.


<Zahl> “x” <Zahl> | “x” Zahl> | <Zahl> “x” | “” | <Faktor>

 

<Faktor> gibt das Verhältnis Zeilen zu Spalten in der Form <#.#> an.
So ergibt sich bei einem Faktor von z.B. 0.5 das folgende Verhältnis:
Zeilen = 0.5 x Spalten

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.
Default ist daher immer nochecksum.

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-Bezeich­nung

Abbildung

Klartext Zeichen­folge

Beschrei­bung, gültige Zeichen

Font verfüg­bar ?

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 Inter­leaved


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 Strich­codes

 

10101110

Ziffern 0-1

 

beliebig

Data­Matrix


 

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