9. Oktober 2024
Massen-Erstellung von vCard-QR-Codes (als SVG) mit Python
Mit folgendem Python-Skript lassen sich im Handumdrehen aus einer Adress-Tabelle (.csv) vCard-QR-Codes erstellen. Da sie als SVG gespeichert werden, können sie in jeder beliebigen Größe und Farbe, z.B. auf Visitenkarten, eingesetzt werden.
Bevor du das Skript ausführen kannst, musst du ein paar Python-Bibliotheken installieren. Das geht (auf dem Mac) ganz einfach im Terminal mit dem Befehl
pip3 install pandas qrcode Pillow svgwrite
Anschließend erstellst du ein Verzeichnis, in dem du eine CSV namens „adresses.csv“ anlegst. Die erste Zeile im CSV sollte wie folgt lauten:
Vorname;Nachname;Firma/Organisation;Jobbezeichnung;Mobil;Telefon;Fax;E-Mail;Webseite;Straße und Hausnummer;PLZ;Stadt
Gefolgt von beliebig vielen Adressen.
Anschließend erstellst du die Datei „generate-qr-codes.py“:
import pandas as pd
import qrcode
import svgwrite
# Funktion zum Erstellen der vCard
def create_vcard(firstname, lastname, company, job_title, email, mobile, phone, website, street, postal_code, city):
vcard = f"""BEGIN:VCARD
VERSION:3.0
N:{lastname};{firstname};;;
FN:{firstname} {lastname}
ORG:{company if pd.notna(company) else ''}
TITLE:{job_title if pd.notna(job_title) else ''}
EMAIL;type=INTERNET;type=WORK;type=pref:{email if pd.notna(email) else ''}
TEL;type=CELL:{mobile if pd.notna(mobile) else ''}
TEL;type=WORK:{phone if pd.notna(phone) else ''}
ADR;type=WORK:;;{street if pd.notna(street) else ''};{city if pd.notna(city) else ''};{postal_code if pd.notna(postal_code) else ''};;
URL:{website if pd.notna(website) else ''}
END:VCARD"""
return vcard
# Funktion zum Speichern des QR-Codes als SVG
def save_qrcode_svg(data, filename):
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
# Größe des QR-Codes berechnen
size = len(qr.modules) * 10 # 10 ist die box_size
# SVG mit passender Größe erstellen
dwg = svgwrite.Drawing(filename, size=(size, size), profile='tiny')
# Konvertiere das QR-Code Bild zu einer Liste von Pfaden (SVG-kompatibel)
for row, line in enumerate(qr.modules):
for col, module in enumerate(line):
if module:
dwg.add(dwg.rect(insert=(col*10, row*10), size=(10, 10), fill='black'))
# Speichern der Datei
dwg.save()
# CSV-Datei einlesen
df = pd.read_csv('adresses.csv', sep=';')
# Für jede Zeile eine vCard erstellen und als QR-Code speichern
for index, row in df.iterrows():
firstname = row['Vorname']
lastname = row['Nachname']
company = row['Firma/Organisation']
job_title = row['Jobbezeichnung']
email = row['E-Mail']
mobile = row['Mobil']
phone = row['Telefon']
website = row['Webseite']
street = row['Straße und Hausnummer']
postal_code = row['PLZ']
city = row['Stadt']
# Erstellen der vCard
vcard = create_vcard(firstname, lastname, company, job_title, email, mobile, phone, website, street, postal_code, city)
# Dateiname für die SVG
filename = f"{lastname}-{firstname}.svg"
# QR-Code als SVG speichern
save_qrcode_svg(vcard, filename)
print(f"QR-Code für {firstname} {lastname} wurde gespeichert als {filename}")
Code-Sprache: PHP (php)
Diese Datei kannst du im Terminal jetzt mit folgendem Befehl ausführen:
python3 generate-qr-codes.py
Code-Sprache: CSS (css)
Das Skript erstellt jetzt aus jeder Adresse in der Tabelle einen vCard-QR-Code und speichert die Dateien als „nachname-vorname.svg“.