Der BARCODE Generator

Das Programm BARCODE ermöglicht es Ihnen, die Druckerzeugnisse Ihrer bestehenden Linux *- bzw. UNIX *-Anwendung um Barcodes zu ergänzen.

Typische Anwendungsbereiche finden sich beim Druck von Formularen und Listen der gesamten Logistikkette eines Unternehmens von der Beschaffung bis zur Entsorgung. Auch im Finanzwesen eignet sich BARCODE hervorragend zur Bedruckung der zukünftigen Einzahlungsscheine ("Einheitsbeleg"), die derzeit im Rahmen der Harmonisierung des Zahlungsverkehr in der Schweiz auf Basis der ISO 20022 standardisiert und zukünftig mit QR-Codes versehen werden.

Beispiele der möglichen Barcode-Typen können Sie hier als PDF-Datei herunterladen.

Die Funktion dieses 1D- und 2D-Barcode-Generators ist denkbar einfach: Es fungiert als eine Art Druckerfilter und untersucht die von Ihrer Anwendung stammenden Druckdaten auf das Vorhandensein einer speziellen Sequenz, die Sie zuvor innerhalb Ihrer Anwendung an geeigneter Stelle in den zu druckenden Report eingefügt haben. Solange diese Sequenz nicht in dem zu druckenden Datenstrom auftritt, werden die Daten unverändert an den Drucker durchgereicht. Tritt nun aber diese Befehlssequenz auf, so wird ein entsprechender Barcode in Form entsprechender PCL 5*- (bzw. Epson* ESC/P-) Kommandos in den Datenstrom eingefügt.

Als Drucker kommen hierbei sämtliche Modelle in Frage, die PCL 5* verstehen. Dies sind heutzutage die meisten Laser- und viele Tintenstrahldrucker auf dem Markt. Falls ein 9- oder 24-Nadeldrucker  zum Einsatz kommen soll, wird für die 1D-Barcode-Typen der sehr verbreitete Epson*-Modus (ESC/P 2, ESC/P oder 9-Pin ESCP/P) unterstützt.

Unter UNIX* (bzw. Linux*) genügt es also, den ursprünglichen Druckbefehl gegen eine Befehlsfolge der Art

cat $1 | barcode [-# <registration id>] | lpr -o raw

zu ersetzen. Ohne Angabe des Parameters -#  werden die zu druckenden Daten in zufälliger Folge durchmischt (Demo-Modus).

Der cat-Befehl reicht die Druckdatei, deren Name als Script-Parameter $1 erwartet wird, über den Pipe-Befehl ('|') an das Programm barcode weiter. Dieses interpretiert die Daten in der oben beschriebenen Art und Weise und gibt sie wiederum mittels des Pipe-Befehls|an den eigentlichen Druckbefehl lpr weiter.

Sobald diese Vorbereitungen getroffen sind, können die zu druckenden Daten in Ihrer Anwendung an beliebiger Stelle durch Barcodes ergänzt werden werden. Dazu wird einfach in das zu druckende Dokument (z.B. in einen Lieferschein, eine Rechnung oder einen Report) eine Barcode-Sequenz eingefügt:

!R! BARCODE <mode>,"<text>","<data>",<x>,<y>,<width>,<height>,<rotation>,<options>;EXIT;

Die Platzhalter in den spitzen Klammern <....> haben die folgende Bedeutung:

<mode> steht für den Barcode-Typ, mögliche Werte z.Zt.:

1D  Codes:

  • 0 für "Interleaved 2 of 5 ",
  • 1 für "Code 39", "Code 39 extended"
  • 2 für "Code 128" bzw. "GS1-128" (EAN 128)
  • 3 für "Codabar",
  • 4 für "MSI"
  • 5 für "GTIN-13" bzw. "EAN-13"
  • 6 für "GTIN-12" bzw. "UPC-A"

2D Codes (nur im PCL5-Modus):

  • 128 für "QR Code"
  • 129 für "Datamatrix"

"<text>" steht für den Klartext, der über bzw. unter den Barcode gedruckt werden soll.

 Diese Funktion steht nur bei der Ausgabe auf Laserdruckern zur Verfügung.  Es wird ein in der Zeichendichte (CPI) an die jeweilige Barcode- breite angepaßter Zeichensatz "ISO 8859-1 Latin 1 / ECMA1" der Schriftart "Courier" verwendet. Gegebenenfalls muß die Höhe der Zeichen durch beidseitiges Hinzufügen von Leerzeichen reduziert werden.
Achtung: Aus programmtechnischen Gründen muß zumindest ein Leerzeichen als Text angegeben werden, da andernfalls das Barcode-Kommando nicht als solches erkannt wird!

"<data>" steht für die als Barcode zu druckende Ziffernfolge. Sie wird ggf. vorne mit einer "0" aufgefüllt, denn "interleaved 2of5"-Barcodes können incl. einer evtl. Prüfsumme immer nur eine gerade Anzahl Ziffern darstellen !

<x> steht für den horizontalen Abstand (in mm) des Barcodes:
- relativ zur aktuellen Druckposition (bei Laserdruckern). Negative Werte sind hier möglich!
 - vom linken Seitenrand (bei Nadeldruckern)

<y> steht für den vertikalen Abstand (in mm) des Barcodes relativ zur aktuellen Druckposition. Negative Werte bewirken eine Verschiebung nach oben (nur Laserdrucker) , positive nach unten.

<width> steht für die Breite des gesamten Barcodes (in mm, in Scan-Richtung gesehen). Aufgrund technologischer Einschränkungen kann es insbesondere bei Nadeldruckern zu größeren Abweichungen von dem hier angegebenen Wert kommen.

<height> steht für die Höhe der Balken (in mm, senkrecht zur Scan-Richtung) (nur für 1D-Codes).

<rotation>  hier steht eine 0 für eine waagerechte Darstellung und 1 für eine um 90 Grad gegen den Uhrzeigersinn gedrehte Darstellung. Die Drehung um 90 Grad wird allerdings nur bei der Ausgabe auf Laserdrucker unterstützt.

<options>  setzt sich durch die einfache Addition der benötigten Parameterwerte zuammen:

Druckersprache:
       0 = (Default) PCL5 kompatibler Drucker (z.B. HP Laserjet)
+1024 = ESC/P, ESC/P 2, 9-Pin ESC/P kompatibler Drucker (z.B. Epson)

1D Barcode-Typen:

  0 = (Default) Es wird keine Checksumme gebildet bzw. gedruckt (nur wenn Checksumme nicht verpflichtend).
+1 = Checksummen-Balken werden gedruckt, basierend auf den Barcode-Daten und dem jeweiligen Algorithmus.
+2 = Lesbarer Text <text> wird nicht über, sondern unter den Barcode gedruckt.
+3 = +1 +2
+4 = Als lesbarer Text werden die Barcode-Daten <data> verwendet (<text> wird ignoriert).
+5 = +1 +4
+6 = +2 +4
+7 = +1 +2 +4

2D Barcode-Typen (nur für QR Code):

  0 = (Default) Fehlerkorrektur Level L
+1 = Fehlerkorrektur Level M
+2 = Fehlerkorrektur Level Q
+3 = Fehlerkorrektur Level H
+8 = Mode 8 bit (verpflichtend !)

 Die Auflösung (DPI) beim Ausdruck auf einem Nadeldrucker wird durch die Addition eines der folgenden Werte zum Wert von <options> festgelegt:

Wert DPI Nadeln Bezeichnung
+0  60  8 Einfache Dichte
+16  120  8 Doppelte Dichte, hohe Geschwindigkeit
+32  120  8 Doppelte Dichte
+48  240  8 Vierfache Dichte
+64  80  8 CRT I
+80  90  8 CRT II
+96  60  24 Einfache Dichte
+112  120  24 Doppelte Dichte
+128  90  24 CRT III
+144  180  24 Dreifache Dichte
+160   360  24 Sechsfache Dichte

 

Beispielsweise erhält man für den Audruck eines Barcodes auf einem Nadeldrucker (+1024) mit Cheksumme (+1) bei einer Auflösung von 360 DPI (+160) für <options> als Summe den Wert 1185.

 

Beispielaufruf in einem Report:

Nach diesem kurzen Demotext wird ein QR-Code gezeichnet. 
!R! BARCODE 128, " ", "Ein 50 mm breiter QR-Code im 8-Bit Mode und Fehlerkorektur M (options=1+8=9)", -40, 20, 50, 0, 0, 9; EXIT;