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/<text>")
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 :
<img src="{{ product.gtin | ean13_dataurl }}" alt="EAN-13 for {{ product.name }}">
<img src="{{ product.url | qr_dataurl }}" alt="QR code">
Django¶
Définissez le filtre dans un module templatetags à l’emplacement <app>/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 %}
<img src="{{ product.url|qr_dataurl }}" alt="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")
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")