Types partagés

Utilitaires de typage partagés pour les encodeurs et moteurs de rendu de pyStrich.

class BarcodeRenderOptions[source]

Bases : TypedDict

Réglages de rendu facultatifs pour les codes-barres 1D porteurs d’un libellé.

Actuellement utilisé par pystrich.code128.Code128Encoder et pystrich.code39.Code39Encoder. Toutes les clés sont facultatives ; les clés omises se rabattent sur les valeurs par défaut de la bibliothèque.

show_label: bool

Indique si le libellé en clair doit être rendu sous les barres. Vaut True par défaut ; réglez sur False pour le supprimer.

ttf_font: str

Chemin absolu vers un fichier de police TrueType utilisé pour le libellé dans la sortie PNG. À défaut, une police bitmap fournie est utilisée. Les sorties SVG et EPS rendent toujours le libellé à l’aide des tracés de glyphes Courier Prime fournis et ignorent cette option.

ttf_fontsize: int

Taille de police en points (sortie PNG uniquement — SVG/EPS utilisent les tracés de glyphes Courier Prime fournis).

height: int

Hauteur totale de l’image en pixels. Vaut par défaut environ un tiers de la largeur de l’image pour Code 128, et 120 pour Code 39.

label_border: int

Espace vertical, en pixels, entre les barres et le libellé.

bottom_border: int

Espace vertical, en pixels, entre le libellé et le bord inférieur.

quiet_width_multiplier: int

Largeur de la zone de silence de chaque côté, en largeurs de barre étroite. Vaut 10 par défaut, le minimum requis par les deux symbologies.

Extraction des marques de matrice partagée par les moteurs de rendu vectoriels (SVG, EPS, DXF).

class SymbolMarks(marks: tuple[MatrixMark, ...], width: int, height: int)[source]

Bases : NamedTuple

Un symbole rendu sous forme de rectangles sombres dans une grille unitaire.

marks sont les régions sombres sous forme de rectangles (x, y, width, height), avec une origine en haut à gauche et l’axe y orienté vers le bas (comme la matrice, PIL et SVG). width et height correspondent à l’étendue complète de la grille dans laquelle s’inscrivent les marques – le même canevas que dessine tout autre format de sortie, de sorte que les zones de silence, le motif de recherche et (pour la 1D) la barre de support et l’espace réservé au libellé en clair sont tous inclus – et un outil en aval peut faire tenir [0, width] x [0, height] dans n’importe quelle boîte cible, à n’importe quelle échelle. Les glyphes du libellé eux-mêmes ne sont jamais des marques. Pour les symboles 2D, une unité vaut un module ; pour les symboles 1D, l’unité x vaut une barre étroite et l’unité y vaut un pixel de la disposition des barres.

marks: tuple[tuple[int, int, int, int], ...]

Alias du champ numéro 0

width: int

Alias du champ numéro 1

height: int

Alias du champ numéro 2

class MarkShape(*values)[source]

Bases : Enum

Comment les cellules marquées sont groupées et dessinées dans la sortie vectorielle.

Chaque valeur choisit un regroupement (un MatrixMark par cellule, ou un par suite horizontale) et – lorsque le moteur de rendu le permet – la primitive de dessin utilisée par marque.

HORIZONTAL_RUNS = 1

Suites horizontales maximales de cellules marquées, dessinées comme des rectangles pleins.

SQUARE_CELLS = 2

Une région 1x1 par cellule marquée, dessinée comme un rectangle plein.

CIRCULAR_CELLS = 3

Une région 1x1 par cellule marquée, dessinée comme un cercle plein inscrit dans la cellule.

iter_horizontal_runs(matrix: Sequence[Sequence[int | None]], *, mark_values_when: bool) Iterator[tuple[int, int, int, int]][source]

Produit chaque suite horizontale maximale de cellules dont la valeur booléenne est égale à mark_values_when.

mark_values_when=True marque les cellules sombres (vraies) ; False marque les cellules claires (0 ou None). Chaque marque produite a height=1.

iter_cells(matrix: Sequence[Sequence[int | None]], *, mark_values_when: bool) Iterator[tuple[int, int, int, int]][source]

Produit une marque 1x1 pour chaque cellule dont la valeur booléenne est égale à mark_values_when.

iter_marks(matrix: Sequence[Sequence[int | None]], *, mark_values_when: bool, mark_shape: MarkShape) Iterator[tuple[int, int, int, int]][source]

Produit des régions MatrixMark pour le mark_shape choisi.

class TextLabel(text: str, x: float, y: float, font_size: int, anchor: str = 'start')[source]

Bases : NamedTuple

Une suite de texte à rendre sous les barres dans la sortie vectorielle.

Les coordonnées sont en pixels (= unités utilisateur pour SVG/EPS à la résolution par défaut), et y est le bord supérieur du texte — conformément à la convention utilisée par PIL.ImageDraw.text(xy, ...) pour le chemin matriciel correspondant. anchor contrôle la façon dont x se rapporte à la suite de texte : "start" est le bord gauche, "middle" le centre, "end" le bord droit.

text: str

Alias du champ numéro 0

x: float

Alias du champ numéro 1

y: float

Alias du champ numéro 2

font_size: int

Alias du champ numéro 3

anchor: str

Alias du champ numéro 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)[source]

Bases : NamedTuple

Disposition au pixel près d’un code-barres 1D, pour n’importe quel format de sortie.

Toutes les valeurs sont en pixels (= unités utilisateur pour SVG/EPS à la résolution par défaut). heights[i] est la hauteur en pixels de la barre à la colonne i (0 correspond à un espace). Chaque colonne fait bar_width pixels de large. Les quatre zones de silence encadrent le symbole ; quiet_left et quiet_top décalent les barres, tandis que quiet_right et quiet_bottom ne font qu’agrandir le canevas. labels porte le texte en clair dessiné sous les barres, rendu à l’identique par les chemins PNG, SVG et EPS. bearer_width, lorsqu’il est positif, dessine une barre de support de cette épaisseur en pixels bordant les barres (comme dans l’ITF-14) ; elle doit être intégrée aux zones de silence, le libellé étant placé dans la zone de silence inférieure, à l’extérieur du cadre.

heights: Sequence[int]

Alias du champ numéro 0

bar_width: int

Alias du champ numéro 1

quiet_left: int

Alias du champ numéro 2

quiet_right: int

Alias du champ numéro 3

quiet_top: int

Alias du champ numéro 4

quiet_bottom: int

Alias du champ numéro 5

labels: Sequence[TextLabel]

Alias du champ numéro 6

bearer_width: int

Alias du champ numéro 7

property width: int[source]

Largeur totale du canevas en pixels.

property height: int[source]

Hauteur totale du canevas en pixels.

iter_bar_marks(heights: Sequence[int], bar_width: int, *, quiet_left: int = 0, quiet_top: int = 0) Iterator[tuple[int, int, int, int]][source]

Produit un MatrixMark par suite maximale de hauteurs positives égales.

Les coordonnées et dimensions sont en pixels. heights[i] est la hauteur en pixels de la barre à la colonne i (0 correspond à un espace ; les valeurs positives sont des barres partageant un bord supérieur à y = quiet_top). Chaque colonne fait bar_width pixels de large. Les colonnes adjacentes de même hauteur positive se fondent en une seule marque.

Seuls quiet_left et quiet_top sont acceptés, car ce sont les seuls décalages qui influent sur les coordonnées des marques ; les zones de silence droite et inférieure relèvent du moteur de rendu (dimensionnement du canevas / viewBox).

iter_bearer_marks(layout: BarLayout) Iterator[tuple[int, int, int, int]][source]

Produit les quatre rectangles d’une barre de support à cadre complet.

Rien n’est produit lorsque layout.bearer_width vaut zéro. Le cadre borde uniquement les barres – les traits supérieur et inférieur jouxtent les barres, et le libellé (dans la zone de silence inférieure) se trouve à l’extérieur du cadre. quiet_top accueille le trait supérieur, de sorte que l’épaisseur de la barre de support doit être intégrée aux zones de silence.

iter_barcode_marks(layout: BarLayout) Iterator[tuple[int, int, int, int]][source]

Produit chaque marque sombre d’un code-barres 1D : ses barres, puis sa barre de support.

Le point d’entrée unique à partir duquel les chemins PNG, SVG et EPS effectuent le rendu, composant la primitive brute iter_bar_marks() avec iter_bearer_marks().

Composition conviviale de charges utiles d’identifiants d’application GS1.

Associez des instances de GS1Fixed et GS1Variable à la méthode de classe gs1() correspondante de pystrich.code128.Code128Data ou pystrich.datamatrix.DataMatrixData pour émettre une charge utile GS1-128 ou GS1 Data Matrix sans gérer les séparateurs FNC1 à la main.

La bibliothèque ne fournit pas de registre d’identifiants d’application : l’appelant indique à la bibliothèque si chaque champ est de longueur fixe ou variable en choisissant la classe d’enveloppe. Les séparateurs FNC1 sont insérés après les champs de longueur variable qui ne sont pas le dernier élément de la charge utile, et une fois tout au début du message.

Ajouté dans la version 0.15.

class GS1Fixed(application_identifier: str, value: str)[source]

Bases : _GS1Field

Un champ d’identifiant d’application GS1 de longueur fixe.

Le lecteur connaît la longueur des données à partir du seul identifiant d’application, aucun séparateur FNC1 n’est donc nécessaire après le champ. À utiliser pour des identifiants d’application tels que (01) GTIN-14, (17) date de péremption ou (11) date de production.

Paramètres:
  • application_identifier – L’identifiant d’application, de 2 à 4 chiffres.

  • value – La chaîne de données. Doit être de l’ASCII imprimable non vide.

class GS1Variable(application_identifier: str, value: str)[source]

Bases : _GS1Field

Un champ d’identifiant d’application GS1 de longueur variable.

Le lecteur ne peut pas déterminer où se terminent les données à partir du seul identifiant d’application ; un séparateur FNC1 suit donc, sauf s’il s’agit du dernier champ de la charge utile. À utiliser pour des identifiants d’application tels que (10) lot, (21) numéro de série ou (240) identification produit supplémentaire.

Paramètres:
  • application_identifier – L’identifiant d’application, de 2 à 4 chiffres.

  • value – La chaîne de données. Doit être de l’ASCII imprimable non vide.