Rezepte ******* Gängige Muster für die Verwendung von pyStrich in realen Anwendungen. Für einmalige Erzeugung aus einer Shell siehe Kommandozeilen- Schnittstelle. Barcodes aus einer Web-Anfrage ausliefern ========================================= Jeder Encoder hat eine "get_imagedata()"-Methode, die das PNG als "bytes"-Objekt zurückgibt, geeignet zum direkten Zurückstreamen an einen Client, ohne das Dateisystem zu berühren. Mit 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") Dasselbe Muster gilt für FastAPI, Django oder jedes andere Framework -- der Encoder erzeugt rohe PNG-Bytes, die mit dem Content-Type "image/png" zurückgegeben werden können. Barcodes in großer Menge erzeugen ================================= Jeder Encoder erstellt ein frisches Symbol; es gibt keinen gemeinsamen Zustand, der zwischen Aufrufen zurückgesetzt werden müsste. Um viele Barcodes zu erzeugen, iterieren Sie über Ihre Eingaben: 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") Die Ausgabe zur Weiterverarbeitung in Pillow laden ================================================== Um einen Barcode auf eine Etikettenvorlage zu montieren, rufen Sie "get_pilimage()" auf, um direkt ein "PIL.Image.Image" zu erhalten: 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") Ausgabe im Speicher =================== Jeder Encoder hat In-Memory-Methoden sowohl für Raster- als auch für Vektorausgabe. "get_imagedata()" gibt PNG-Bytes zurück (das In-Memory- Äquivalent von "save()"); "get_svg()" gibt eine SVG-Zeichenkette zurück (das In-Memory-Äquivalent von "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 Barcodes als Data-URLs in Templates einbetten ============================================= Jeder Encoder hat die Methoden "svg_dataurl()" und "png_dataurl()" ("cellsize" für 2D, "bar_width" für 1D), die in einem Aufruf einen "data:"-URL-String zurückgeben. Registrieren Sie einen schlanken Wrapper bei Ihrer Template-Engine, um Barcodes direkt in das gerenderte HTML einzubetten. 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) Dann in einem Template: EAN-13 for {{ product.name }} QR code Django ------ Definieren Sie den Filter in einem templatetags-Modul unter "/templatetags/pystrich_filters.py" (mit einer "__init__.py" in "templatetags/", damit Django ihn erkennt): 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) Dann in einem Template: {% load pystrich_filters %} QR code for {{ product.name }} Eine Kontaktkarte codieren ========================== Ein QR-Code mit einer vCard ermöglicht es einem Telefon, das Speichern des Kontakts anzubieten. vCard ist reiner Text -- bauen Sie ihn direkt auf, mit "CRLF"-Zeilenenden: 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") [Bild: QR-Code mit einem vCard-Kontakt für Red][Bild] Tipp: Um die vCard nicht von Hand zu bauen, erzeugen Sie sie mit vobject. Einen Standort codieren ======================= Das "geo:"-URI-Schema (**RFC 5870**) trägt ein Breiten-/Längengrad- Paar, das Scanner in einer Karten-App öffnen: from pystrich.qrcode import QRCodeEncoder QRCodeEncoder("geo:37.335278,-94.302222").save("location.png") [Bild: QR-Code mit Geokoordinaten][Bild]