Barcodes drucken **************** Die häufigste Ursache für „mein Barcode scannt nicht“ ist nicht die Codierung -- die Striche sind zu klein. Der schmalste Strich (1D) oder ein Modul (2D) -- die *X-Dimension* -- muss breit genug sein, damit die Optik des Scanners ihn auflösen kann. Wenn Merkmale unter diese Schwelle schrumpfen, brechen die Leseraten drastisch ein. Die meisten Symbologie-Spezifikationen überlassen die X-Dimension der Anwendung. Die folgenden Werte sind praktische Empfehlungen für die typische pyStrich-Druckkette: ein handelsüblicher Laserdrucker (300-600 DPI) plus entweder ein günstiger Handscanner oder eine moderne Handykamera. Erhöhen Sie die X-Dimension, wenn eines der beiden Enden dieser Kette schwächer ist -- abgenutzte Farbbänder, verschwommene Kameras, Scans aus der Entfernung -- oder wenn die bedruckte Oberfläche reflektierend oder gewölbt ist. +------------------+------------------------+-----------------------------------+ | Symbologie | X-Dimension | Anmerkungen | |==================|========================|===================================| | Code 39 | 0,19 - 0,50 mm | 0,25 mm ist eine sichere Vorgabe | | | | für die industrielle | | | | Kennzeichnung. | +------------------+------------------------+-----------------------------------+ | Code 128 | 0,19 - 0,50 mm | 0,25 mm wird von den meisten | | | | stationären und Handscannern | | | | zuverlässig gelesen. | +------------------+------------------------+-----------------------------------+ | EAN-13 | 0,26 - 0,66 mm | GS1 gibt ein nominales X von 0,33 | | (Einzelhandel) | | mm an (100 % Vergrößerung); das | | | | Scannen im Einzelhandel erlaubt | | | | typischerweise 80 %-200 % des | | | | Nominalwerts. | +------------------+------------------------+-----------------------------------+ | Data Matrix | 0,25 - 0,50 mm | ~0,3 mm ist die übliche | | | | praktische Untergrenze für | | | | Handheld-Imager. | +------------------+------------------------+-----------------------------------+ | QR-Code | 0,25 - 0,50 mm | Handykameras benötigen | | | | typischerweise >=0,4 mm aus etwa | | | | einer Armlänge Entfernung. | +------------------+------------------------+-----------------------------------+ | PDF417 | 0,25 - 0,50 mm | Die Zeilenhöhe muss >=3x der | | | | X-Dimension betragen (pyStrich- | | | | Vorgabe). | +------------------+------------------------+-----------------------------------+ | Aztec-Code | 0,38 - 0,76 mm | Zuverlässigster Bereich; kleiner | | | | funktioniert mit guten Imagern, | | | | aber Handykamera-Lesungen | | | | verschlechtern sich unterhalb von | | | | ~0,4 mm schnell. | +------------------+------------------------+-----------------------------------+ Zur Druckqualitätsprüfung siehe ISO/IEC 15415 (2D) oder ISO/IEC 15416 (1D); für Anwendungen im Handel und in der Lieferkette folgen Sie den GS1 General Specifications. Tipp: Greifen Sie zu SVG oder EPS, sofern Ihre Werkzeugkette sie unterstützt. Vektorausgabe skaliert verlustfrei, sodass Sie das Symbol beim Layout dimensionieren, statt eine physische Größe beim Codieren festzulegen. Vektorausgabe (SVG / EPS) ========================= Bei SVG und EPS bestimmt pyStrich die Druckgröße überhaupt nicht. Die Ausgabe ist auflösungsunabhängig -- wählen Sie eine beliebige "bar_width" (oder "cellsize") und lassen Sie das verarbeitende Layout- Werkzeug auf die benötigte X-Dimension skalieren: * **SVG**: "width" und "height" in HTML / CSS setzen oder über die "viewBox" in Ihrem Design-Werkzeug. * **EPS**: zur Einbindungszeit skalieren -- "\includegraphics[width=40mm]{...}" in LaTeX oder über die Platzierungsgröße in Illustrator / InDesign. Die EPS-"bar_width" ist in PostScript-Punkten (1 pt = 1/72 Zoll ≈ 0,353 mm), sodass die Vorgabe bereits eine physisch sinnvolle Größe erzeugt, wenn Sie sie beim Einbinden nicht überschreiben. Tipp: Für PDF-Ausgabe betten Sie das SVG in eine HTML-Vorlage ein und rendern mit WeasyPrint. Das ist ein sauberer Weg zu Etikettenbögen mit mehreren Nutzen, Lieferscheinen und ähnlichen druckfertigen Dokumenten. Rasterausgabe (PNG) =================== PNG ist das einzige Ausgabeformat, bei dem "bar_width" / "cellsize" die Druckgröße festlegt, weil Rasterbilder nicht verlustfrei skalieren. Ausgehend von einer Ziel-X-Dimension und der Drucker-DPI: bar_width (px) = X-dimension (mm) * DPI / 25.4 Bei 300 DPI erfordert eine X-Dimension von 0,25 mm "bar_width=3" (aufgerundet von 2,95). Bei 600 DPI erfordert dieselbe X-Dimension "bar_width=6". Immer *aufrunden* auf das nächste ganzzahlige Pixel; Abrunden drückt die X-Dimension unter die lesbare Grenze. Farben ====== Symbole sind standardmäßig schwarz auf weiß. Übergeben Sie "dark_hex" und "light_hex" -- jeweils eine 3-, 6- oder 8-stellige Hex-Farbe -- an eine beliebige Render-Methode, um die Module (oder Striche) und den Hintergrund konsistent über PNG, SVG und EPS hinweg umzufärben. Die Striche und jegliche Klarschrift nehmen "dark_hex" an. Scanner werten die Luminanz gegen einen Schwellwert aus, halten Sie daher "dark_hex" und "light_hex" in der Helligkeit deutlich getrennt; ein kontrastarmes Paar untergräbt die Lesezuverlässigkeit genauso wie eine zu kleine X-Dimension. Das dezente Marineblau auf Hellgrau unten bleibt gut lesbar. from pystrich.qrcode import QRCodeEncoder QRCodeEncoder("https://github.com/mmulqueen/pyStrich").save_svg( "qrcode-navy.svg", dark_hex="#1b3a5c", light_hex="#e8e8e8" ) [Bild: QR-Code mit tiefmarineblauen Modulen auf hellgrauem Hintergrund.][Bild] Ruhezonen ========= Jede Symbologie benötigt Weißraum (die *Ruhezone*) um das Symbol, damit Scanner seine Grenzen finden können. pyStrich gibt automatisch eine Ruhezone aus; schneiden Sie nicht in den weißen Rand hinein, wenn Sie die Ausgabe in ein anderes Bild montieren. +---------------+-------------------------------------------------------+ | Symbologie | Von pyStrich angewendete Ruhezone | |===============|=======================================================| | Code 39 | 10x "bar_width" auf jeder Seite. | +---------------+-------------------------------------------------------+ | Code 128 | 10x "bar_width" auf jeder Seite. | +---------------+-------------------------------------------------------+ | EAN-13 | 11x "bar_width" links, 7x rechts (von GS1 | | | vorgeschrieben). | +---------------+-------------------------------------------------------+ | Data Matrix | Konfigurierbar über "quiet_zone" (Vorgabe 2 Module, | | | Spezifikationsminimum 1 Modul). | +---------------+-------------------------------------------------------+ | QR-Code | 4 Module auf jeder Seite (von der Spezifikation | | | vorgeschrieben). | +---------------+-------------------------------------------------------+ | PDF417 | Konfigurierbar über "quiet_zone" (Vorgabe 2 Module, | | | Spezifikationsminimum 2 Module auf jeder Seite). | +---------------+-------------------------------------------------------+ | Aztec-Code | Konfigurierbar über "quiet_zone" (Vorgabe 2 Module; | | | die Spezifikation verlangt keine Ruhezone). | +---------------+-------------------------------------------------------+ Schadenstoleranz ================ 2D-Barcodes vertragen dank ihrer Reed-Solomon-Fehlerkorrektur ein gewisses Maß an physischen und umweltbedingten Schäden -- Abrieb, Verschmieren, Markierungen, teilweise Verdeckung. Diese Toleranz lässt sich verbessern, indem man die Fehlerkorrekturstufe erhöht, die Druckabmessungen vergrößert und den Barcode von den Rändern des Etiketts oder Dokuments fernhält (die am meisten Verschleiß abbekommen). Geeignete Medien und geeigneter Druck sind unerlässlich. Für raue Umgebungen: Wenn die codierten Daten eine vorhersehbare Länge und einen vorhersehbaren Zeichensatz haben, erhöhen Sie die Fehlerkorrekturstufe so hoch, wie es der verfügbare Etiketten- oder Dokumentenplatz bei einer sinnvollen Modulgröße zulässt. Die Fehlerkorrektur schützt nur den Datenbereich: Die festen Muster des Symbols (Suchmuster, L-Begrenzung oder Bullseye) müssen erkennbar bleiben, damit der Decoder überhaupt darauf einrasten kann. Überprüfung =========== Wenn sich ein gedruckter Barcode nicht zuverlässig scannen lässt: 1. Versuchen Sie zuerst, ihn auf dem Bildschirm zu scannen. Scheitert er auf dem Bildschirm, sind Codierung oder Dimensionierung falsch; gelingt er auf dem Bildschirm, scheitert aber im Druck, liegt das Problem am Druckprozess. 2. Messen Sie die X-Dimension mit einem Lineal oder einer Lupe und prüfen Sie, dass die Ruhezone intakt ist -- nicht beschnitten, nicht auf einen farbigen Hintergrund gedruckt. 3. Prüfen Sie den Druckkontrast -- Thermodrucker mit niedriger DPI oder abgenutzte Farbbänder können Striche erzeugen, die zu grau sind, um gelesen zu werden. Für Produktionseinsätze, die Barcodes in großem Maßstab drucken, ziehen Sie einen Druckqualitätsprüfer in Betracht (ein Instrument, das Symbole gegen ISO/IEC 15415 / 15416 bewertet). Eine einmal bestandene Bewertung während der Integration ist mehr wert als das Neudrucken von tausend fehlgeschlagenen Etiketten.