Code 128 ******** Code 128 est une symbologie 1D à haute densité couvrant toute la plage ASCII. pyStrich bascule automatiquement entre les jeux de codes A, B et C pour minimiser la longueur du symbole, et calcule la somme de contrôle modulo 103 pour vous. Voir aussi: Code 128 sur Wikipédia pour des informations générales sur la symbologie elle-même. Les codes-barres Code 128 sont définis dans la norme ISO/IEC 15417 (Technologies de l'information -- Techniques automatiques d'identification et de capture des données -- Spécifications des symbologies des codes à barres -- Code 128). Exemple ======= from pystrich.code128 import Code128Encoder encoder = Code128Encoder("WDBCA45D2HA327260") encoder.save_svg("code128-example.svg") [image: Code-barres Code 128 encodant « WDBCA45D2HA327260 ».][image] GS1-128 ======= Voir aussi: GS1-128 sur Wikipédia pour des informations générales sur la variante GS1. GS1-128 est un Code 128 comportant un FNC1 en première position de données, signalant que la charge utile est une suite d'identifiants d'application GS1. "Code128Data.gs1()" construit la charge utile à partir d'enveloppes de champ typées et gère automatiquement le placement des FNC1 -- un au début du message et un après chaque identifiant d'application de longueur variable qui n'est pas le dernier élément. Encapsulez chaque paire identifiant d'application / valeur dans "GS1Fixed" pour les identifiants d'application de longueur fixe ("(01)", "(17)", "(11)" etc.) ou "GS1Variable" sinon. Les GS1 General Specifications recommandent de placer les identifiants d'application de longueur variable en dernier : 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") [image: Code-barres GS1-128 encodant (01) GTIN 09501234543213, (17) péremption 261231, (10) lot BF07.][image] Pour un contrôle total du flux de mots de code -- ou pour mêler des segments FNC2, FNC3 ou Latin-1 aux marqueurs GS1 --, passez "FNC1" et les chaînes brutes identifiant d'application / valeur directement à "Code128Data" ; c'est ce que fait "gs1()" en interne. Texte Latin-1 ============= Pour une entrée Latin-1, encapsulez la charge utile dans "Code128Data" avec "encoding="iso-8859-1"" (ou "auto_encoding=True"). Les octets 128-255 émettent un décalage simple (single-shift) FNC4 dans le flux de mots de code ; les caractères hors Latin-1 sont rejetés. from pystrich.code128 import Code128Data, Code128Encoder Code128Encoder( Code128Data("Rausschmeißer", encoding="iso-8859-1") ).save("code128-latin1.png") [image: Code-barres Code 128 encodant « Rausschmeißer » via des décalages FNC4 Latin-1.][image] Dimensionnement, libellé, police et mise en page ================================================ L'argument "bar_width" de "save()" et "get_imagedata()" définit la largeur, en pixels, de la barre la plus étroite ("3" par défaut). Le dictionnaire "options" passé à "Code128Encoder" contrôle le libellé en clair et la mise en page environnante. Toutes les clés sont facultatives. "show_label" 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" Chemin absolu vers un fichier de police TrueType utilisé pour le libellé. À défaut, une police bitmap fournie est utilisée. "ttf_fontsize" Taille de police en points. "height" Hauteur totale de l'image en pixels. Vaut par défaut environ un tiers de la largeur de l'image. "label_border" Espace vertical, en pixels, entre les barres et le libellé. "bottom_border" Espace vertical, en pixels, entre le libellé et le bord inférieur. Voir aussi: Impression des codes-barres pour des conseils sur le choix de "bar_width" pour une sortie imprimée. 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) [image: Code-barres Code 128 encodant « WDBCA45D2HA327260 » avec une image plus haute et un libellé plus grand.][image] Formats de sortie ================= Sortie SVG ---------- Pour une intégration dans des pages web ou tout flux de travail tirant parti d'une sortie indépendante de la résolution, utilisez "save_svg()" (ou "get_svg()" pour récupérer le SVG sous forme de chaîne). Code128Encoder("WDBCA45D2HA327260").save_svg("code128.svg") [image: Code-barres Code 128 SVG encodant « WDBCA45D2HA327260 ».][image] Le "viewBox" du SVG est exprimé en unités de module (une barre étroite = une unité), tandis que "width" et "height" sont mis à l'échelle par "bar_width". Les zones de silence de 10 modules imposées par la norme sont appliquées automatiquement de chaque côté. Ajouté dans la version 0.12. Sortie PNG ---------- Pour une sortie matricielle, utilisez "save()" pour écrire un fichier PNG ou "get_imagedata()" pour récupérer les octets PNG bruts. Code128Encoder("WDBCA45D2HA327260").save("code128.png") Sortie EPS ---------- Pour une intégration dans LaTeX ("\includegraphics") ou d'autres flux d'impression vectorielle, utilisez "save_eps()" (ou "get_eps()" pour récupérer l'EPS sous forme de chaîne). Code128Encoder("WDBCA45D2HA327260").save_eps("code128.eps") L'argument "bar_width" est la largeur de la barre la plus étroite en points PostScript (1 point = 1/72 de pouce). Les zones de silence de 10 modules sont appliquées automatiquement. Ajouté dans la version 0.12. API === class Code128Encoder(text: str | Code128Data, options: BarcodeRenderOptions | None = None) Bases : "Bar1DEncoder" Encode une chaîne sous forme de code-barres 1D Code 128. Les jeux de codes A, B et C basculent automatiquement pour minimiser la longueur du symbole. La somme de contrôle modulo 103 est calculée et ajoutée pour vous. Utilisation typique: encoder = Code128Encoder("nm0000385") encoder.save("barcode.png") Variables: * **text** -- Le texte d'entrée d'origine. * **encoded_text** -- Liste des valeurs de code produites par l'encodeur de texte, y compris les codes de départ et les basculements de jeu de codes. * **checksum** -- La valeur de la somme de contrôle modulo 103. * **bars** -- Le motif de barres et d'espaces sous forme de chaîne de ""1"" et de ""0"". * **options** -- Dictionnaire d'options de rendu (vide si aucune n'a été fournie). * **width** -- Largeur en pixels de la dernière image rendue. "0" tant qu'aucune méthode de rendu n'a été appelée. * **height** -- Hauteur en pixels de la dernière image rendue. get_eps(bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> str Génère le code-barres et renvoie le balisage EPS. Paramètres: * **bar_width** -- Largeur en points PostScript de la barre la plus étroite. * **dark_hex** -- Couleur des barres et du texte, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Noir par défaut. * **light_hex** -- Couleur de fond, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA", opaque. Blanc par défaut. Type renvoyé: str Ajouté dans la version 0.12. Modifié dans la version 0.16: Ajout de "dark_hex" et "light_hex". get_imagedata(bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> bytes Génère le code-barres et renvoie les octets PNG. Paramètres: * **bar_width** -- Largeur en pixels de la barre la plus étroite. * **dark_hex** -- Couleur des barres et du texte, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Noir par défaut. * **light_hex** -- Couleur de fond, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Blanc par défaut. Renvoie: Données d'image encodées en PNG. Type renvoyé: bytes Modifié dans la version 0.16: Ajout de "dark_hex" et "light_hex". get_pilimage(bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> PILImage Génère le code-barres et renvoie une image Pillow. Paramètres: * **bar_width** -- Largeur en pixels de la barre la plus étroite. * **dark_hex** -- Couleur des barres et du texte, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Noir par défaut. * **light_hex** -- Couleur de fond, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Blanc par défaut. Renvoie: Le code-barres rendu. Type renvoyé: PIL.Image.Image Ajouté dans la version 0.11. Modifié dans la version 0.16: Ajout de "dark_hex" et "light_hex". get_rect_marks() -> SymbolMarks Renvoie les barres sombres du code-barres sous forme de rectangles en unités de mise en page. Type renvoyé: pystrich.marks.SymbolMarks Ajouté dans la version 0.18. get_svg(bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> str Génère le code-barres et renvoie le balisage SVG. Paramètres: * **bar_width** -- Largeur en unités utilisateur de la barre la plus étroite. * **dark_hex** -- Couleur des barres et du texte, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Noir par défaut. * **light_hex** -- Couleur de fond, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Blanc par défaut. Type renvoyé: str Ajouté dans la version 0.12. Modifié dans la version 0.16: Ajout de "dark_hex" et "light_hex". png_dataurl(bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> str Génère le code-barres et renvoie une chaîne d'URL "data:" PNG. Paramètres: * **bar_width** -- Largeur en pixels de la barre la plus étroite. * **dark_hex** -- Couleur des barres et du texte, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Noir par défaut. * **light_hex** -- Couleur de fond, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Blanc par défaut. Type renvoyé: str Ajouté dans la version 0.15. Modifié dans la version 0.16: Ajout de "dark_hex" et "light_hex". save(filename: str | os.PathLike[str], bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> None Génère le code-barres dans un fichier PNG. Paramètres: * **filename** -- Chemin où écrire le PNG. * **bar_width** -- Largeur en pixels de la barre la plus étroite. * **dark_hex** -- Couleur des barres et du texte, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Noir par défaut. * **light_hex** -- Couleur de fond, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Blanc par défaut. Modifié dans la version 0.16: Ajout de "dark_hex" et "light_hex". save_eps(filename: str | os.PathLike[str], bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> None Enregistre le code-barres dans un fichier EPS. Passez un nom de fichier ".eps". Paramètres: * **filename** -- Chemin de sortie EPS. * **bar_width** -- Largeur en points PostScript de la barre la plus étroite. * **dark_hex** -- Couleur des barres et du texte, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Noir par défaut. * **light_hex** -- Couleur de fond, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA", opaque. Blanc par défaut. Ajouté dans la version 0.12. Modifié dans la version 0.16: Ajout de "dark_hex" et "light_hex". save_svg(filename: str | os.PathLike[str], bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> None Enregistre le code-barres dans un fichier SVG. Passez un nom de fichier ".svg". Paramètres: * **filename** -- Chemin de sortie SVG. * **bar_width** -- Largeur en unités utilisateur de la barre la plus étroite. * **dark_hex** -- Couleur des barres et du texte, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Noir par défaut. * **light_hex** -- Couleur de fond, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Blanc par défaut. Ajouté dans la version 0.12. Modifié dans la version 0.16: Ajout de "dark_hex" et "light_hex". svg_dataurl(bar_width: int = 3, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> str Génère le code-barres et renvoie une chaîne d'URL "data:" SVG. Paramètres: * **bar_width** -- Largeur en unités utilisateur de la barre la plus étroite. * **dark_hex** -- Couleur des barres et du texte, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Noir par défaut. * **light_hex** -- Couleur de fond, sous forme de chaîne hexadécimale de 3, 6 ou 8 chiffres ou d'un "RGBA". Blanc par défaut. Type renvoyé: str Ajouté dans la version 0.15. Modifié dans la version 0.16: Ajout de "dark_hex" et "light_hex". calculate_check_sum() -> int Calcule la somme de contrôle modulo 103 Code 128 pour "encoded_text". Le code de départ a un poids de 1 ; les symboles suivants sont pondérés par leur position (à partir de 1) avant l'application du modulo. init_renderer() -> Code128Renderer Construit un "Code128Renderer" pour les barres encodées. Type renvoyé: "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"] Entrée d'encodeur composable mêlant des fragments de texte et des jetons marqueurs FNC. Construisez les valeurs en concaténant des constantes marqueurs avec des chaînes simples de part et d'autre, puis passez le résultat à "Code128Encoder" à la place d'un "str": from pystrich.code128 import Code128Encoder, FNC1 encoder = Code128Encoder(FNC1 + "10ABC" + FNC1 + "21XYZ") Passez "encoding="iso-8859-1"" (ou "auto_encoding=True") pour intégrer des caractères du supplément Latin-1 ; l'encodeur émet de façon transparente les décalages FNC4 de Code 128. Avec "encoding="ascii"", les anciens points de code "\xf1..\xf4" sont rejetés avec un message renvoyant vers les constantes marqueurs typées. classmethod gs1(*fields: GS1Fixed | GS1Variable) -> Code128Data Construit une charge utile GS1-128 à partir de champs d'identifiant d'application typés. Émet un "FNC1" en tête (qui signale le symbole comme GS1-128 aux lecteurs conformes) suivi de "application_identifier + value" pour chaque champ, en insérant un séparateur "FNC1" supplémentaire après chaque "GS1Variable" qui n'est pas le dernier élément. L'ASCII est imposé -- les valeurs d'identifiant d'application GS1 sont restreintes à un jeu de caractères 7 bits. Paramètres: **fields** -- Une ou plusieurs instances de "GS1Fixed" / "GS1Variable". Les chaînes simples ne sont pas acceptées ; encapsulez chaque paire identifiant d'application / valeur dans la classe de champ appropriée afin que nous sachions s'il faut la faire suivre d'un FNC1. Lève: **pystrich.exceptions.PyStrichInvalidOption** -- si "fields" est vide ou contient autre chose que les classes de champ. Ajouté dans la version 0.15. as_plain_text() -> tuple[str, EncT] Renvoie le texte concaténé et le codec permettant de l'encoder. Lève "_HasMarkers" si un segment est un marqueur brut plutôt qu'une chaîne. Pour les sous-classes sans marqueurs ("MarkerT == Never"), la vérification est sans effet. class Code128Marker(name: str) Bases : "object" Un marqueur FNC typé destiné à être inclus dans une valeur "Code128Data". Utilisez les constantes de niveau module ("FNC1", "FNC2", "FNC3") ; la concaténation avec un "str" simple ou un autre "Code128Marker" (par exemple "FNC1 + "10ABC"") construit un "Code128Data". FNC4 n'est pas exposé comme marqueur public — l'entrée Latin-1 s'obtient plutôt via "encoding="iso-8859-1"" sur "Code128Data". codeword_for_charset(charset: Literal['A', 'B', 'C']) -> int Renvoie le mot de code de ce marqueur dans "charset", ou lève une exception si le marqueur n'y est pas représentable. representable_in(charset: Literal['A', 'B', 'C']) -> bool Indique si ce marqueur peut être émis directement depuis "charset". representable_charsets() -> tuple[Literal['A', 'B', 'C'], ...] Jeux de caractères pouvant émettre ce marqueur, par ordre de préférence B → A → C. pystrich.code128.FNC1 pystrich.code128.FNC2 pystrich.code128.FNC3 Constantes de marqueurs FNC (instances de "Code128Marker"). Concaténez avec des chaînes via "+" pour construire un "Code128Data" ; "FNC1" en première position fait du symbole un GS1-128 (voir "Code128Data.gs1()" pour l'API structurée).