Barcodes mittels ZINT erstellen, Export mittels SVG sowie Erweiterung durch Powershell


Mittel Zint lassen sich ganz einfach 1D und 2D Barcodes erstellen. Man unter Windows mittels einer GUI die Barcodes definieren aber auch mittels Kommandozeile. Die aktuelle Version findet man hier: https://sourceforge.net/projects/zint/files/zint/. Für folgende Zeilen verwenden wir die aktuell verfügbare Version 2.9.1 für Windows, https://sourceforge.net/projects/zint/files/zint/2.9.1/zint-2.9.1-win32.zip/download. Im Ordner zint-2.9.1 der ZIP-Datei findet man qtZint.exe das Programm für die GUI und zint.exe das Programm für die Kommandozeile.

Das tolle an Zint ist, dass alle möglichen Barcodes erzeugt und diese in viele unterschiedlichen Formaten exportiert werden können. Uns interessiert besonders der SVG Export. Denn mittels SVG kann man die erzeugten Barcodes optimal auf verschiedenen Geräten weiterverwenden.

Hier ein Beispiel wie ein einfacher DataMatrix Barcode erzeugt wird:

.\zint.exe -o test.svg –barcode=71 -d "Ein einfacher Test-Barcode im DataMatrix-Format"

Die exportierte SVG-Datei ist eine reine Textdatei im SVG-Format. Da mittlerweile alle Browser SVG-Dateien interpretieren können kann man mittels

start test.svg

den Barcode direkt am Bildschirm anschauen.

Ein Problem hierbei wird schnell offensichtlich, denn der Barcode wird oben links in der Ecke platziert und ist so mittels Barcodescanner nicht lesbar, denn es braucht die Ruhezone (Quiet Zone) um den DataMatrix-Barcode um diesen erkennen zu können.

Da SVG auf XML basiert können SVG-Dateien sehr einfach mittels Powershell weiterverarbeitet bzw. erweitert werden. Wir verwenden nun Powershell um die SVG-Datei zu laden und die bestehende Grafik zu erweitern.

$svg=[xml](Get-Content .\test.svg)
$defs=$svg.CreateElement("defs", $svg.DocumentElement.NamespaceURI)
$root=$svg.DocumentElement
$g=$svg.svg.g
$root.InsertBefore($defs, $g)|Out-Null
$defs.AppendChild($svg.svg.g)|Out-Null
$use=$svg.CreateElement("use", $svg.DocumentElement.NamespaceURI)
$att=$svg.CreateAttribute(‚href‘)
$att.Value=’#barcode‘
$use.Attributes.Append($att)|Out-Null
$root.InsertAfter($use, $defs)|Out-Null
$att=$svg.CreateAttribute(‚x‘)
$att.Value=’20‘
$use.Attributes.Append($att)|Out-Null
$att=$svg.CreateAttribute(‚y‘)
$att.Value=’20‘
$use.Attributes.Append($att)|Out-Null
$svg.svg[1].Attributes[‚width‘].Value=200
$svg.svg[1].Attributes[‚height‘].Value=200
$svg.Save($ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(".\testneu.svg"))
start testneu.svg

Kurze Erklärung. Die SVG-Grafik des Barcodes findet sich zwischen den Elementen <g> und </g>. Diese wird in ein neu hinzugefügtes Element <defs> verschoben. Da nun der Barcode nur zu Verwendung deklariert wurde, wird das Element <use> hinzugefügt und dort der Barcode mit einer Positionsangabe ausgegeben. Damit der komplette Barcode ersichtlich ist, wird die Breite und Höhe des SVG Viewports noch erweitert.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s


%d Bloggern gefällt das: