Data Matrix *********** Data Matrix (ECC 200) est une symbologie 2D adaptée aux courtes charges utiles (*payload*), capable d'encoder jusqu'à 1558 caractères ASCII dans le plus grand symbole, de 144x144. Voir aussi: Data Matrix sur Wikipédia pour des informations générales sur la symbologie elle-même. Les codes-barres Data Matrix sont définis dans la norme ISO/IEC 16022 (Technologies de l'information -- Techniques automatiques d'identification et de capture des données -- Spécification de symbologie de code à barres Data Matrix). Exemple ======= Encapsulez l'entrée dans "DataMatrixData". Le plus simple est "auto_encoding=True", qui choisit automatiquement l'encodage le plus restreint compatible avec l'entrée. Pour maîtriser la séquence d'octets encodée -- imposer ""ascii"" pour une charge utile 7 bits (URL, identifiants, chaînes d'identifiant d'application GS1) ou exiger du Latin-1 / UTF-8 --, passez plutôt un "encoding" explicite ; voir Texte non ASCII ci-dessous. from pystrich.datamatrix import DataMatrixData, DataMatrixEncoder payload = DataMatrixData("https://github.com/mmulqueen/pyStrich", auto_encoding=True) DataMatrixEncoder(payload).save_svg("datamatrix-example.svg") [image: Data Matrix encodant l'URL GitHub de pyStrich.][image] Dimensionnement et zone de silence ================================== L'argument "cellsize" de "save()" et "get_imagedata()" définit la longueur de côté, en pixels, d'un module ("5" par défaut). L'argument "quiet_zone" de "DataMatrixEncoder" définit la largeur (en modules) de la bordure blanche appliquée au moment du rendu. La spécification Data Matrix exige au moins un module de zone de silence de chaque côté ; pyStrich utilise "2" par défaut (défini par "DATAMATRIX_DEFAULT_QUIET_ZONE"). Réduisez à "1" pour le symbole le plus compact ; augmentez si votre procédé d'impression a tendance à déborder dans la marge. Voir aussi: Impression des codes-barres pour des conseils sur le choix de "cellsize" pour une sortie imprimée. payload = DataMatrixData("https://github.com/mmulqueen/pyStrich", encoding="ascii") DataMatrixEncoder(payload).save("datamatrix-large.png", cellsize=10) [image: Data Matrix encodant l'URL GitHub de pyStrich, rendu avec cellsize=10.][image] Forme du symbole ================ Les symboles Data Matrix sont carrés par défaut, mais peuvent aussi être rectangulaires -- utile lorsqu'une bande d'étiquette est plus large que haute. L'argument "symbol_shape" de "DataMatrixEncoder" choisit entre les deux : ""square"" (par défaut) produit toujours un symbole carré, ""rectangular"" produit toujours l'une des six tailles rectangulaires (en levant une exception si la charge utile est trop longue pour la plus grande d'entre elles), et ""auto"" retient le symbole compatible dont l'aire est la plus petite. payload = DataMatrixData("A1268172415", encoding="ascii") DataMatrixEncoder(payload, symbol_shape="rectangular").save_svg("datamatrix-rectangular.svg") [image: Data Matrix rectangulaire encodant le numéro de pièce A1268172415.][image] Ajouté dans la version 0.17. 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). 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 ) Le "viewBox" du SVG est exprimé en unités de module, tandis que "width" et "height" sont mis à l'échelle par "cellsize". Le mot-clé "mark_shape" choisit la façon dont les cellules marquées sont dessinées -- des suites horizontales de rectangles (par défaut) ou un cercle plein par cellule. Note: Les cellules circulaires sortent de la forme de module standard et la prise en charge par les décodeurs varie. Testez avec votre lecteur cible avant tout déploiement. 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. payload = DataMatrixData("https://github.com/mmulqueen/pyStrich", encoding="ascii") DataMatrixEncoder(payload).save("datamatrix.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). payload = DataMatrixData("https://github.com/mmulqueen/pyStrich", encoding="ascii") DataMatrixEncoder(payload).save_eps("datamatrix.eps") L'argument "cellsize" est la longueur de côté d'un module en points PostScript (1 point = 1/72 de pouce). Ajouté dans la version 0.12. Sortie terminal --------------- Pour un affichage rapide à l'écran, "get_terminal_art()" renvoie un rendu lisible par un lecteur de codes-barres à l'aide de demi-blocs Unicode. Chaque caractère représente deux lignes de la matrice et une colonne, de sorte que les cellules apparaissent à peu près carrées dans une police à chasse fixe classique de terminal. print(DataMatrixEncoder(payload).get_terminal_art()) █▄▀ █ █▄█▄█ █▄▀▄█ █ █▄▀▄ █ ▀ ▀ █▄ █▀█ ▀ █▀ █▀ ▄ ██ █▄█ ▄█ █▄ █▄█ ▀ ▄▄█▄ ██▀▄▀██▀█ ▀▀▀██▀ ▄▄▄ █▄▄ ██▀▄▄▀█▄▀█▄█▄██▄▀███▀▄█▄ █▄ ▄█ ██ █▄█▀█▄▀ █▀▀▀▄ █▀ ▄ ▄██ ▄▀██▀▀█▄▄ ▄ ▀▄ ██ █▀█ █▀█▀▀▀▄█▄▀ █ ▄ ▄ █▀▀▄▄▀▄▀▀▄ ▄▀ ▄▀▄ ▀▀▄▄▄ █ ▀▄▄▀█▀▀▀▀▀▀ █▀ █▄▄█ ▄ █▄█▄▄▄▀▄▀ ▀ ▄ ▄▄█▀▀ ▀▄▀▄ █████▄▄██▄▄██▄█▄█████▄█▄ Par défaut, la sortie est encadrée par des codes d'échappement ANSI qui imposent un fond blanc et un premier plan noir, afin que le symbole se lise quel que soit le thème de couleurs du terminal. Passez "ansi_bg=False" pour une sortie simple (correcte uniquement sur un terminal à thème clair). Ajouté dans la version 0.12. Sortie DXF (CAO) ---------------- Pour les applications de marquage direct des pièces (*direct part marking*) -- où le symbole est gravé ou marqué au laser sur une pièce physique --, "get_dxf()" renvoie une représentation DXF du symbole. Le DXF est le format de fichier lu par les outils de CAO et de FAO ; la sortie peut être transmise directement à l'outil de gravure ou de marquage. Le "cellsize" est exprimé dans vos "units" choisies (""mm"" par défaut) plutôt qu'en pixels. 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")) Par défaut, "inverse=True" émet la géométrie des modules clairs, y compris la zone de silence -- de sorte que la boîte englobante (*bounding box*) encadre le symbole. Passez "inverse=False" pour n'émettre que les modules sombres, ce qui correspond à l'apparence normale du symbole ; la boîte englobante épouse alors les cellules sombres et la zone de silence doit être réintroduite en aval. Voir aussi: SAE AS9132B -- norme de qualité aéronautique/défense pour les marques Data Matrix appliquées aux pièces métalliques ; publiée en Europe sous le nom de NF EN 9132 (Série aérospatiale -- Exigences qualité du marquage des pièces en code-barres Data Matrix). GS1 / FNC1 ========== Voir aussi: GS1 DataMatrix Guideline -- la référence faisant autorité pour le choix des identifiants d'application, les règles d'encodage et les exigences de qualité d'impression du GS1 Data Matrix. Le GS1 Data Matrix utilise un mot de code FNC1 en première position pour signaler que la charge utile est une suite d'identifiants d'application GS1, puis de nouveau comme séparateur après tout identifiant d'application de longueur variable qui n'est pas le dernier élément du message. "DataMatrixData.gs1()" construit la charge utile à partir d'enveloppes de champ typées et gère automatiquement le placement des séparateurs. Encapsulez chaque paire identifiant d'application / valeur dans "GS1Fixed" pour les identifiants d'application dont la longueur de données est fixe, ou "GS1Variable" sinon : 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") [image: GS1 Data Matrix encodant (01) GTIN 05050070007664.][image] Une charge utile pharmaceutique ou de dispositif médical typique combine un GTIN avec une date de péremption et un numéro de lot. "(01)" et "(17)" sont de longueur fixe, donc "GS1Fixed" les déclare ; "(10)" est de longueur variable, donc "GS1Variable" le porte. Les GS1 General Specifications recommandent de placer les identifiants d'application de longueur variable en dernier -- positionner "(10)" à la fin du message évite tout séparateur FNC1 entre les champs : payload = DataMatrixData.gs1( GS1Fixed("01", "09501234543213"), GS1Fixed("17", "261231"), GS1Variable("10", "BF07"), ) DataMatrixEncoder(payload).save("gs1-multi-fixed.png") [image: GS1 Data Matrix encodant (01) GTIN 09501234543213, (17) péremption 261231, (10) lot BF07.][image] Lorsqu'un identifiant d'application de longueur variable n'est pas le dernier champ, le séparateur FNC1 est inséré automatiquement : payload = DataMatrixData.gs1( GS1Variable("10", "BF07"), GS1Variable("21", "19890519"), ) DataMatrixEncoder(payload).save("gs1-multi.png") [image: GS1 Data Matrix encodant (10) lot BF07 et (21) numéro de série 19890519 séparés par FNC1.][image] Pour un contrôle total du flux de mots de code, passez "FNC1" et les chaînes brutes identifiant d'application / valeur directement à "DataMatrixData" -- c'est ce que fait "gs1()" en interne : from pystrich.datamatrix import DataMatrixData, FNC1 payload = DataMatrixData(FNC1, "10BF07", FNC1, "2119890519", encoding="ascii") Note: Les charges utiles GS1 Data Matrix doivent être en ASCII -- les GS1 General Specifications restreignent les valeurs d'identifiant d'application à un jeu de caractères 7 bits (essentiellement l'ASCII). "gs1()" impose ""ascii"" ; lorsque vous placez FNC1 vous- même, ne le combinez pas avec des encodages non ASCII. Obsolète depuis la version 0.11: L'ancien code déclenchait FNC1 en préfixant la charge utile par "chr(231)" -- à l'origine un bogue de cette bibliothèque sur lequel des utilisateurs en aval ont fini par compter (voir issue #13). Le correctif de compatibilité fonctionne toujours mais émet un "Fnc1WorkaroundCompatWarning". Le nouveau code devrait utiliser "gs1()" (ou "FNC1" pour l'approche bas niveau). Texte non ASCII =============== Le jeu de mots de code ASCII de Data Matrix ne couvre que les octets 0-127. Pour encoder quoi que ce soit en dehors de cette plage dans un symbole non GS1, encapsulez l'entrée dans "DataMatrixData" et soit passez "auto_encoding=True" (le constructeur choisit pour vous l'encodage le plus restreint compatible), soit précisez un encodage explicitement : +------------------+---------------------------------------------------------------------+ | Encodage | Comportement | |==================|=====================================================================| | ""ascii"" | Lève "PyStrichInvalidInput" pour tout octet > 127. | +------------------+---------------------------------------------------------------------+ | ""iso-8859-1"" | Latin-1 -- le jeu de caractères par défaut de Data Matrix selon | | | l'ISO/IEC 16022. Les octets 128-255 sont émis via le mot de code | | | Upper Shift (235) ; aucun préfixe ECI n'est requis et les décodeurs | | | conformes détectent l'encodage automatiquement. | +------------------+---------------------------------------------------------------------+ | ""utf-8"" | Déclare ECI 26 une fois au début du symbole et encode l'entrée | | | octet par octet. Les décodeurs conformes détectent l'encodage | | | automatiquement. | +------------------+---------------------------------------------------------------------+ | ""compat"" | Mode permissif hérité. Les caractères non ASCII émettent | | | "DataMatrixNonAsciiWarning" et produisent une sortie qui ne se | | | décodera pas correctement. Obsolète ; choisissez plutôt l'un des | | | modes ci-dessus. | +------------------+---------------------------------------------------------------------+ Astuce: Pour le symbole le plus compact, préférez l'encodage le plus restrictif qui convient à vos données : ""ascii"" d'abord, puis ""iso-8859-1"", puis ""utf-8"". Chaque étape ajoute une surcharge -- le Latin-1 consomme un mot de code supplémentaire par octet supérieur à 127, et l'UTF-8 ajoute un préfixe ECI de deux mots de code et émet des séquences multi-octets pour tout ce qui sort de l'ASCII. "auto_encoding=True" fait le même choix pour vous si vous préférez ne pas choisir à la main. 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") [image: Data Matrix encodant « Ich dachte, Sie wären kräftiger » en Latin-1.][image] # UTF-8: required for anything outside Latin-1 (€, CJK, emoji). DataMatrixEncoder(DataMatrixData("€5 親切にしろ 🐻‍❄️", encoding="utf-8")).save("utf8.png") [image: Data Matrix encodant « €5 親切にしろ 🐻‍❄️ » en UTF-8 (ECI 26).][image] Si vous passez une chaîne avec le mauvais encodage, l'erreur levée suggère l'encodage qui *aurait* fonctionné : >>> 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. Modes d'encodage ================ pyStrich prend en charge les modes d'encodage suivants : ASCII/octets (avec appariement des chiffres), Text, C40 et X12. Le mode Base 256 n'est pas pris en charge pour le moment. En raison de doutes sur la prise en charge par les décodeurs/lecteurs, nous avons décidé de ne pas implémenter EDIFACT.[1] [1] Certains lecteurs Honeywell décodent tous les autres modes Data Matrix mais pas EDIFACT. Voir l'article de support Honeywell. Anatomie ======== Chaque région Data Matrix est construite à partir des trois mêmes éléments. Les tailles de 10x10 à 26x26 utilisent une seule région ; les tailles plus grandes répètent la région selon une grille 2x2, 4x4 ou 6x6. Le schéma ci-dessous annote un symbole ECC 200 de 36x36 (2x2 régions de 16x16). [image: Data Matrix 36x36 annoté montrant la bordure en L pleine, le motif de synchronisation, la zone de données et la zone de silence sur quatre régions.][image] * **Bordure en L pleine** (*solid L finder*) -- deux bords pleins (à gauche et en bas de chaque région) qui identifient la taille et l'orientation du symbole. * **Motif de synchronisation** (*timing pattern*) -- les deux bords opposés de chaque région (en haut et à droite), alternant cellules sombres et claires pour que le lecteur puisse compter les modules à travers la région. * **Zone de données** (*data area*) -- tout ce qui se trouve à l'intérieur des bords en L et de synchronisation de la région : les *mots de code* encodés plus la correction d'erreurs *Reed-Solomon*, reportés sur les cellules par l'algorithme de placement ECC 200. * **Zone de silence** (*quiet zone*) -- marge blanche autour du symbole ; la spécification exige au moins un module, et pyStrich en utilise deux par défaut. 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"] Encode du texte sous forme de code-barres 2D Data Matrix (ECC 200). La taille de la matrice est choisie automatiquement en fonction de la longueur de l'entrée. Encapsulez l'entrée dans "DataMatrixData" et passez un "encoding" explicite parmi ""ascii"", ""iso-8859-1"" ou ""utf-8"" — ou passez "auto_encoding=True" pour laisser le constructeur choisir l'encodage le plus restreint qui convient. Pour produire un GS1 Data Matrix, préfixez la charge utile par le marqueur "FNC1". Utilisation typique: encoder = DataMatrixEncoder(DataMatrixData("Hallo", encoding="ascii")) encoder.save("hallo.png") # Or, let DataMatrixData pick the encoding: encoder = DataMatrixEncoder(DataMatrixData("Rausschmeißer", auto_encoding=True)) Une entrée "str" simple est également acceptée mais se rabat sur l'encodage obsolète ""compat"", qui signale les octets non ASCII et produit une sortie qui ne se décode pas correctement. Le nouveau code devrait toujours encapsuler l'entrée dans "DataMatrixData". Variables: * **matrix** -- Liste 2D d'entiers ("0"/"1", ou "None" pour les cellules non définies) décrivant le symbole avant le rendu. * **regions** -- "(h_regions, v_regions)" — le nombre de régions en lesquelles le symbole est divisé horizontalement et verticalement. * **quiet_zone** -- Largeur, en modules, de la bordure blanche appliquée au moment du rendu. * **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_ascii() -> str Renvoie un rendu en art ASCII du symbole. Type renvoyé: 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 Renvoie une représentation DXF (CAO) du symbole. Paramètres: * **cellsize** -- Longueur de côté d'un module en "units". * **inverse** -- Si "True" (par défaut), les modules clairs sont dessinés comme des cellules pleines. Si "False", ce sont les modules sombres qui sont dessinés, ce qui correspond à l'apparence normale du symbole. * **units** -- L'une des valeurs ""in"", ""ft"", ""mi"", ""mm"", ""cm"" ou ""m"", ou "None" pour « non spécifié » ("$INSUNITS=0"). * **mark_shape** -- Comment les cellules marquées sont groupées et dessinées. Type renvoyé: str Ajouté dans la version 0.9. Modifié dans la version 0.12: "units" prend désormais en charge ""in"", ""ft"", ""mi"", ""cm"", ""m"" et "None" (non spécifié) ; auparavant, toute valeur autre que ""mm"" était silencieusement traitée comme non spécifiée. 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 Génère le symbole et renvoie le balisage EPS. Paramètres: * **cellsize** -- Longueur de côté d'un module en points PostScript. * **inverse** -- Si "True", marque les cellules claires au lieu des sombres. * **mark_shape** -- Comment les cellules marquées sont groupées et dessinées. * **dark_hex** -- Couleur des modules sombres, 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(cellsize: int = 5, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> bytes Génère le symbole et renvoie les octets PNG. Paramètres: * **cellsize** -- Longueur de côté d'un module en pixels. * **dark_hex** -- Couleur des modules sombres, 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(cellsize: int = 5, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> PILImage Génère le symbole et renvoie une image Pillow. Paramètres: * **cellsize** -- Longueur de côté d'un module en pixels. * **dark_hex** -- Couleur des modules sombres, 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 symbole 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(*, inverse: bool = False, mark_shape: MarkShape = MarkShape.HORIZONTAL_RUNS) -> SymbolMarks Renvoie les cellules sombres du symbole sous forme de rectangles en unités de module. Paramètres: * **inverse** -- Si "True", marque les cellules claires au lieu des sombres. * **mark_shape** -- Comment les cellules marquées sont groupées et dessinées. Type renvoyé: pystrich.marks.SymbolMarks Ajouté dans la version 0.18. 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 Génère le symbole et renvoie le balisage SVG. Paramètres: * **cellsize** -- Longueur de côté d'un module en unités utilisateur. * **inverse** -- Si "True", marque les cellules claires au lieu des sombres. * **mark_shape** -- Comment les cellules marquées sont groupées et dessinées. * **dark_hex** -- Couleur des modules sombres, 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". get_terminal_art(*, ansi_bg: bool = True) -> str Génère le symbole à l'aide de demi-blocs Unicode pour les terminaux. Chaque caractère représente deux lignes de la matrice et une colonne, produisant des cellules à peu près carrées dans une police à chasse fixe classique et donnant un résultat lisible par un lecteur de codes-barres à l'écran. Paramètres: **ansi_bg** -- Si "True" (par défaut), encadre chaque ligne de codes d'échappement ANSI qui imposent un fond blanc et un premier plan noir, rendant le symbole lisible quel que soit le thème de couleurs du terminal. Mettez à "False" pour une sortie simple (correcte uniquement sur un terminal à thème clair). Type renvoyé: str Ajouté dans la version 0.12. png_dataurl(cellsize: int = 5, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> str Génère le symbole et renvoie une chaîne d'URL "data:" PNG. Paramètres: * **cellsize** -- Longueur de côté d'un module en pixels. * **dark_hex** -- Couleur des modules sombres, 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], cellsize: int = 5, *, dark_hex: str | RGBA | None = None, light_hex: str | RGBA | None = None) -> None Enregistre le symbole en PNG. Passez un nom de fichier ".png". Paramètres: * **filename** -- Chemin de sortie PNG. * **cellsize** -- Longueur de côté d'un module en pixels. * **dark_hex** -- Couleur des modules sombres, 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], 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 Enregistre le symbole dans un fichier EPS. Passez un nom de fichier ".eps". Paramètres: * **filename** -- Chemin de sortie EPS. * **cellsize** -- Longueur de côté d'un module en points PostScript. * **inverse** -- Si "True", marque les cellules claires au lieu des sombres. * **mark_shape** -- Comment les cellules marquées sont groupées et dessinées. * **dark_hex** -- Couleur des modules sombres, 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], 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 Enregistre le symbole dans un fichier SVG. Passez un nom de fichier ".svg". Paramètres: * **filename** -- Chemin de sortie SVG. * **cellsize** -- Longueur de côté d'un module en unités utilisateur. * **inverse** -- Si "True", marque les cellules claires au lieu des sombres. * **mark_shape** -- Comment les cellules marquées sont groupées et dessinées. * **dark_hex** -- Couleur des modules sombres, 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(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 Génère le symbole et renvoie une chaîne d'URL "data:" SVG. Paramètres: * **cellsize** -- Longueur de côté d'un module en unités utilisateur. * **inverse** -- Si "True", marque les cellules claires au lieu des sombres. * **mark_shape** -- Comment les cellules marquées sont groupées et dessinées. * **dark_hex** -- Couleur des modules sombres, 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". init_renderer() -> DataMatrixRenderer Construit un "DataMatrixRenderer" pour la matrice encodée. Met à jour "width" et "height" avec les dimensions en pixels du moteur de rendu et renvoie ce dernier. 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"] Entrée d'encodeur composable mêlant des fragments de texte et des marqueurs de mots de code bruts. Construisez les valeurs en concaténant des constantes marqueurs (par exemple "FNC1") avec des chaînes simples de part et d'autre, puis passez le résultat à "DataMatrixEncoder" à la place d'un "str". La construction nécessite soit un "encoding=" explicite (l'un de ""ascii"", ""iso-8859-1"", ""utf-8"" ou l'ancien ""compat""), soit "auto_encoding=True". Avec "auto_encoding=True", le constructeur choisit le plus restreint de "ascii", "iso-8859-1", "utf-8" qui représente chaque segment ; tout argument "encoding=" passé conjointement est ignoré. ""compat"" est une option d'initialisation uniquement -- elle déclenche l'ancienne transformation de mot de code ASCII+1 puis est stockée comme ""ascii"", de sorte que "encoding" est toujours l'un des trois jeux de caractères concrets après construction. Après construction, "segments" est normalisé : les segments str consécutifs sont fusionnés, les str vides sont supprimés, et (pour ""compat"") chaque point de code dont le bit de poids fort est activé est remplacé par un "DataMatrixCodeword" portant l'ancienne valeur "ord + 1". L'encodeur ne voit donc jamais que des str purement encodables entrelacées avec des marqueurs de mots de code bruts. Ajouté dans la version 0.11. Modifié dans la version 0.12: Les appelants doivent désormais passer soit un "encoding=" explicite, soit "auto_encoding=True". Ajout de l'option "auto_encoding". Obsolète depuis la version 0.11: L'encodage ""compat"" n'est conservé que pour la rétrocompatibilité et sera supprimé dans une prochaine version. Le nouveau code devrait choisir ""ascii"", ""iso-8859-1"" ou ""utf-8"" explicitement, ou utiliser "auto_encoding=True". classmethod gs1(*fields: GS1Fixed | GS1Variable) -> DataMatrixData Construit une charge utile GS1 Data Matrix à partir de champs d'identifiant d'application typés. Émet un "FNC1" en tête (qui signale le symbole comme GS1 Data Matrix 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 GS1 General Specifications restreignent les valeurs d'identifiant d'application à 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 DataMatrixCodeword(value: int) Bases : "object" Une valeur littérale de mot de code DataMatrix à émettre telle quelle. La concaténation avec un "str" simple ou un autre mot de code (par exemple "FNC1 + "..."") est l'approche d'API moderne et produit un "DataMatrixData" marqué avec l'encodage strict ""ascii"". La concaténation avec un "DataMatrixData" existant préserve plutôt l'encodage de cet objet. Ajouté dans la version 0.11. pystrich.datamatrix.FNC1 Le marqueur GS1 FNC1 (mot de code Data Matrix 232). Une instance de "DataMatrixCodeword" ; concaténez avec des chaînes via "+" pour construire une charge utile GS1. Ajouté dans la version 0.11.