Data Matrix *********** Data Matrix (ECC 200) ist eine 2D-Symbologie für kurze Nutzdaten (*payload*), die im größten Symbol (144x144) bis zu 1558 ASCII-Zeichen codieren kann. Siehe auch: Datamatrixcode auf Wikipedia für Hintergründe zur Symbologie selbst. Data-Matrix-Codes sind in ISO/IEC 16022 definiert (Informationstechnik -- Automatische Identifikation und Datenerfassungsverfahren -- Data Matrix-Barcode-Symbologie- Spezifikation). Beispiel ======== Kapseln Sie die Eingabe in "DataMatrixData". Der einfachste Weg ist "auto_encoding=True", das automatisch die schmalste Codierung wählt, die zur Eingabe passt. Für die Kontrolle über die codierte Byte-Folge -- um ""ascii"" für 7-Bit-Nutzdaten zu erzwingen (URLs, Bezeichner, GS1-Application-Identifier-Zeichenketten) oder um Latin-1 / UTF-8 zu verlangen -- übergeben Sie stattdessen ein explizites "encoding"; siehe Nicht-ASCII-Text weiter unten. from pystrich.datamatrix import DataMatrixData, DataMatrixEncoder payload = DataMatrixData("https://github.com/mmulqueen/pyStrich", auto_encoding=True) DataMatrixEncoder(payload).save_svg("datamatrix-example.svg") [Bild: Data-Matrix-Symbol, das die pyStrich-GitHub-URL codiert.][Bild] Größe und Ruhezone ================== Das Argument "cellsize" von "save()" und "get_imagedata()" legt die Kantenlänge eines Moduls in Pixeln fest (Vorgabe "5"). Das Argument "quiet_zone" von "DataMatrixEncoder" legt die Breite (in Modulen) des beim Rendern angewendeten weißen Rands fest. Die Data- Matrix-Spezifikation verlangt mindestens ein Modul Ruhezone auf jeder Seite; pyStrich verwendet standardmäßig "2" (festgelegt in "DATAMATRIX_DEFAULT_QUIET_ZONE"). Reduzieren Sie ihn auf "1" für das kompakteste Symbol; erhöhen Sie ihn, wenn Ihr Druckverfahren dazu neigt, in den Rand zu verlaufen. Siehe auch: Barcodes drucken für Hinweise zur Wahl von "cellsize" bei gedruckter Ausgabe. payload = DataMatrixData("https://github.com/mmulqueen/pyStrich", encoding="ascii") DataMatrixEncoder(payload).save("datamatrix-large.png", cellsize=10) [Bild: Data-Matrix-Symbol, das die pyStrich-GitHub-URL codiert, gerendert mit cellsize=10.][Bild] Symbolform ========== Data-Matrix-Symbole sind standardmäßig quadratisch, können aber auch rechteckig sein -- nützlich, wenn ein Etikettenstreifen breiter als hoch ist. Das Argument "symbol_shape" von "DataMatrixEncoder" wählt zwischen ihnen: ""square"" (die Vorgabe) erzeugt stets ein quadratisches Symbol, ""rectangular"" erzeugt stets eine der sechs rechteckigen Größen (und löst eine Ausnahme aus, wenn die Nutzdaten für die größte davon zu lang sind), und ""auto"" wählt unter den passenden Symbolen dasjenige mit der geringsten Fläche. payload = DataMatrixData("A1268172415", encoding="ascii") DataMatrixEncoder(payload, symbol_shape="rectangular").save_svg("datamatrix-rectangular.svg") [Bild: Rechteckiges Data-Matrix-Symbol, das die Teilenummer A1268172415 codiert.][Bild] Neu in Version 0.17. 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). from pystrich.marks import MarkShape payload = DataMatrixData("https://github.com/mmulqueen/pyStrich", encoding="ascii") DataMatrixEncoder(payload).save_svg("datamatrix.svg") DataMatrixEncoder(payload).save_svg( "datamatrix-circles.svg", mark_shape=MarkShape.CIRCULAR_CELLS ) Die "viewBox" des SVG ist in Moduleinheiten angegeben, während "width" und "height" mit "cellsize" skalieren. Das Schlüsselwort "mark_shape" bestimmt, wie gesetzte Zellen gezeichnet werden -- horizontale Folgen von Rechtecken (die Vorgabe) oder ein gefüllter Kreis pro Zelle. Bemerkung: Runde Zellen liegen außerhalb der standardmäßigen Modulform und die Decoder-Unterstützung variiert. Testen Sie es vor dem Einsatz mit Ihrem Zielscanner. 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. payload = DataMatrixData("https://github.com/mmulqueen/pyStrich", encoding="ascii") DataMatrixEncoder(payload).save("datamatrix.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). payload = DataMatrixData("https://github.com/mmulqueen/pyStrich", encoding="ascii") DataMatrixEncoder(payload).save_eps("datamatrix.eps") Das Argument "cellsize" ist die Kantenlänge eines Moduls in PostScript-Punkten (1 Punkt = 1/72 Zoll). Neu in Version 0.12. Terminal-Ausgabe ---------------- Für schnelle Anzeige auf dem Bildschirm liefert "get_terminal_art()" eine vom Scanner lesbare Darstellung mit Unicode-Halbblockzeichen. Jedes Zeichen steht für zwei Matrixzeilen und eine Spalte, sodass die Zellen in einer typischen Terminalschrift mit fester Breite ungefähr quadratisch erscheinen. print(DataMatrixEncoder(payload).get_terminal_art()) █▄▀ █ █▄█▄█ █▄▀▄█ █ █▄▀▄ █ ▀ ▀ █▄ █▀█ ▀ █▀ █▀ ▄ ██ █▄█ ▄█ █▄ █▄█ ▀ ▄▄█▄ ██▀▄▀██▀█ ▀▀▀██▀ ▄▄▄ █▄▄ ██▀▄▄▀█▄▀█▄█▄██▄▀███▀▄█▄ █▄ ▄█ ██ █▄█▀█▄▀ █▀▀▀▄ █▀ ▄ ▄██ ▄▀██▀▀█▄▄ ▄ ▀▄ ██ █▀█ █▀█▀▀▀▄█▄▀ █ ▄ ▄ █▀▀▄▄▀▄▀▀▄ ▄▀ ▄▀▄ ▀▀▄▄▄ █ ▀▄▄▀█▀▀▀▀▀▀ █▀ █▄▄█ ▄ █▄█▄▄▄▀▄▀ ▀ ▄ ▄▄█▀▀ ▀▄▀▄ █████▄▄██▄▄██▄█▄█████▄█▄ Standardmäßig wird die Ausgabe von ANSI-Escape-Codes umschlossen, die einen weißen Hintergrund und schwarzen Vordergrund erzwingen, sodass das Symbol unabhängig vom Farbschema des Terminals eingelesen werden kann. Übergeben Sie "ansi_bg=False" für eine einfache Ausgabe (nur auf einem hell gestalteten Terminal korrekt). Neu in Version 0.12. DXF-Ausgabe (CAD) ----------------- Für Anwendungen zur direkten Teilekennzeichnung (*direct part marking*) -- bei denen das Symbol in ein physisches Teil graviert oder lasergeätzt wird -- liefert "get_dxf()" eine DXF-Darstellung des Symbols. DXF ist das Dateiformat, das CAD- und CAM-Werkzeuge lesen; die Ausgabe kann direkt an das Gravier- oder Ätzwerkzeug übergeben werden. Die "cellsize" ist in Ihrer gewählten Einheit "units" (Vorgabe ""mm"") statt in Pixeln angegeben. payload = DataMatrixData("A1268172415", encoding="ascii") encoder = DataMatrixEncoder(payload) with open("part.dxf", "w") as f: f.write(encoder.get_dxf(cellsize=0.5, units="mm")) Die Vorgabe "inverse=True" gibt Geometrie für die hellen Module aus, einschließlich der Ruhezone -- sodass der Begrenzungsrahmen (*bounding box*) das Symbol einrahmt. Übergeben Sie "inverse=False", um stattdessen nur die dunklen Module auszugeben, was dem normalen Erscheinungsbild des Symbols entspricht; der Begrenzungsrahmen schmiegt sich dann an die dunklen Zellen an und die Ruhezone muss in der nachgelagerten Verarbeitung wieder hinzugefügt werden. Siehe auch: SAE AS9132B -- Qualitätsstandard aus Luft-/Raumfahrt und Verteidigung für Data-Matrix-Kennzeichnungen auf Metallteilen; in Deutschland veröffentlicht als DIN EN 9132 (Luft- und Raumfahrt -- Qualitätsmanagementsysteme -- Data Matrix Qualitätsanforderungen für Teilemarkierung). GS1 / FNC1 ========== Siehe auch: GS1-DataMatrix-Richtlinie -- die maßgebliche Referenz für die Auswahl von Application Identifiern, Codierregeln und Druckqualitätsanforderungen für GS1 Data Matrix. GS1 Data Matrix verwendet ein FNC1-Codewort als erstes Symbol, um zu signalisieren, dass die Nutzdaten eine Folge von GS1 Application Identifiern sind, und erneut als Trenner nach jedem Application Identifier variabler Länge, der nicht das letzte Element der Nachricht ist. "DataMatrixData.gs1()" baut die Nutzdaten aus typisierten Feld- Wrappern auf und übernimmt die Platzierung der Trenner automatisch. Kapseln Sie jedes Paar aus Application Identifier / Wert in "GS1Fixed", wenn die Datenlänge des Application Identifiers fest ist, andernfalls in "GS1Variable": from pystrich.datamatrix import DataMatrixData, DataMatrixEncoder from pystrich.gs1 import GS1Fixed, GS1Variable # (01) GTIN-14 -- pad a GTIN-13 with a leading "0" indicator digit. payload = DataMatrixData.gs1(GS1Fixed("01", "05050070007664")) DataMatrixEncoder(payload).save("gs1.png") [Bild: GS1-Data-Matrix-Symbol, das (01) GTIN 05050070007664 codiert.][Bild] Typische Nutzdaten für Pharma- / Medizinprodukte verbinden eine GTIN mit einem Verfallsdatum und einer Chargennummer. "(01)" und "(17)" haben feste Länge, also deklariert "GS1Fixed" sie; "(10)" hat variable Länge, also trägt "GS1Variable" es. Die GS1 General Specifications empfehlen, dass Application Identifier variabler Länge zuletzt kommen -- "(10)" ans Ende der Nachricht zu stellen bedeutet, dass zwischen den Feldern kein FNC1-Trenner nötig ist: payload = DataMatrixData.gs1( GS1Fixed("01", "09501234543213"), GS1Fixed("17", "261231"), GS1Variable("10", "BF07"), ) DataMatrixEncoder(payload).save("gs1-multi-fixed.png") [Bild: GS1-Data-Matrix-Symbol, das (01) GTIN 09501234543213, (17) Verfall 261231, (10) Charge BF07 codiert.][Bild] Wenn ein Application Identifier variabler Länge nicht das letzte Feld ist, wird der FNC1-Trenner automatisch eingefügt: payload = DataMatrixData.gs1( GS1Variable("10", "BF07"), GS1Variable("21", "19890519"), ) DataMatrixEncoder(payload).save("gs1-multi.png") [Bild: GS1-Data-Matrix-Symbol, das (10) Charge BF07 und (21) Seriennummer 19890519 durch FNC1 getrennt codiert.][Bild] Übergeben Sie für volle Kontrolle über den Codewort-Strom "FNC1" und die einfachen Zeichenketten aus Application Identifier / Wert direkt an "DataMatrixData" -- das ist der Weg, den "gs1()" kapselt: from pystrich.datamatrix import DataMatrixData, FNC1 payload = DataMatrixData(FNC1, "10BF07", FNC1, "2119890519", encoding="ascii") Bemerkung: GS1-Data-Matrix-Nutzdaten müssen ASCII sein -- die GS1 General Specifications beschränken Application-Identifier-Werte auf einen 7 -Bit-Zeichensatz (im Wesentlichen ASCII). "gs1()" verwendet fest ""ascii""; wenn Sie FNC1 selbst platzieren, kombinieren Sie es nicht mit Nicht-ASCII-Codierungen. Veraltet ab Version 0.11: Älterer Code löste FNC1 aus, indem er den Nutzdaten "chr(231)" voranstellte -- ursprünglich ein Fehler in dieser Bibliothek, auf den sich nachgelagerte Nutzer zu verlassen begannen (siehe Issue #13). Der Behelf funktioniert weiterhin, gibt aber eine "Fnc1WorkaroundCompatWarning" aus. Neuer Code sollte "gs1()" verwenden (oder "FNC1" für den direkten Weg). Nicht-ASCII-Text ================ Der ASCII-Codewortsatz von Data Matrix deckt nur die Bytes 0-127 ab. Um irgendetwas außerhalb dieses Bereichs in einem Nicht-GS1-Symbol zu codieren, kapseln Sie die Eingabe in "DataMatrixData" und übergeben Sie entweder "auto_encoding=True" (der Konstruktor wählt für Sie die schmalste passende Codierung) oder geben Sie eine Codierung explizit an: +------------------+---------------------------------------------------------------------+ | Codierung | Verhalten | |==================|=====================================================================| | ""ascii"" | Löst "PyStrichInvalidInput" bei jedem Byte > 127 aus. | +------------------+---------------------------------------------------------------------+ | ""iso-8859-1"" | Latin-1 -- der standardmäßige Zeichensatz für Data Matrix gemäß | | | ISO/IEC 16022. Die Bytes 128-255 werden über das Upper-Shift- | | | Codewort (235) ausgegeben; kein ECI-Bezeichner ist nötig und | | | konforme Decoder erkennen die Codierung automatisch. | +------------------+---------------------------------------------------------------------+ | ""utf-8"" | Deklariert einmal am Anfang des Symbols ECI 26 und codiert die | | | Eingabe byteweise. Konforme Decoder erkennen die Codierung | | | automatisch. | +------------------+---------------------------------------------------------------------+ | ""compat"" | Nachsichtiger Legacy-Modus. Nicht-ASCII-Zeichen geben | | | "DataMatrixNonAsciiWarning" aus und erzeugen Ausgabe, die sich | | | nicht korrekt decodieren lässt. Veraltet; wählen Sie stattdessen | | | eine der obigen. | +------------------+---------------------------------------------------------------------+ Tipp: Bevorzugen Sie für das kompakteste Symbol die restriktivste Codierung, die zu Ihren Daten passt: zuerst ""ascii"", dann ""iso-8859-1"", dann ""utf-8"". Jeder Schritt fügt Mehraufwand hinzu -- Latin-1 verbraucht ein zusätzliches Codewort pro hohem Byte, und UTF-8 fügt einen ECI-Bezeichner aus zwei Codewörtern hinzu und gibt Mehrbyte-Folgen für alles außerhalb von ASCII aus. "auto_encoding=True" trifft dieselbe Wahl für Sie, wenn Sie lieber nicht von Hand wählen möchten. from pystrich.datamatrix import DataMatrixData, DataMatrixEncoder # Latin-1: smaller symbol if all your input fits in one byte per char. DataMatrixEncoder(DataMatrixData("Ich dachte, Sie wären kräftiger", encoding="iso-8859-1")).save("latin1.png") [Bild: Data-Matrix-Symbol, das "Ich dachte, Sie wären kräftiger" als Latin-1 codiert.][Bild] # UTF-8: required for anything outside Latin-1 (€, CJK, emoji). DataMatrixEncoder(DataMatrixData("€5 親切にしろ 🐻‍❄️", encoding="utf-8")).save("utf8.png") [Bild: Data-Matrix-Symbol, das "€5 親切にしろ 🐻‍❄️" als UTF-8 (ECI 26) codiert.][Bild] Wenn Sie eine Zeichenkette mit der falschen Codierung übergeben, schlägt der ausgelöste Fehler die Codierung vor, die funktioniert *hätte*: >>> from pystrich.datamatrix import DataMatrixData >>> DataMatrixData("Ich dachte, Sie wären kräftiger", encoding="ascii") Traceback (most recent call last): ... pystrich.exceptions.PyStrichInvalidInput: DataMatrixData encoding ASCII cannot encode the input; try DataMatrixData('Ich dachte, Sie wären kräftiger', encoding='iso-8859-1') or pass auto_encoding=True to select an encoding automatically. Codierungsmodi ============== pyStrich unterstützt die folgenden Codierungsmodi: ASCII/Bytes (mit Paarung numerischer Ziffern), Text, C40 und X12. Base 256 wird derzeit nicht unterstützt. Wegen Bedenken hinsichtlich der Decoder-/Scanner- Unterstützung haben wir uns entschieden, EDIFACT nicht zu implementieren.[1] [1] Manche Honeywell-Scanner decodieren jeden anderen Data-Matrix- Modus, aber nicht EDIFACT. Siehe Honeywells Support-Artikel. Aufbau ====== Jede Data-Matrix-Region ist aus denselben drei Elementen aufgebaut. Größen von 10x10 bis 26x26 verwenden eine einzige Region; größere Größen kacheln die Region in einem 2x2-, 4x4- oder 6x6-Raster. Das Diagramm unten beschriftet ein 36x36-ECC-200-Symbol (2x2-Regionen von 16x16). [Bild: Beschriftetes 36x36-Data-Matrix-Symbol, das die durchgehende L-Begrenzung (Suchmuster), das Taktmuster, den Datenbereich und die Ruhezone über vier Regionen zeigt.][Bild] * **Durchgehende L-Begrenzung** (Suchmuster, *finder pattern*) -- zwei durchgehende Kanten (links und unten in jeder Region), die Größe und Ausrichtung des Symbols angeben. * **Taktmuster** (*timing pattern*) -- die gegenüberliegenden zwei Kanten jeder Region (oben und rechts), mit abwechselnd dunklen und hellen Zellen, sodass der Scanner die Module quer über die Region zählen kann. * **Datenbereich** (*data area*) -- alles innerhalb der L- und Taktkanten der Region: die codierten *Codewörter* plus *Reed- Solomon*-Fehlerkorrektur, durch den ECC-200-Platzierungsalgorithmus auf Zellen abgebildet. * **Ruhezone** (*quiet zone*) -- weißer Rand um das Symbol; die Spezifikation verlangt mindestens ein Modul, und pyStrich verwendet standardmäßig zwei. API === class DataMatrixEncoder(text: DataMatrixData | str, *, quiet_zone: int = 2, force_byte_mode: bool = False, symbol_shape: Literal['square', 'rectangular', 'auto'] = 'square') Bases: "Matrix2DEncoder"["int" | "None"] Codiert Text als Data-Matrix-2D-Barcode (ECC 200). Die Matrixgröße wird automatisch anhand der Eingabelänge gewählt. Kapseln Sie die Eingabe in "DataMatrixData" und übergeben Sie ein explizites "encoding" von ""ascii"", ""iso-8859-1"" oder ""utf-8"" -- oder übergeben Sie "auto_encoding=True", damit der Konstruktor die schmalste passende Codierung wählt. Stellen Sie für ein GS1 Data Matrix den Nutzdaten den "FNC1"-Marker voran. Typische Verwendung: encoder = DataMatrixEncoder(DataMatrixData("Hallo", encoding="ascii")) encoder.save("hallo.png") # Or, let DataMatrixData pick the encoding: encoder = DataMatrixEncoder(DataMatrixData("Rausschmeißer", auto_encoding=True)) Einfache "str"-Eingabe wird ebenfalls akzeptiert, greift aber auf eine veraltete ""compat""-Codierung zurück, die bei Nicht-ASCII- Bytes warnt und Ausgabe erzeugt, die sich nicht korrekt decodieren lässt. Neuer Code sollte die Eingabe immer in "DataMatrixData" kapseln. Variablen: * **matrix** -- 2D-Liste von Ganzzahlen ("0"/"1" oder "None" für ungesetzte Zellen), die das Symbol vor dem Rendern beschreibt. * **regions** -- "(h_regions, v_regions)" — die Anzahl der Regionen, in die das Symbol horizontal und vertikal unterteilt ist. * **quiet_zone** -- Breite des beim Rendern angewendeten weißen Rands in Modulen. * **width** -- Pixelbreite des zuletzt gerenderten Bildes. "0", bis eine Render-Methode aufgerufen wurde. * **height** -- Pixelhöhe des zuletzt gerenderten Bildes. get_ascii() -> str Gibt eine ASCII-Art-Darstellung des Symbols zurück. Rückgabetyp: str get_dxf(cellsize: float = 1.0, inverse: bool = True, units: Literal['in', 'ft', 'mi', 'mm', 'cm', 'm'] | None = 'mm', *, mark_shape: MarkShape = MarkShape.SQUARE_CELLS) -> str Gibt eine DXF-Darstellung (CAD) des Symbols zurück. Parameter: * **cellsize** -- Kantenlänge eines Moduls in "units". * **inverse** -- Wenn "True" (die Vorgabe), werden helle Module als gefüllte Zellen gezeichnet. Wenn "False", werden dunkle Module gezeichnet, was dem normalen Erscheinungsbild des Symbols entspricht. * **units** -- Eines von ""in"", ""ft"", ""mi"", ""mm"", ""cm"" oder ""m"" oder "None" für nicht angegeben ("$INSUNITS=0"). * **mark_shape** -- Wie gesetzte Zellen gruppiert und gezeichnet werden. Rückgabetyp: str Neu in Version 0.9. Geändert in Version 0.12: "units" unterstützt jetzt ""in"", ""ft"", ""mi"", ""cm"", ""m"" und "None" (nicht angegeben); zuvor wurde jeder andere Wert als ""mm"" stillschweigend als nicht angegeben behandelt. get_eps(cellsize: int = 5, *, inverse: bool = False, mark_shape: MarkShape = MarkShape.HORIZONTAL_RUNS, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> str Rendert das Symbol und gibt EPS-Markup zurück. Parameter: * **cellsize** -- Kantenlänge eines Moduls in PostScript- Punkten. * **inverse** -- Wenn "True", die hellen statt der dunklen Zellen markieren. * **mark_shape** -- Wie gesetzte Zellen gruppiert und gezeichnet werden. * **dark_hex** -- Farbe der dunklen Module 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(cellsize: int = 5, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> bytes Rendert das Symbol und gibt PNG-Bytes zurück. Parameter: * **cellsize** -- Kantenlänge eines Moduls in Pixeln. * **dark_hex** -- Farbe der dunklen Module 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(cellsize: int = 5, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> PILImage Rendert das Symbol und gibt ein Pillow-Bild zurück. Parameter: * **cellsize** -- Kantenlänge eines Moduls in Pixeln. * **dark_hex** -- Farbe der dunklen Module 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: Das gerenderte Symbol. 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(cellsize: int = 5, *, inverse: bool = False, mark_shape: MarkShape = MarkShape.HORIZONTAL_RUNS, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> str Rendert das Symbol und gibt SVG-Markup zurück. Parameter: * **cellsize** -- Kantenlänge eines Moduls in Benutzereinheiten. * **inverse** -- Wenn "True", die hellen statt der dunklen Zellen markieren. * **mark_shape** -- Wie gesetzte Zellen gruppiert und gezeichnet werden. * **dark_hex** -- Farbe der dunklen Module 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. get_terminal_art(*, ansi_bg: bool = True) -> str Rendert das Symbol mit Unicode-Halbblockzeichen für Terminals. Jedes Zeichen steht für zwei Matrixzeilen und eine Spalte, erzeugt näherungsweise quadratische Zellen in einer typischen Schrift mit fester Breite und liefert ein Ergebnis, das auf dem Bildschirm vom Scanner lesbar ist. Parameter: **ansi_bg** -- Wenn "True" (die Vorgabe), jede Zeile in ANSI- Escape-Codes einschließen, die einen weißen Hintergrund und schwarzen Vordergrund erzwingen, sodass das Symbol unabhängig vom Farbschema des Terminals vom Scanner lesbar ist. Setzen Sie ihn auf "False" für eine einfache Ausgabe (nur auf einem hell gestalteten Terminal korrekt). Rückgabetyp: str Neu in Version 0.12. png_dataurl(cellsize: int = 5, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> str Rendert das Symbol und gibt einen PNG-"data:"-URL-String zurück. Parameter: * **cellsize** -- Kantenlänge eines Moduls in Pixeln. * **dark_hex** -- Farbe der dunklen Module 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], cellsize: int = 5, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> None Speichert das Symbol als PNG. Übergeben Sie einen ".png"-Dateinamen. Parameter: * **filename** -- PNG-Ausgabepfad. * **cellsize** -- Kantenlänge eines Moduls in Pixeln. * **dark_hex** -- Farbe der dunklen Module 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], cellsize: int = 5, *, inverse: bool = False, mark_shape: MarkShape = MarkShape.HORIZONTAL_RUNS, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> None Speichert das Symbol als EPS-Datei. Übergeben Sie einen ".eps"-Dateinamen. Parameter: * **filename** -- EPS-Ausgabepfad. * **cellsize** -- Kantenlänge eines Moduls in PostScript- Punkten. * **inverse** -- Wenn "True", die hellen statt der dunklen Zellen markieren. * **mark_shape** -- Wie gesetzte Zellen gruppiert und gezeichnet werden. * **dark_hex** -- Farbe der dunklen Module 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], cellsize: int = 5, *, inverse: bool = False, mark_shape: MarkShape = MarkShape.HORIZONTAL_RUNS, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> None Speichert das Symbol als SVG-Datei. Übergeben Sie einen ".svg"-Dateinamen. Parameter: * **filename** -- SVG-Ausgabepfad. * **cellsize** -- Kantenlänge eines Moduls in Benutzereinheiten. * **inverse** -- Wenn "True", die hellen statt der dunklen Zellen markieren. * **mark_shape** -- Wie gesetzte Zellen gruppiert und gezeichnet werden. * **dark_hex** -- Farbe der dunklen Module 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(cellsize: int = 5, *, inverse: bool = False, mark_shape: MarkShape = MarkShape.HORIZONTAL_RUNS, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> str Rendert das Symbol und gibt einen SVG-"data:"-URL-String zurück. Parameter: * **cellsize** -- Kantenlänge eines Moduls in Benutzereinheiten. * **inverse** -- Wenn "True", die hellen statt der dunklen Zellen markieren. * **mark_shape** -- Wie gesetzte Zellen gruppiert und gezeichnet werden. * **dark_hex** -- Farbe der dunklen Module 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. init_renderer() -> DataMatrixRenderer Konstruiert einen "DataMatrixRenderer" für die codierte Matrix. Aktualisiert "width" und "height" mit den Pixelmaßen des Renderers und gibt den Renderer zurück. class DataMatrixData(*segments: str | DataMatrixCodeword, encoding: Literal['compat', 'ascii', 'iso-8859-1', 'utf-8'] | None = None, auto_encoding: bool = False) Bases: "EncodableData"["Literal"['ascii', 'iso-8859-1', 'utf-8'], "DataMatrixCodeword"] Zusammensetzbare Encoder-Eingabe, die Textabschnitte mit Roh- Codewort-Markern mischt. Bauen Sie Werte durch Verketten von Marker-Konstanten (z. B. "FNC1") mit einfachen Zeichenketten auf beiden Seiten auf und übergeben Sie das Ergebnis dann anstelle eines "str" an "DataMatrixEncoder". Die Konstruktion erfordert entweder ein explizites "encoding=" (eines von ""ascii"", ""iso-8859-1"", ""utf-8"" oder das veraltete ""compat"") oder "auto_encoding=True". Mit "auto_encoding=True" wählt der Konstruktor die schmalste von "ascii", "iso-8859-1", "utf-8", die jedes Segment darstellt; ein daneben übergebenes "encoding="-Argument wird ignoriert. ""compat"" ist nur eine Option zur Initialisierungszeit -- es löst die veraltete ASCII+1-Codewort- Transformation aus und wird anschließend als ""ascii"" gespeichert, sodass "encoding" nach der Konstruktion immer einer der drei konkreten Zeichensätze ist. Nach der Konstruktion wird "segments" normalisiert: aufeinanderfolgende str-Segmente werden zusammengeführt, leere strs verworfen, und (bei ""compat"") wird jeder Codepunkt mit gesetztem höchstwertigem Bit durch ein "DataMatrixCodeword" mit dem veralteten "ord + 1"-Wert ersetzt. Der Encoder sieht daher immer nur rein codierbare strs im Wechsel mit Roh-Codewort-Markern. Neu in Version 0.11. Geändert in Version 0.12: Aufrufer müssen jetzt entweder ein explizites "encoding=" oder "auto_encoding=True" übergeben. Das "auto_encoding"-Flag wurde hinzugefügt. Veraltet ab Version 0.11: Die ""compat""-Codierung wird nur aus Gründen der Abwärtskompatibilität beibehalten und in einer künftigen Version entfernt. Neuer Code sollte ""ascii"", ""iso-8859-1"" oder ""utf-8"" explizit wählen oder "auto_encoding=True" verwenden. classmethod gs1(*fields: GS1Fixed | GS1Variable) -> DataMatrixData Baut GS1-Data-Matrix-Nutzdaten aus typisierten Application- Identifier-Feldern auf. Gibt ein führendes "FNC1" aus (das das Symbol gegenüber konformen Scannern als GS1 Data Matrix 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 -- die GS1 General Specifications beschränken Application- Identifier-Werte auf einen 7-Bit-Zeichensatz. 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 DataMatrixCodeword(value: int) Bases: "object" Ein literaler DataMatrix-Codewort-Wert, der wortwörtlich ausgegeben wird. Die Verkettung mit einem einfachen "str" oder einem anderen Codewort (z. B. "FNC1 + "..."") ist der moderne API-Weg und erzeugt ein "DataMatrixData" mit der strikten ""ascii""-Codierung. Die Verkettung mit einem bestehenden "DataMatrixData" bewahrt stattdessen die Codierung dieses Objekts. Neu in Version 0.11. pystrich.datamatrix.FNC1 Der GS1-FNC1-Marker (Data-Matrix-Codewort 232). Eine Instanz von "DataMatrixCodeword"; hängen Sie ihn mit "+" an Zeichenketten an, um GS1-Nutzdaten aufzubauen. Neu in Version 0.11.