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")
Code-barres Code 128 encodant « WDBCA45D2HA327260 ».

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")
Code-barres GS1-128 encodant (01) GTIN 09501234543213, (17) péremption 261231, (10) lot BF07.

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")
Code-barres Code 128 encodant « Rausschmeißer » via des décalages FNC4 Latin-1.

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)
Code-barres Code 128 encodant « WDBCA45D2HA327260 » avec une image plus haute et un libellé plus grand.

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")
Code-barres Code 128 SVG encodant « WDBCA45D2HA327260 ».

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)[source]

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[source]

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[source]

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).