Code 128

Code 128 ist eine hochdichte 1D-Symbologie, die den gesamten ASCII-Bereich abdeckt. pyStrich schaltet automatisch zwischen den Code-Sets A, B und C um, um die Symbollänge zu minimieren, und berechnet die Mod-103-Prüfsumme für Sie.

Siehe auch

Code 128 auf Wikipedia für Hintergründe zur Symbologie selbst.

Code-128-Barcodes sind in ISO/IEC 15417 definiert (Informationstechnik – Verfahren der automatischen Identifikation und Datenerfassung – Spezifikationen für Strichcode-Symbologien; Code 128).

Beispiel

from pystrich.code128 import Code128Encoder

encoder = Code128Encoder("WDBCA45D2HA327260")
encoder.save_svg("code128-example.svg")
Code-128-Barcode, der "WDBCA45D2HA327260" codiert.

GS1-128

Siehe auch

GS1-128 auf Wikipedia für Hintergründe zur GS1-Variante.

GS1-128 ist Code 128 mit einem FNC1 an der ersten Datenposition, das signalisiert, dass die Nutzdaten eine Folge von GS1 Application Identifiern sind. Code128Data.gs1() baut die Nutzdaten aus typisierten Feld-Wrappern auf und übernimmt die FNC1-Platzierung automatisch – eines am Anfang der Nachricht und eines nach jedem Application Identifier variabler Länge, der nicht das letzte Element ist. Kapseln Sie jedes Paar aus Application Identifier / Wert in GS1Fixed für Application Identifier fester Länge ((01), (17), (11) …) oder andernfalls in GS1Variable. Die GS1 General Specifications empfehlen, dass Application Identifier variabler Länge zuletzt kommen:

from pystrich.code128 import Code128Data, Code128Encoder
from pystrich.gs1 import GS1Fixed, GS1Variable

# (01) GTIN + (17) expiry YYMMDD + (10) batch
payload = Code128Data.gs1(
    GS1Fixed("01", "09501234543213"),
    GS1Fixed("17", "261231"),
    GS1Variable("10", "BF07"),
)
Code128Encoder(payload).save("code128-gs1.png")
GS1-128-Barcode, der (01) GTIN 09501234543213, (17) Verfall 261231, (10) Charge BF07 codiert.

Übergeben Sie für volle Kontrolle über den Codewort-Strom – oder um FNC2-, FNC3- oder Latin-1-Segmente mit den GS1-Markern zu mischen – FNC1 und die einfachen Zeichenketten aus Application Identifier / Wert direkt an Code128Data; das ist der Weg, den gs1() kapselt.

Latin-1-Text

Kapseln Sie für Latin-1-Eingabe die Nutzdaten in Code128Data mit encoding="iso-8859-1" (oder auto_encoding=True). Die Bytes 128-255 geben einen FNC4-Single-Shift im Codewort-Strom aus; Zeichen außerhalb von Latin-1 werden abgelehnt.

from pystrich.code128 import Code128Data, Code128Encoder

Code128Encoder(
    Code128Data("Rausschmeißer", encoding="iso-8859-1")
).save("code128-latin1.png")
Code-128-Barcode, der "Rausschmeißer" über FNC4-Latin-1-Shifts codiert.

Größe, Beschriftung, Schrift und Layout

Das Argument bar_width von save() und get_imagedata() legt die Pixelbreite des schmalsten Strichs fest (Vorgabe 3).

Das an Code128Encoder übergebene options-Dict steuert die Klarschriftzeile und das umgebende Layout. Alle Schlüssel sind optional.

show_label

Ob die Klarschriftzeile unter den Strichen gerendert wird. Vorgabe True; setzen Sie ihn auf False, um sie zu unterdrücken.

ttf_font

Absoluter Pfad zu einer TrueType-Schriftdatei, die für die Beschriftung verwendet wird. Ohne Angabe wird eine mitgelieferte Bitmap-Schrift verwendet.

ttf_fontsize

Schriftgröße in Punkt.

height

Gesamte Bildhöhe in Pixeln. Vorgabe ist etwa ein Drittel der Bildbreite.

label_border

Pixel an vertikalem Abstand zwischen den Strichen und der Beschriftung.

bottom_border

Pixel an vertikalem Abstand zwischen der Beschriftung und der Unterkante.

Siehe auch

Barcodes drucken für Hinweise zur Wahl von bar_width bei gedruckter Ausgabe.

options = {
    "height": 200,
    "label_border": 10,
    "bottom_border": 10,
    "ttf_fontsize": 24,
    # "ttf_font": "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
}
encoder = Code128Encoder("WDBCA45D2HA327260", options=options)
encoder.save("code128-custom.png", bar_width=4)
Code-128-Barcode, der "WDBCA45D2HA327260" mit höherem Bild und größerer Beschriftung codiert.

Ausgabeformate

SVG-Ausgabe

Zum Einbetten in Webseiten oder für jeden Arbeitsablauf, der von auflösungsunabhängiger Ausgabe profitiert, verwenden Sie save_svg() (oder get_svg(), um das SVG als Zeichenkette zu erhalten).

Code128Encoder("WDBCA45D2HA327260").save_svg("code128.svg")
SVG-Code-128-Barcode, der "WDBCA45D2HA327260" codiert.

Die viewBox des SVG ist in Moduleinheiten angegeben (ein Schmalstrich = eine Einheit), während width und height mit bar_width skalieren. Die vom Standard geforderten Ruhezonen von 10 Modulen werden automatisch auf jeder Seite angewendet.

Neu in Version 0.12.

PNG-Ausgabe

Verwenden Sie für die Rasterausgabe save(), um eine PNG-Datei zu schreiben, oder get_imagedata(), um die rohen PNG-Bytes zu erhalten.

Code128Encoder("WDBCA45D2HA327260").save("code128.png")

EPS-Ausgabe

Verwenden Sie zum Einbetten in LaTeX (\includegraphics) oder andere Vektor-Druck-Arbeitsabläufe save_eps() (oder get_eps(), um das EPS als Zeichenkette zu erhalten).

Code128Encoder("WDBCA45D2HA327260").save_eps("code128.eps")

Das Argument bar_width ist die Breite des schmalsten Strichs in PostScript-Punkten (1 Punkt = 1/72 Zoll). Die Ruhezonen von 10 Modulen werden automatisch angewendet.

Neu in Version 0.12.

API

class Code128Encoder(text: str | Code128Data, options: BarcodeRenderOptions | None = None)[Quellcode]

Bases: Bar1DEncoder

Codiert eine Zeichenkette als Code-128-1D-Barcode.

Die Code-Sets A, B und C werden automatisch umgeschaltet, um die Symbollänge zu minimieren. Die Mod-103-Prüfsumme wird berechnet und für Sie angehängt.

Typische Verwendung:

encoder = Code128Encoder("nm0000385")
encoder.save("barcode.png")
Variablen:
  • text – Der ursprüngliche Eingabetext.

  • encoded_text – Liste der vom Text-Encoder erzeugten Codewerte, einschließlich Startcodes und Code-Set-Umschaltungen.

  • checksum – Der Wert der Mod-103-Prüfsumme.

  • bars – Das Strich-/Lücken-Muster als Zeichenkette aus "1" und "0".

  • options – Options-Dict zur Renderzeit (leer, wenn keine angegeben wurden).

  • width – Pixelbreite des zuletzt gerenderten Bildes. 0, bis eine Render-Methode aufgerufen wurde.

  • height – Pixelhöhe des zuletzt gerenderten Bildes.

get_eps(bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) str

Rendert den Barcode und gibt EPS-Markup zurück.

Parameter:
  • bar_width – Breite des schmalsten Strichs in PostScript-Punkten.

  • dark_hex – Strich- und Textfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Schwarz.

  • light_hex – Hintergrundfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA, deckend. Standard ist Weiß.

Rückgabetyp:

str

Neu in Version 0.12.

Geändert in Version 0.16: dark_hex und light_hex hinzugefügt.

get_imagedata(bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) bytes

Rendert den Barcode und gibt PNG-Bytes zurück.

Parameter:
  • bar_width – Breite des schmalsten Strichs in Pixeln.

  • dark_hex – Strich- und Textfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Schwarz.

  • light_hex – Hintergrundfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Weiß.

Rückgabe:

PNG-codierte Bilddaten.

Rückgabetyp:

bytes

Geändert in Version 0.16: dark_hex und light_hex hinzugefügt.

get_pilimage(bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) PILImage

Rendert den Barcode und gibt ein Pillow-Bild zurück.

Parameter:
  • bar_width – Breite des schmalsten Strichs in Pixeln.

  • dark_hex – Strich- und Textfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Schwarz.

  • light_hex – Hintergrundfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Weiß.

Rückgabe:

Der gerenderte Barcode.

Rückgabetyp:

PIL.Image.Image

Neu in Version 0.11.

Geändert in Version 0.16: dark_hex und light_hex hinzugefügt.

get_svg(bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) str

Rendert den Barcode und gibt SVG-Markup zurück.

Parameter:
  • bar_width – Breite des schmalsten Strichs in Benutzereinheiten.

  • dark_hex – Strich- und Textfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Schwarz.

  • light_hex – Hintergrundfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Weiß.

Rückgabetyp:

str

Neu in Version 0.12.

Geändert in Version 0.16: dark_hex und light_hex hinzugefügt.

png_dataurl(bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) str

Rendert den Barcode und gibt einen PNG-data:-URL-String zurück.

Parameter:
  • bar_width – Breite des schmalsten Strichs in Pixeln.

  • dark_hex – Strich- und Textfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Schwarz.

  • light_hex – Hintergrundfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Weiß.

Rückgabetyp:

str

Neu in Version 0.15.

Geändert in Version 0.16: dark_hex und light_hex hinzugefügt.

save(filename: str | os.PathLike[str], bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) None

Rendert den Barcode in eine PNG-Datei.

Parameter:
  • filename – Pfad, in den das PNG geschrieben wird.

  • bar_width – Breite des schmalsten Strichs in Pixeln.

  • dark_hex – Strich- und Textfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Schwarz.

  • light_hex – Hintergrundfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Weiß.

Geändert in Version 0.16: dark_hex und light_hex hinzugefügt.

save_eps(filename: str | os.PathLike[str], bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) None

Speichert den Barcode als EPS-Datei. Übergeben Sie einen .eps-Dateinamen.

Parameter:
  • filename – EPS-Ausgabepfad.

  • bar_width – Breite des schmalsten Strichs in PostScript-Punkten.

  • dark_hex – Strich- und Textfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Schwarz.

  • light_hex – Hintergrundfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA, deckend. Standard ist Weiß.

Neu in Version 0.12.

Geändert in Version 0.16: dark_hex und light_hex hinzugefügt.

save_svg(filename: str | os.PathLike[str], bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) None

Speichert den Barcode als SVG-Datei. Übergeben Sie einen .svg-Dateinamen.

Parameter:
  • filename – SVG-Ausgabepfad.

  • bar_width – Breite des schmalsten Strichs in Benutzereinheiten.

  • dark_hex – Strich- und Textfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Schwarz.

  • light_hex – Hintergrundfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Weiß.

Neu in Version 0.12.

Geändert in Version 0.16: dark_hex und light_hex hinzugefügt.

svg_dataurl(bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) str

Rendert den Barcode und gibt einen SVG-data:-URL-String zurück.

Parameter:
  • bar_width – Breite des schmalsten Strichs in Benutzereinheiten.

  • dark_hex – Strich- und Textfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Schwarz.

  • light_hex – Hintergrundfarbe als 3-, 6- oder 8-stelliger Hex-String oder RGBA. Standard ist Weiß.

Rückgabetyp:

str

Neu in Version 0.15.

Geändert in Version 0.16: dark_hex und light_hex hinzugefügt.

calculate_check_sum() int[Quellcode]

Berechnet die Code-128-Mod-103-Prüfsumme für encoded_text.

Der Startcode geht mit Gewicht 1 ein; nachfolgende Symbole werden vor der Modulo-Bildung mit ihrer 1-basierten Position gewichtet.

init_renderer() Code128Renderer[Quellcode]

Konstruiert einen Code128Renderer für die codierten Striche.

Rückgabetyp:

Code128Renderer

class Code128Data(*segments: str | Code128Marker, encoding: Literal['ascii', 'iso-8859-1'] | None = None, auto_encoding: bool = False)

Bases: EncodableData[Literal[‚ascii‘, ‚iso-8859-1‘], Code128Marker]

Zusammensetzbare Encoder-Eingabe, die Textabschnitte mit FNC-Marker-Tokens mischt.

Bauen Sie Werte durch Verketten von Marker-Konstanten mit einfachen Zeichenketten auf beiden Seiten auf und übergeben Sie das Ergebnis dann anstelle eines str an Code128Encoder:

from pystrich.code128 import Code128Encoder, FNC1
encoder = Code128Encoder(FNC1 + "10ABC" + FNC1 + "21XYZ")

Übergeben Sie encoding="iso-8859-1" (oder auto_encoding=True), um Latin-1-Zusatzzeichen einzubetten; der Encoder gibt automatisch die Code-128-FNC4-Shifts aus. Mit encoding="ascii" werden die veralteten Magic-Byte-Codepunkte (\xf1..\xf4) mit einer Meldung abgelehnt, die auf die typisierten Marker-Konstanten verweist.

classmethod gs1(*fields: GS1Fixed | GS1Variable) Code128Data

Baut GS1-128-Nutzdaten aus typisierten Application-Identifier-Feldern auf.

Gibt ein führendes FNC1 aus (das das Symbol gegenüber konformen Scannern als GS1-128 kennzeichnet), gefolgt von application_identifier + value für jedes Feld, und fügt nach jedem GS1Variable, das nicht das letzte Element ist, einen weiteren FNC1-Trenner ein. ASCII ist fest vorgegeben – GS1-Application-Identifier-Werte sind auf einen 7-Bit-Zeichensatz beschränkt.

Parameter:

fields – Eine oder mehrere GS1Fixed- / GS1Variable-Instanzen. Einfache Zeichenketten werden nicht akzeptiert; kapseln Sie jedes Paar aus Application Identifier / Wert in die passende Feldklasse, damit bekannt ist, ob ihm FNC1 folgen soll.

Löst aus:

pystrich.exceptions.PyStrichInvalidOption – wenn fields leer ist oder etwas anderes als die Feldklassen enthält.

Neu in Version 0.15.

as_plain_text() tuple[str, EncT]

Gibt den verketteten Text und den Codec zum Codieren zurück.

Löst _HasMarkers aus, wenn ein Segment ein Roh-Marker statt einer Zeichenkette ist. Für Unterklassen ohne Marker (MarkerT == Never) ist die Prüfung ein No-op.

class Code128Marker(name: str)

Bases: object

Ein typisierter FNC-Marker zur Aufnahme in einen Code128Data-Wert.

Verwenden Sie die Konstanten auf Modulebene (FNC1, FNC2, FNC3); die Verkettung mit einem einfachen str oder einem anderen Code128Marker (z. B. FNC1 + "10ABC") baut ein Code128Data. FNC4 ist nicht als öffentlicher Marker verfügbar – Latin-1-Eingabe wird stattdessen über encoding="iso-8859-1" bei Code128Data erreicht.

codeword_for_charset(charset: Literal['A', 'B', 'C']) int

Gibt das Codewort für diesen Marker in charset zurück oder löst aus, wenn der Marker dort nicht darstellbar ist.

representable_in(charset: Literal['A', 'B', 'C']) bool

Ob dieser Marker direkt aus charset ausgegeben werden kann.

representable_charsets() tuple[Literal['A', 'B', 'C'], ...]

Zeichensätze, die diesen Marker ausgeben können, Präferenzreihenfolge B → A → C.

pystrich.code128.FNC1
pystrich.code128.FNC2
pystrich.code128.FNC3

FNC-Marker-Konstanten (Instanzen von Code128Marker). Hängen Sie sie mit + an Zeichenketten an, um ein Code128Data aufzubauen; FNC1 an erster Position macht das Symbol zu einem GS1-128 (siehe Code128Data.gs1() für die strukturierte API).