Über Web, Tech, Games, Art,
Musik, Code & Design

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.pyCode-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“.


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert