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")
QR code contenant une fiche de contact vCard pour Red

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")
QR code contenant des coordonnées géographiques