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") [Bild: Code-128-Barcode, der "WDBCA45D2HA327260" codiert.][Bild] 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") [Bild: GS1-128-Barcode, der (01) GTIN 09501234543213, (17) Verfall 261231, (10) Charge BF07 codiert.][Bild] Ü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") [Bild: Code-128-Barcode, der "Rausschmeißer" über FNC4-Latin-1-Shifts codiert.][Bild] 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) [Bild: Code-128-Barcode, der "WDBCA45D2HA327260" mit höherem Bild und größerer Beschriftung codiert.][Bild] 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") [Bild: SVG-Code-128-Barcode, der "WDBCA45D2HA327260" codiert.][Bild] 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) 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 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 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).