Recettes ******** Schémas courants d'utilisation de pyStrich dans des applications réelles. Vous trouverez d'autres exemples d'utilisation de pyStrich dans notre dépôt. Pour une génération ponctuelle depuis un shell, voir Interface en ligne de commande. Servir des codes-barres en réponse à une requête web ==================================================== Chaque encodeur possède une méthode "get_imagedata()" qui renvoie le PNG sous forme d'objet "bytes", prêt à être renvoyé en flux directement à un client sans toucher au système de fichiers. Avec Flask : from flask import Flask, Response from pystrich.code39 import Code39Encoder app = Flask(__name__) @app.route("/barcode/") def barcode(text): encoder = Code39Encoder(text) return Response(encoder.get_imagedata(), mimetype="image/png") Le même schéma s'applique à FastAPI, Django ou tout autre framework -- l'encodeur produit des octets PNG bruts qui peuvent être renvoyés avec le type de contenu "image/png". Générer des codes-barres en masse ================================= Chaque encodeur construit un symbole neuf ; il n'y a aucun état partagé à réinitialiser entre les appels. Pour générer de nombreux codes-barres, itérez sur vos entrées : from pathlib import Path from pystrich.code128 import Code128Encoder out = Path("labels") out.mkdir(exist_ok=True) for sku in ["A1266470501", "A1268206342", "A0001513255"]: Code128Encoder(sku).save(out / f"{sku}.png") Charger la sortie dans Pillow pour un traitement ultérieur ========================================================== Pour composer un code-barres sur un modèle d'étiquette, appelez "get_pilimage()" pour obtenir directement une "PIL.Image.Image" : from PIL import Image from pystrich.datamatrix import DataMatrixData, DataMatrixEncoder payload = DataMatrixData("EMMETT", encoding="ascii") barcode = DataMatrixEncoder(payload).get_pilimage(cellsize=8) label = Image.new("RGB", (400, 200), "white") label.paste(barcode, (20, 20)) label.save("label.png") Sortie en mémoire ================= Chaque encodeur dispose de méthodes en mémoire, matricielles et vectorielles. "get_imagedata()" renvoie des octets PNG (l'équivalent en mémoire de "save()") ; "get_svg()" renvoie une chaîne SVG (l'équivalent en mémoire de "save_svg()"). from pystrich.qrcode import QRCodeEncoder encoder = QRCodeEncoder('{"institution": "New York University", "major": "Philosophy"}') png_data = encoder.get_imagedata() # bytes -- attach to an email, store in a database svg_markup = encoder.get_svg() # str -- embed directly in an HTML response Intégrer des codes-barres sous forme d'URL data dans des gabarits ================================================================= Chaque encodeur possède des méthodes "svg_dataurl()" et "png_dataurl()" ("cellsize" en 2D, "bar_width" en 1D) qui renvoient une chaîne d'URL "data:" en un seul appel. Enregistrez un léger adaptateur auprès de votre moteur de gabarits pour intégrer les codes- barres directement dans le HTML rendu. Flask / Jinja2 -------------- from flask import Flask from pystrich.ean13 import EAN13Encoder from pystrich.qrcode import QRCodeEncoder app = Flask(__name__) @app.template_filter("ean13_dataurl") def ean13_dataurl(code): return EAN13Encoder(code).svg_dataurl() @app.template_filter("qr_dataurl") def qr_dataurl(text): return QRCodeEncoder(text).svg_dataurl(cellsize=4) Puis dans un gabarit : EAN-13 for {{ product.name }} QR code Django ------ Définissez le filtre dans un module templatetags à l'emplacement "/templatetags/pystrich_filters.py" (avec un "__init__.py" dans "templatetags/" pour que Django le détecte) : from django import template from django.template.defaultfilters import stringfilter from pystrich.qrcode import QRCodeEncoder register = template.Library() @register.filter @stringfilter def qr_dataurl(text): return QRCodeEncoder(text, ecl="H").svg_dataurl(cellsize=8) Puis dans un gabarit : {% load pystrich_filters %} QR code for {{ product.name }} Encoder une carte de visite =========================== Un QR code contenant une vCard permet à un téléphone de proposer d'enregistrer le contact. La vCard est du texte brut -- construisez-la directement, avec des fins de ligne "CRLF" : from pystrich.qrcode import QRCodeEncoder vcard = ( "BEGIN:VCARD\r\n" "VERSION:3.0\r\n" "FN:Red\r\n" "TEL:+14175550142\r\n" "END:VCARD\r\n" ) QRCodeEncoder(vcard).save("red.png") [image: QR code contenant une fiche de contact vCard pour Red][image] Astuce: Pour éviter de construire la vCard à la main, générez-la avec vobject. Encoder un lieu =============== Le schéma d'URI "geo:" (**RFC 5870**) porte un couple latitude/longitude que les lecteurs ouvrent dans une application de cartographie : from pystrich.qrcode import QRCodeEncoder QRCodeEncoder("geo:37.335278,-94.302222").save("location.png") [image: QR code contenant des coordonnées géographiques][image]