--- name: pptx-infrago description: > Erstellt PowerPoint-Präsentationen (.pptx) im DB InfraGO Corporate Design mit Python. Nutzt den offiziellen DB InfraGO Folienmaster (31 Layouts) und ein Helper-Modul. Nutze diesen Skill wenn der User eine PowerPoint-Datei, .pptx, Foliensatz oder Vortrag als PowerPoint-Datei (nicht HTML) erstellen möchte. Keywords: PowerPoint, PPTX, Folien, Foliensatz, Vortrag, Folienmaster, python-pptx, Master. compatibility: > Benötigt Python 3.10+ mit python-pptx (>=1.0). DB-Rechner empfohlen für DB-Schriften (DB Neo Office Head / DB Neo Office). Kein Internet nötig — Vorlage und Bilder liegen im Skill. metadata: version: "1.3.0" author: "Uwe Sülter" theme: "DB InfraGO Folienmaster (offiziell)" template: "InfraGo_master_vorlage.pptx" --- # PowerPoint-Präsentationen im DB InfraGO Folienmaster Self-contained Skill für `.pptx`-Dateien. Die offizielle Vorlage `InfraGo_master_vorlage.pptx` und das Helper-Modul `db_infrago_pptx.py` liegen direkt im Skill-Ordner unter `assets/`. **Grundprinzip:** Der Skill schreibt nicht selbst Folien-Geometrie, sondern nutzt die 31 fertigen Layouts des offiziellen Folienmasters. Pro Layout gibt es eine Funktion im Helper-Modul. Logo, Footer-Slot, Foliennummer und Farben werden vom Master geerbt — Python befüllt nur die Platzhalter (Footer und Foliennummer werden technisch aus dem Layout in die Slide geklont, weil python-pptx das nicht von selbst tut). ## Ablauf ### Schritt 1: Infos sammeln ALLE 6 Punkte MÜSSEN geklärt sein bevor es weitergeht. Auch wenn das Thema offensichtlich scheint — Zielgruppe und Umfang IMMER nachfragen, NIEMALS selbst annehmen. **Name ermitteln (Fallback-Kette):** 1. Steerings/Kontext prüfen — steht der Name schon im geladenen Kontext (z.B. kiro-umgebung.md)? 2. `git config user.name` ausführen 3. Wenn beides fehlschlägt: User fragen 1. **Thema** — Worum geht es? 2. **Zielgruppe** — Für wen? (Devs, POs, Management, Fachbereich?) 3. **Umfang** — Wie viele Folien / wie lang? 4. **Footer** — Default: "DB InfraGO AG | [Name] | [Team] | [Jahr]" 5. **Ablageort** — Wo soll die `.pptx`-Datei hin? 6. **Klassifizierung** — Welche Vertraulichkeitsstufe? Erlaubte Werte: - `"DB Offen / DB Open"` — für öffentlich teilbare Inhalte - `"DB Intern / DB internal"` — für konzerninterne Inhalte (häufigster Fall) - `"DB Vertraulich / DB confidential"` — für vertrauliche Inhalte - `""` (leer) — keine Klassifizierung anzeigen **WICHTIG:** Dieser Skill darf NUR für die Stufen "DB Offen", "DB Intern" und "DB Vertraulich" verwendet werden. Für höhere Stufen (z.B. "DB Streng Vertraulich") ist die automatische Erstellung von Präsentationen NICHT zulässig — den User darauf hinweisen und ablehnen. Nachfrage-Template — IMMER komplett zeigen, KEINE Felder weglassen: ``` Bevor ich loslege, brauche ich noch ein paar Infos: - **Thema:** [fehlt/vorhanden] - **Zielgruppe:** [fehlt/vorhanden] - **Umfang:** [fehlt/vorhanden] - **Footer:** DB InfraGO AG | [git user.name] | [Team?] | [Jahr] - **Ablageort:** [fehlt/vorhanden] - **Klassifizierung:** [fehlt] — Erlaubt: "DB Offen / DB Open", "DB Intern / DB internal", "DB Vertraulich / DB confidential", oder leer (keine Anzeige). ⚠️ Dieser Skill darf nur für DB Offen, DB Intern und DB Vertraulich genutzt werden. Optional: - Hintergrundbild für die Titelfolie? (Ich schlage selbst ein passendes Bild aus den 10 mitgelieferten Bildern vor — basierend auf dem Thema. Du kannst das Vorgeschlagene bestätigen, ein anderes wählen oder einen eigenen Pfad angeben.) - Bestimmte Inhalte die rein müssen? (Tabellen, Zitate, Statements, Bild-Folien?) ``` WICHTIG: NIEMALS "Laut Skill muss ich..." oder "Der Skill verlangt..." sagen. Natürlich kommunizieren. ### Schritt 2: Hintergrundbild für Titelfolie auswählen Ohne dass der User explizit ein Bild nennt: Schau ins Thema und schlage GENAU EIN Bild aus `BACKGROUND_IMAGES` vor (siehe `assets/db_infrago_pptx.py` oder [references/asset-katalog.md](references/asset-katalog.md)). Sag dem User welches Bild und warum. Beispielzuordnungen: - Architektur, Datenflüsse, Migration → `datenstroeme` - Innovation, neue Konzepte, Ideen → `gluehbirne` - Strategie, Vision, Digitalisierung → `weltkugel` oder `digital_transformation` - Infrastruktur, Bahnbetrieb, Wartung → `gleisarbeiter` - Performance, Geschwindigkeit, Go-Live → `ice_bahnsteig` - Teamwork, Onboarding, Integration → `puzzle` - Demos, Abnahme, Qualitätssicherung → `laptop_checkmark` - Daten, Code, Netzwerk → `binaercode` - Neutral / kein klares Thema → `ice_line` (ICE-Silhouette mit Sand→Türkis Gradient) ### Schritt 3: Gliederung vorschlagen Folien-Struktur als Markdown-Liste vorschlagen, jeweils mit dem Layout-Funktionsnamen in Klammern. Beispiel: ``` 1. Titelfolie (add_titel_bild_schwarz mit "datenstroeme") 2. Agenda (add_inhaltsverzeichnis_weiss) 3. Ausgangslage (add_titel_und_inhalt) 4. Lösung (add_titel_und_2_inhalte) 5. Beispiel (add_text_und_bild_links) 6. Statement (add_statement_rot) 7. Ausblick (add_titel_und_inhalt) 8. Schluss (add_ende_bild mit "ice_bahnsteig") ``` Auf Bestätigung warten, BEVOR Code geschrieben wird. ### Schritt 4: Python-Skript generieren **Pfadberechnung:** Das Helper-Modul `db_infrago_pptx.py` und die Vorlage liegen im Skill-Ordner. Python kann daraus importieren wenn der Skill-Ordner im `sys.path` ist oder das Modul kopiert wird. **Empfohlener Ansatz:** Im generierten Skript am Anfang den Skill-Ordner zum `sys.path` hinzufügen — dann kein Kopieren, immer auf der aktuellen Helper-Version. `SKILL_DIR` zeigt auf den `assets/`-Ordner deiner Skill-Installation: - Windows (user-level): `C:\Users\\.kiro\skills\pptx-infrago\assets` - Windows (workspace): `\.kiro\skills\pptx-infrago\assets` - macOS / Linux (user-level): `~/.kiro/skills/pptx-infrago/assets` - macOS / Linux (workspace): `/.kiro/skills/pptx-infrago/assets` ```python # -*- coding: utf-8 -*- import sys from pathlib import Path # Skill-Ordner zum sys.path hinzufügen — Pfad an deine Installation anpassen SKILL_DIR = Path.home() / ".kiro" / "skills" / "pptx-infrago" / "assets" sys.path.insert(0, str(SKILL_DIR)) from db_infrago_pptx import ( open_deck, save, add_notes, background_image_path, add_titel_bild_schwarz, add_inhaltsverzeichnis_weiss, add_titel_und_inhalt, add_titel_und_2_inhalte, add_text_und_bild_links, add_statement_rot, add_ende_bild, ) FOOTER = "DB InfraGO AG | Max Mustermann | Team | 2026" KLASSIFIZIERUNG = "DB Intern / DB internal" # oder "" wenn keine Anzeige gewünscht prs = open_deck() # Folie 1: Titel mit Hintergrundbild slide = add_titel_bild_schwarz( prs, titel="Mein Thema", untertitel="Untertitel der Präsentation", bild=background_image_path("datenstroeme"), kategorie="Strategie", footer=FOOTER, klassifizierung=KLASSIFIZIERUNG, ) add_notes(slide, "Begrüßung, Vorstellung des Themas, Motivation.") # Folie 2: Agenda add_inhaltsverzeichnis_weiss( prs, titel="Agenda", eintraege=["Ausgangslage", "Lösung", "Beispiel", "Statement", "Ausblick"], footer=FOOTER, klassifizierung=KLASSIFIZIERUNG, ) # … weitere Folien … # Folie n: Schluss add_ende_bild(prs, titel="Vielen Dank.", bild=background_image_path("ice_bahnsteig")) out = save(prs, r"C:\BA\projekt\folien.pptx") print(f"Datei erzeugt: {out}") ``` **Dateiname:** `YYYY-MM-DD_thema-kebab-case.py` für das Skript, `YYYY-MM-DD_thema-kebab-case.pptx` als Output. **Speaker Notes:** Für jeden Inhalts-Slide Speaker-Notes via `add_notes(slide, "...")` schreiben. Notes enthalten Stichpunkte für den Vortragenden — Details die nicht auf den Slide passen, Erklärungen, Überleitung zur nächsten Folie. **Schreibstrategie:** - fsWrite für Header + Imports + erste 1–2 Folien (max ~50 Zeilen) - fsAppend in Blöcken à max 40 Zeilen - Letzter fsAppend: Schlussfolie + `save()`-Aufruf - Anzahl der Blöcke vorher abschätzen - NIEMALS die Datei komplett neu schreiben weil ein Append fehlschlug — gezielt mit strReplace patchen ### Schritt 5: Skript ausführen und PPTX öffnen — IN DERSELBEN ANTWORT Direkt nach dem letzten fsAppend (mit `save()`) — OHNE vorher "fertig" zu sagen: 1. **Skript ausführen:** `python C:\BA\{Ablageort}\{Dateiname}.py` 2. **Datei öffnen:** `Invoke-Item "C:\BA\{Ablageort}\{Dateiname}.pptx"` — einfach machen, nicht nachfragen. 3. **Kurzer Hinweis:** Dem User mitteilen, was generiert wurde und wie er die Datei nachbearbeiten kann (PowerPoint öffnet automatisch). ## Slide-Funktionen Übersicht Volle API-Doku siehe [references/slide-typen.md](references/slide-typen.md). Mapping Layout-Index → Funktion siehe [references/layout-katalog.md](references/layout-katalog.md). | Anlass | Funktion | |---|---| | Titel mit Bild | `add_titel_bild_schwarz` / `_weiss` | | Titel im Rahmen | `add_titel_rahmen` | | Agenda / Inhaltsverzeichnis | `add_inhaltsverzeichnis_weiss` / `_rot` / `_bild_*` | | Kapiteltrenner | `add_kapiteltrenner_weiss` / `_bild_*` | | Standard-Inhaltsfolie | `add_titel_und_inhalt` | | Zwei-Spalten-Inhalt | `add_titel_und_2_inhalte` | | Text + Bild | `add_text_und_bild_links` / `_rechts` | | Vollbild mit Titelzeile | `add_bild_mit_titel_schwarz` / `_weiss` | | Nur Titel (für eigenes Layout) | `add_nur_titel` / `_grau` | | Komplett leer | `add_leer` | | Aussage groß | `add_statement_rot` / `_weiss` | | Zitat | `add_zitat_rot` / `_weiss` | | Schlussfolie Bild | `add_ende_bild` | | Schlussfolie Rot | `add_ende_rot` | | Schlussfolie Logo | `add_ende_logo` | | Bild-Agenda | `add_bild_agenda` | | **Tabelle (Türkis-Header)** | `add_tabelle` | | **Daten und Fakten (Kennzahl groß)** | `add_daten_und_fakten` | | **Zeitstrahl (n Stationen)** | `add_zeitstrahl` | | **Prozessablauf (n Schritte)** | `add_prozessablauf` | | **Piktogramm einfügen** | `add_pictogram` (86 Icons aus DB-Master) | ## Kreative Folien — wenn die Templates nicht reichen Die 31 Layouts decken die häufigsten Fälle ab, sind aber ausdrücklich KEIN Korsett. Für Diagramme, eigene Skizzen, freie Visualisierungen, Roadmaps, BPMN-Skizzen, Architektur-Bilder usw. gibt es zwei Layouts, die genau dafür gemacht sind: | Funktion | Was du bekommst | Wann | |---|---|---| | `add_nur_titel(prs, titel, footer)` | Folientitel oben + komplett freier Inhaltsbereich | Diagramme mit Titelzeile | | `add_nur_titel_grau(prs, titel, footer)` | Wie oben, aber grauer Hintergrund | Visuelle Abgrenzung im Foliensatz | | `add_leer(prs, footer)` | Komplett freie Folie (nur Footer-Slot) | Vollbild-Visualisierung, eigene Header-Position | Auf diesen Folien gilt: alles ist erlaubt. Logo, Foliennummer und Footer werden vom Master geerbt — du sparst dir nur die starre Bullet-Liste. Typische Erweiterungen mit `python-pptx`: ```python from pptx.util import Cm, Pt from pptx.enum.shapes import MSO_SHAPE, MSO_CONNECTOR from pptx.dml.color import RGBColor from db_infrago_pptx import add_nur_titel, DB_TURQUOISE_500, DB_RED FOOTER = "DB InfraGO AG | Max Mustermann | Team | 2026" slide = add_nur_titel(prs, "Architektur-Skizze", FOOTER) # Box box = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, Cm(2), Cm(4), Cm(8), Cm(3)) box.fill.solid(); box.fill.fore_color.rgb = DB_TURQUOISE_500 box.text_frame.text = "Frontend" # Pfeil zwischen Boxen conn = slide.shapes.add_connector(MSO_CONNECTOR.STRAIGHT, Cm(10), Cm(5.5), Cm(14), Cm(5.5)) conn.line.color.rgb = DB_RED # Eigenes Bild slide.shapes.add_picture(r"C:\diagramme\flow.png", left=Cm(2), top=Cm(8), width=Cm(20)) # Freies Textfeld tb = slide.shapes.add_textbox(Cm(2), Cm(15), Cm(20), Cm(2)) tb.text_frame.text = "Hinweis: Skizze, kein finales Design." ``` Mehr Beispiele und Patterns: [references/slide-typen.md](references/slide-typen.md) unter „Kreative Folien". **Wichtig bei kreativen Folien:** - DB-Farbpalette nutzen (`DB_TURQUOISE_500`, `DB_RED`, `DB_SAND` usw. aus dem Helper) - Maße in `Cm()` oder `Emu()` — nicht in Pixeln - Folie ist 33.87 × 19.05 cm groß - Master-Elemente nicht überdecken (Logo oben rechts, Footer unten) ## Hintergrundbilder (10 Stück) Verwendung: ```python from db_infrago_pptx import background_image_path add_titel_bild_weiss(prs, "Titel", bild=background_image_path("datenstroeme")) ``` Verfügbare Keys: `ice_line`, `laptop_checkmark`, `datenstroeme`, `gleisarbeiter`, `weltkugel`, `ice_bahnsteig`, `gluehbirne`, `puzzle`, `digital_transformation`, `binaercode`. Details in [references/asset-katalog.md](references/asset-katalog.md). User kann auch eigene Bilder per Pfad angeben (statt `background_image_path("...")` einfach `r"C:\pfad\zu\bild.jpg"`). ## Piktogrammbibliothek (86 SVG-Icons) Aus dem DB InfraGO Master extrahiert — alle als monochrome SVG-Vektoren, die zur Laufzeit in jede DB-Farbe eingefärbt werden können (Türkis, Rot, Schwarz, Weiß). PowerPoint 2016+ rendert SVGs nativ — die Icons bleiben gestochen scharf bei jeder Größe. ```python from db_infrago_pptx import add_pictogram, list_pictograms, DB_TURQUOISE_500, DB_RED from pptx.util import Cm # Auf einer "Nur Titel"-Folie 4 Icons mit Beschriftung platzieren slide = add_nur_titel(prs, "Vorteile", footer=FOOTER) add_pictogram(slide, "haekchen", Cm(2), Cm(7), Cm(4), color=DB_TURQUOISE_500) add_pictogram(slide, "uhr", Cm(9), Cm(7), Cm(4), color=DB_TURQUOISE_500) add_pictogram(slide, "datenbank", Cm(16), Cm(7), Cm(4), color=DB_TURQUOISE_500) add_pictogram(slide, "puzzleteile", Cm(23), Cm(7), Cm(4), color=DB_TURQUOISE_500) # Verfügbare Keys auflisten for key, descr in list_pictograms(): print(f" {key:30s} {descr}") ``` **Häufige Keys** (sortiert nach Anwendung): - Bestätigung: `haekchen`, `volltreffer`, `pruefliste`, `klemmbrett` - Negation: `schliessen`, `verbotsschild`, `nicht_zulaessig` - Daten: `datenbank`, `cloud`, `cloudcomputing`, `balkendiagramm`, `flussdiagramm`, `verzweigungsdiagramm`, `abwaertstrend-diagramm` - Kommunikation: `chat`, `chatblase`, `e-mail`, `kommentar_like`, `kommentar_herz` - Zeit: `uhr`, `tageskalender`, `flip-kalender` - Aktionen: `wiedergabe`, `aktualisieren`, `herunterladen`, `uebertragen` - Pfeile: `pfeil_nach_oben`, `pfeil_nach_unten`, `pfeil_nach_rechts`, `pfeil_kreis`, diverse Drehpfeile - Sonstiges: `puzzleteile`, `handschlag`, `aktenkoffer`, `lupe`, `informationen`, `hilfe`, `fragezeichen`, `ausrufezeichen`, `management`, `vertrag`, `gehaltsabrechnung`, `geschichte`, `blockchain`, `computer`, `browserfenster` Vollständige Liste mit `list_pictograms()` oder direkt aus `PICTOGRAMS.keys()`. **Farb-Override** ist optional — ohne `color`-Parameter bleibt das Icon in der SVG-Default-Farbe (meist schwarz). Empfehlung für CI-konforme Slides: `DB_TURQUOISE_500` als Akzent oder `DB_BLACK` für neutralen Look. ## Design-Guide (DB InfraGO) Siehe [references/ci-referenz.md](references/ci-referenz.md). Wichtigste Regeln: - Folienmaster nicht überschreiben — er bringt Logo, Footer-Slot, Foliennummer und Farben automatisch mit. - Schriften: `DB Neo Office Head` (Überschriften) und `DB Neo Office` (Fließtext) — auf DB-Rechnern installiert. Der Helper setzt diese explizit, damit sie nicht über System-Defaults wie Calibri ersetzt werden. - DB Rot (#EC0016) = Akzentfarbe (Logo, Highlights), NICHT Hauptfarbe. - Primärfarben: Türkis (#006E6B / #00A099) + Sand (#FCE3BA). - Schriftfarbe: nur Schwarz oder Weiß. - Max 5–7 Bullets pro Folie, max 2 Sätze pro Bullet (besser: Stichworte). - Eine Kernaussage pro Folie — nicht mehrere Themen mischen. - Tabellen: max 5–6 Zeilen sichtbar, sonst aufteilen. - Speaker Notes für Details nutzen. - Jede Folie muss in 30–60 Sekunden erfassbar sein. - 3-Akt-Struktur: Eröffnung → Hauptteil mit Trennern → Abschluss. - NIEMALS nur Vorname im Footer — immer "DB InfraGO AG | Vollständiger Name | Team | Jahr". ## Voraussetzungen `python-pptx` muss installiert sein: ```powershell pip install python-pptx ``` ## Referenz-Dateien - [references/layout-katalog.md](references/layout-katalog.md) — alle 31 Layouts mit Index, Name, Platzhaltern, Geometrie - [references/slide-typen.md](references/slide-typen.md) — Funktions-API mit Code-Beispielen - [references/asset-katalog.md](references/asset-katalog.md) — Hintergrundbilder mit Empfehlungen - [references/ci-referenz.md](references/ci-referenz.md) — Farben, Schriften, CI-Regeln