Gemeinsame Typen **************** Gemeinsame Typisierungshilfen für pyStrich-Encoder und -Renderer. class BarcodeRenderOptions Bases: "TypedDict" Optionale Anpassungen zur Renderzeit für 1D-Barcodes mit Beschriftung. Derzeit verwendet von "pystrich.code128.Code128Encoder" und "pystrich.code39.Code39Encoder". Alle Schlüssel sind optional; ausgelassene Schlüssel greifen auf die Bibliotheksvorgaben zurück. show_label: bool Ob die Klarschriftzeile unter den Strichen gerendert wird. Vorgabe "True"; setzen Sie ihn auf "False", um sie zu unterdrücken. ttf_font: str Absoluter Pfad zu einer TrueType-Schriftdatei, die für die Beschriftung in der PNG-Ausgabe verwendet wird. Ohne Angabe wird eine mitgelieferte Bitmap-Schrift verwendet. SVG- und EPS- Ausgabe rendern die Beschriftung immer mit den mitgelieferten Courier-Prime-Glyphenpfaden und ignorieren diese Option. ttf_fontsize: int Schriftgröße in Punkt (nur PNG-Ausgabe -- SVG/EPS verwenden die mitgelieferten Courier-Prime-Glyphenpfade). height: int Gesamte Bildhöhe in Pixeln. Vorgabe ist etwa ein Drittel der Bildbreite für Code 128 und "120" für Code 39. label_border: int Pixel an vertikalem Abstand zwischen den Strichen und der Beschriftung. bottom_border: int Pixel an vertikalem Abstand zwischen der Beschriftung und der Unterkante. quiet_width_multiplier: int Breite der Ruhezone auf jeder Seite, in Schmalstrichbreiten. Vorgabe "10", das von beiden Symbologien geforderte Minimum. Matrix-Mark-Extraktion, gemeinsam genutzt von den Vektor-Renderern (SVG, EPS, DXF). class MarkShape(*values) Bases: "Enum" Wie gesetzte Zellen in der Vektorausgabe gruppiert und gezeichnet werden. Jeder Wert wählt eine Gruppierung (ein "MatrixMark" pro Zelle oder eines pro horizontaler Folge) und -- wo der Renderer es unterstützt -- das pro Mark verwendete Zeichen-Primitiv. HORIZONTAL_RUNS = 1 Maximale horizontale Folgen gesetzter Zellen, als gefüllte Rechtecke gezeichnet. SQUARE_CELLS = 2 Ein 1x1-Bereich pro gesetzter Zelle, als gefülltes Rechteck gezeichnet. CIRCULAR_CELLS = 3 Ein 1x1-Bereich pro gesetzter Zelle, als in die Zelle einbeschriebener gefüllter Kreis gezeichnet. iter_horizontal_runs(matrix: Sequence[Sequence[int | None]], *, mark_values_when: bool) -> Iterator[tuple[int, int, int, int]] Liefert jede maximale horizontale Folge von Zellen, deren Wahrheitswert "mark_values_when" entspricht. "mark_values_when=True" markiert die dunklen (wahren) Zellen; "False" markiert die hellen Zellen ("0" oder "None"). Jeder gelieferte Mark hat "height=1". iter_cells(matrix: Sequence[Sequence[int | None]], *, mark_values_when: bool) -> Iterator[tuple[int, int, int, int]] Liefert einen 1x1-Mark für jede Zelle, deren Wahrheitswert "mark_values_when" entspricht. iter_marks(matrix: Sequence[Sequence[int | None]], *, mark_values_when: bool, mark_shape: MarkShape) -> Iterator[tuple[int, int, int, int]] Liefert "MatrixMark"-Bereiche für das gewählte "mark_shape". class TextLabel(text: str, x: float, y: float, font_size: int, anchor: str = 'start') Bases: "NamedTuple" Ein Textstück, das in der Vektorausgabe unter den Strichen gerendert wird. Koordinaten sind in Pixeln (= Benutzereinheiten für SVG/EPS bei Standard-DPI), und "y" ist die *obere* Kante des Textes -- passend zur Konvention von "PIL.ImageDraw.text(xy, ...)" für den entsprechenden Rasterpfad. "anchor" steuert, wie sich "x" auf das Textstück bezieht: ""start"" ist die linke Kante, ""middle"" die Mitte, ""end"" die rechte Kante. text: str Alias für Feldnummer 0 x: float Alias für Feldnummer 1 y: float Alias für Feldnummer 2 font_size: int Alias für Feldnummer 3 anchor: str Alias für Feldnummer 4 class BarLayout(heights: Sequence[int], bar_width: int, quiet_left: int = 0, quiet_right: int = 0, quiet_top: int = 0, quiet_bottom: int = 0, labels: Sequence[TextLabel] = (), bearer_width: int = 0) Bases: "NamedTuple" Pixelgenaues Layout eines 1D-Barcodes für jedes Ausgabeformat. Alle Werte sind in Pixeln (= Benutzereinheiten für SVG/EPS bei Standard-DPI). "heights[i]" ist die Pixelhöhe des Strichs in Spalte "i" ("0" ist eine Lücke). Jede Spalte ist "bar_width" Pixel breit. Die vier Ruhezonen rahmen das Symbol; "quiet_left" und "quiet_top" verschieben die Striche, während "quiet_right" und "quiet_bottom" nur die Zeichenfläche vergrößern. "labels" trägt die Klarschrift, die unter den Strichen gezeichnet wird, von den PNG-, SVG- und EPS- Pfaden identisch gerendert. "bearer_width" zeichnet, wenn positiv, einen Trägerbalken dieser Pixelstärke, der die Striche umrandet (wie von ITF-14 verwendet); er muss in die Ruhezonen eingerechnet werden, wobei die Beschriftung in der unteren Ruhezone außerhalb des Rahmens platziert wird. heights: Sequence[int] Alias für Feldnummer 0 bar_width: int Alias für Feldnummer 1 quiet_left: int Alias für Feldnummer 2 quiet_right: int Alias für Feldnummer 3 quiet_top: int Alias für Feldnummer 4 quiet_bottom: int Alias für Feldnummer 5 labels: Sequence[TextLabel] Alias für Feldnummer 6 bearer_width: int Alias für Feldnummer 7 iter_bar_marks(heights: Sequence[int], bar_width: int, *, quiet_left: int = 0, quiet_top: int = 0) -> Iterator[tuple[int, int, int, int]] Liefert einen "MatrixMark" pro maximaler Folge gleicher positiver Höhen. Koordinaten und Abmessungen sind in Pixeln. "heights[i]" ist die Pixelhöhe des Strichs in Spalte "i" ("0" ist eine Lücke; positive Werte sind Striche mit gemeinsamer Oberkante bei "y = quiet_top"). Jede Spalte ist "bar_width" Pixel breit. Benachbarte Spalten mit derselben positiven Höhe werden zu einem Mark zusammengefasst. Nur "quiet_left" und "quiet_top" werden akzeptiert, weil sie die einzigen Versätze sind, die die Mark-Koordinaten beeinflussen; die rechte und untere Ruhezone sind Sache des Renderers (Zeichenflächen -/viewBox-Dimensionierung). iter_bearer_marks(layout: BarLayout) -> Iterator[tuple[int, int, int, int]] Liefert die vier Rechtecke eines Vollrahmen-Trägerbalkens. Es wird nichts geliefert, wenn "layout.bearer_width" null ist. Der Rahmen umrandet nur die Striche -- die obere und untere Linie grenzen an die Striche, und die Beschriftung (in der unteren Ruhezone) sitzt außerhalb des Rahmens. "quiet_top" nimmt die obere Linie auf, daher muss die Trägerstärke in die Ruhezonen eingerechnet werden. iter_barcode_marks(layout: BarLayout) -> Iterator[tuple[int, int, int, int]] Liefert jeden dunklen Mark eines 1D-Barcodes: seine Striche, dann seinen Trägerbalken. Der einzige Einstiegspunkt, aus dem die PNG-, SVG- und EPS-Pfade rendern; er kombiniert das rohe "iter_bar_marks()"-Primitiv mit "iter_bearer_marks()". Benutzerfreundliche Zusammenstellung von GS1-Application-Identifier- Nutzdaten. Kombinieren Sie "GS1Fixed"- und "GS1Variable"-Instanzen mit der passenden Klassenmethode "gs1()" auf "pystrich.code128.Code128Data" oder "pystrich.datamatrix.DataMatrixData", um GS1-128- oder GS1-Data- Matrix-Nutzdaten auszugeben, ohne FNC1-Trenner von Hand zu verwalten. Die Bibliothek liefert kein Application-Identifier-Register: Aufrufer teilen mit, ob jedes Feld feste oder variable Länge hat, indem sie die Wrapper-Klasse wählen. FNC1-Trenner werden nach Feldern variabler Länge eingefügt, die nicht das letzte Element der Nutzdaten sind, sowie einmal ganz am Anfang der Nachricht. Neu in Version 0.15. class GS1Fixed(application_identifier: str, value: str) Bases: "_GS1Field" Ein GS1-Application-Identifier-Feld fester Länge. Das Lesegerät kennt die Datenlänge allein aus dem Application Identifier, daher ist nach dem Feld kein FNC1-Trenner nötig. Verwenden Sie es für Application Identifier wie "(01)" GTIN-14, "(17)" Verfallsdatum oder "(11)" Herstellungsdatum. Parameter: * **application_identifier** -- Der 2- bis 4-stellige Application Identifier. * **value** -- Die Datenzeichenkette. Muss nichtleeres druckbares ASCII sein. class GS1Variable(application_identifier: str, value: str) Bases: "_GS1Field" Ein GS1-Application-Identifier-Feld variabler Länge. Das Lesegerät kann allein aus dem Application Identifier nicht bestimmen, wo die Daten enden, daher folgt ein FNC1-Trenner, es sei denn, dies ist das letzte Feld der Nutzdaten. Verwenden Sie es für Application Identifier wie "(10)" Charge, "(21)" Seriennummer oder "(240)" zusätzliche Produktidentifikation. Parameter: * **application_identifier** -- Der 2- bis 4-stellige Application Identifier. * **value** -- Die Datenzeichenkette. Muss nichtleeres druckbares ASCII sein.