Migrate all repos into monorepo context folders
Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)
Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# Asset-Katalog: Hintergrundbilder und Empfehlungen
|
||||
|
||||
Alle Hintergrundbilder liegen im Skill-Ordner unter `assets/`. Im Helper-Modul gibt es
|
||||
das Dict `BACKGROUND_IMAGES` mit Beschreibung und Empfehlungen.
|
||||
|
||||
## Verwendung
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import background_image_path
|
||||
add_titel_bild_weiss(prs, "Titel", bild=background_image_path("datenstroeme"))
|
||||
```
|
||||
|
||||
Eigene Bilder gehen genauso, einfach den Pfad statt des Helper-Aufrufs:
|
||||
```python
|
||||
add_titel_bild_schwarz(prs, "Titel", bild=r"C:\eigene\bilder\titel.jpg")
|
||||
```
|
||||
|
||||
## Bilder mit Empfehlungen
|
||||
|
||||
| Key | Datei | Motiv | Passt zu |
|
||||
|---|---|---|---|
|
||||
| `ice_line` | Ice_line_background.png | Sand→Türkis Gradient mit ICE-Silhouette und Netzplan-Linien | Titelfolien, Trenner, Schluss, neutrale Themen |
|
||||
| `laptop_checkmark` | bg-laptop-checkmark.jpeg | Mann am Laptop mit leuchtendem türkisen Checkmark, digitale Schaltkreise | Demos, Abnahme, Ergebnisse, Qualitätssicherung, Freigabe |
|
||||
| `datenstroeme` | bg-datenstroeme-blau.jpeg | Blaue Datenströme in dunklem Raum, digitale Autobahn | Architektur, Datenflüsse, Schnittstellen, Performance, Migration |
|
||||
| `gleisarbeiter` | bg-gleisarbeiter-bruecke.jpeg | Gleisarbeiter mit Funkenflug auf Brücke, ICE und Regionalzüge | Infrastruktur, Wartung, Betrieb, Hands-on, Kapitel-Trenner |
|
||||
| `weltkugel` | bg-weltkugel-hologramm.jpeg | Holografische Weltkugel mit Digital-Transformation-Icons | Strategie, Vision, Digitalisierung, Transformation |
|
||||
| `ice_bahnsteig` | bg-ice-bahnsteig.jpeg | ICE rast durch Bahnhof, Bewegungsunschärfe, Sonnenuntergang | Geschwindigkeit, Performance, Go-Live, Meilensteine, Dynamik |
|
||||
| `gluehbirne` | bg-gluehbirne-innovation.jpeg | Glühbirne mit orangenem Netzwerk auf dunkler Platine | Innovation, Konzepte, Brainstorming, Ideen, Kreativität |
|
||||
| `puzzle` | bg-puzzle-teamwork.jpeg | Vier Hände halten Puzzleteile zusammen, Stadt-Doppelbelichtung | Teamwork, Integration, Zusammenarbeit, Onboarding |
|
||||
| `digital_transformation` | bg-digital-transformation.jpeg | Mann tippt auf Glas-Panel mit Tech-Icons (Cloud, Chip, Roboterarm) | Digitalisierung, Transformation, Technologie-Bausteine, Strategie |
|
||||
| `binaercode` | bg-binaercode-netzwerk.jpeg | Weiße Nullen/Einsen über blauem Netzwerk-Drahtgitter | Daten, Code, Technologie, Migration, Netzwerk |
|
||||
|
||||
## Auswahl-Heuristik für die Titelfolie
|
||||
|
||||
Wenn der User keinen Bild-Wunsch nennt, schlage GENAU EIN Bild vor — nicht „eines von
|
||||
diesen drei", sondern konkret. Die Auswahl folgt dem Thema:
|
||||
|
||||
| Thema enthält Stichwort … | Schlage vor |
|
||||
|---|---|
|
||||
| Architektur, Datenfluss, Migration, Schnittstelle | `datenstroeme` |
|
||||
| Innovation, Konzept, Idee, Brainstorming | `gluehbirne` |
|
||||
| Strategie, Vision, Roadmap (high-level) | `weltkugel` |
|
||||
| Digitalisierung, Transformation, Technologie | `digital_transformation` |
|
||||
| Bahnbetrieb, Infrastruktur, Wartung, Hands-on | `gleisarbeiter` |
|
||||
| Performance, Go-Live, Meilenstein, Geschwindigkeit | `ice_bahnsteig` |
|
||||
| Teamwork, Onboarding, Integration, Stakeholder | `puzzle` |
|
||||
| Demo, Abnahme, Qualität, Freigabe, Test | `laptop_checkmark` |
|
||||
| Daten, Code, Netzwerk (technisch) | `binaercode` |
|
||||
| Allgemein / Status / Update / nicht klar | `ice_line` |
|
||||
|
||||
Beispiel-Begründung im Chat: „Für ein Status-Update zur O2C-Migration nehme ich
|
||||
`datenstroeme` als Titelbild — passt zum Thema Datenflüsse und Architektur."
|
||||
|
||||
## Eingebettete Master-Icons
|
||||
|
||||
Die Vorlage enthält 86 SVG-Piktogramme aus der DB-Bibliothek (Slide 24
|
||||
„Piktogrammbibliothek"). Sie sind über `add_pictogram()` direkt verwendbar und liegen
|
||||
unter `assets/pictograms/`.
|
||||
|
||||
Beispiel:
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_pictogram, list_pictograms, DB_TURQUOISE_500
|
||||
from pptx.util import Cm
|
||||
|
||||
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)
|
||||
|
||||
# Alle 86 Keys auflisten
|
||||
for key, descr in list_pictograms():
|
||||
print(f" {key:30s} {descr}")
|
||||
```
|
||||
|
||||
PowerPoint 2016+ rendert SVGs nativ — die Icons skalieren verlustfrei. Über den
|
||||
`color`-Parameter kannst du sie in jede DB-Farbe einfärben (siehe
|
||||
[references/slide-typen.md](slide-typen.md) Abschnitt „Piktogramme" für die volle
|
||||
Doku und alle Keys gruppiert nach Anwendung).
|
||||
|
||||
## Eigene Icons einbinden
|
||||
|
||||
Wenn du Icons brauchst, die nicht in der Bibliothek sind: lege sie als externe Datei ab
|
||||
und nutze `slide.shapes.add_picture(path, left, top, width, height)`. Empfohlene
|
||||
Formate: PNG mit transparentem Hintergrund oder SVG (PowerPoint 2016+ rendert SVG).
|
||||
@@ -0,0 +1,111 @@
|
||||
# CI-Referenz: DB InfraGO Folienmaster
|
||||
|
||||
Quelle: `theme1.xml` aus dem offiziellen Folienmaster.
|
||||
|
||||
## Farben
|
||||
|
||||
Definiert im Helper-Modul als `RGBColor`-Konstanten — direkt importierbar:
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import (
|
||||
DB_RED, DB_RED_DARK,
|
||||
DB_TURQUOISE_500, DB_TURQUOISE_700, DB_TURQUOISE_300, DB_TURQUOISE_100,
|
||||
DB_SAND, DB_DARK, DB_GRAY_LIGHT, DB_GRAY_MED, DB_BLACK, DB_WHITE,
|
||||
)
|
||||
```
|
||||
|
||||
| Konstante | Hex | Verwendung |
|
||||
|---|---|---|
|
||||
| `DB_RED` | `#EC0016` | Logo, Akzente, Highlights — NICHT als Hauptfarbe |
|
||||
| `DB_RED_DARK` | `#9B000E` | Hover/Pressed-Varianten, dunkle Rot-Akzente |
|
||||
| `DB_TURQUOISE_700` | `#006E6B` | Tabellen-Header, dunkle Akzente |
|
||||
| `DB_TURQUOISE_500` | `#00A099` | Primärakzent Türkis |
|
||||
| `DB_TURQUOISE_300` | `#83CACA` | Helle Türkis-Flächen |
|
||||
| `DB_TURQUOISE_100` | `#E3F5F4` | Türkis-Hintergrund (sehr hell) |
|
||||
| `DB_SAND` | `#FCE3BA` | Sand-Akzent |
|
||||
| `DB_DARK` | `#3C414B` | Dunkler Hintergrund (Folien-BG) |
|
||||
| `DB_GRAY_LIGHT` | `#F0F3F5` | Heller Hintergrund |
|
||||
| `DB_GRAY_MED` | `#AFB4BB` | Linien, Trenner |
|
||||
| `DB_BLACK` / `DB_WHITE` | — | Schriftfarbe |
|
||||
|
||||
Volle DB-Palette (ebenfalls im theme1.xml definiert, falls du sie brauchst):
|
||||
- Yellow: `FFD800` (500), Orange: `F39200`, Red: `EC0016`
|
||||
- Burgundy: `A9455D`, Pink: `E93E8F`, Violet: `814997`
|
||||
- Blue: `1455C0`, Cyan: `309FD1`, Turquoise: `00A099`, Green: `408335`
|
||||
- Light Green: `63A615`, Warm Grey: `858379`
|
||||
|
||||
Jede Farbe gibt's in den Schattierungen 100/300/500/700.
|
||||
|
||||
## Schriften
|
||||
|
||||
- **Überschriften (major):** DB Neo Office Head
|
||||
- **Fließtext (minor):** DB Neo Office
|
||||
|
||||
Diese Schriften sind nur auf DB-Rechnern verfügbar. Der Helper setzt sie explizit auf
|
||||
jeden Run — sonst würde python-pptx sie weglassen und PowerPoint auf System-Defaults
|
||||
wie Calibri zurückfallen. Auf Nicht-DB-Rechnern zeigt PowerPoint einen Fallback an,
|
||||
beim Öffnen auf einem DB-Rechner werden die korrekten Schriften aufgelöst.
|
||||
|
||||
Konstanten im Helper:
|
||||
- `DB_FONT_HEADING = "DB Neo Office Head"`
|
||||
- `DB_FONT_BODY = "DB Neo Office"`
|
||||
|
||||
## Folienformat
|
||||
|
||||
- Größe: 33.87 × 19.05 cm (16:9, 12192000 × 6858000 EMU)
|
||||
- Logo wird vom Master eingefügt (oben rechts) — nicht selbst zeichnen
|
||||
- Footer-Slot ist im Master vorgesehen (unten links) — über den Footer-Platzhalter
|
||||
jeder Layout-Funktion befüllen
|
||||
- Foliennummer (unten rechts) wird automatisch durch den Master gesetzt
|
||||
|
||||
## Design-Regeln (Master-konform)
|
||||
|
||||
### Setzen — was der Master leistet
|
||||
|
||||
- Logo (DB Rot oben rechts) — automatisch via Master
|
||||
- Foliennummer — automatisch
|
||||
- Layout-spezifische Hintergrundfarben/-bilder — über Layout-Auswahl
|
||||
- Schrift, Bullet-Style, Farbschema — vom Theme
|
||||
|
||||
### Nicht setzen — was vermieden werden sollte
|
||||
|
||||
- Kein eigenes Logo platzieren
|
||||
- Keine eigenen Farb-Hintergründe für Standard-Folien (Layout 14 etc.) — der Master
|
||||
bestimmt das
|
||||
- Keine eigenen Bullet-Zeichen — die Templates haben Türkis-Striche definiert
|
||||
- Keine Schrift überschreiben (Größe und Farbe nur in Ausnahmen)
|
||||
|
||||
### Inhalt
|
||||
|
||||
- DB Rot ist Akzent, nicht Hauptfarbe
|
||||
- Schriftfarbe: Schwarz auf hell, Weiß auf dunkel/farbig
|
||||
- Aufzählungszeichen: vom Theme (Türkis-Strich)
|
||||
- Tabellen-Header: Türkis 700 (`DB_TURQUOISE_700`)
|
||||
- Keine Farbverläufe, keine bunte Schrift
|
||||
- Max 5–7 Bullets pro Folie, max 2 Sätze pro Bullet (besser: Stichworte)
|
||||
- Schriftgröße nicht unter 14pt für Body-Text
|
||||
- Eine Kernaussage pro Folie
|
||||
- 30–60 Sekunden Erfassbarkeit
|
||||
- Speaker-Notes für Details (`add_notes(slide, "...")`)
|
||||
|
||||
### Footer-Konvention
|
||||
|
||||
```
|
||||
DB InfraGO AG | Vollständiger Name | Team | Jahr
|
||||
```
|
||||
|
||||
NIEMALS nur Vorname. NIEMALS abgekürzte Teamnamen ohne Kontext. Wenn das Team
|
||||
unbekannt ist: User fragen.
|
||||
|
||||
## Sektionsstruktur (3-Akt)
|
||||
|
||||
Der Folienmaster hat im `presentation.xml` folgende offizielle Sektionen vordefiniert:
|
||||
|
||||
1. **Präsentationsfolien** — Titel + Untertitel
|
||||
2. **Inhaltsverzeichnis** — Agenda
|
||||
3. **Inhaltsfolien** — Hauptteil
|
||||
4. **Grafische und kreativere Folien** — Statements, Zitate, Bilder
|
||||
5. **Trenner- und Abschlussfolie** — Kapiteltrenner, Ende
|
||||
|
||||
Nach diesem Aufbau strukturieren — gibt automatisch eine ordentliche 3-Akt-Struktur
|
||||
mit Eröffnung, Hauptteil und Abschluss.
|
||||
@@ -0,0 +1,185 @@
|
||||
# Layout-Katalog: DB InfraGO Folienmaster
|
||||
|
||||
Quelle: `assets/InfraGo_master_vorlage.pptx`. Slide-Größe 33.87 × 19.05 cm (16:9).
|
||||
|
||||
Alle 31 Layouts mit Index, Name, Helper-Funktion und Platzhaltern.
|
||||
Maße: `(left, top) width × height` in cm. Index = `placeholder_format.idx`.
|
||||
|
||||
## Titel-Layouts (0–6)
|
||||
|
||||
### Layout 2 — Titel (Bild, Logo Schwarz)
|
||||
Funktion: `add_titel_bild_schwarz(prs, titel, untertitel="", bild=None, kategorie="", footer="")`
|
||||
|
||||
| idx | Typ | Inhalt |
|
||||
|----:|--------------|-----------------------|
|
||||
| 0 | TITLE | Titel |
|
||||
| 1 | SUBTITLE | Untertitel |
|
||||
| 15 | PICTURE | Hintergrundbild |
|
||||
| 18 | BODY | Kategorie / Tagline |
|
||||
| 11 | FOOTER | Footer |
|
||||
| 12 | SLIDE_NUMBER | Foliennummer (auto) |
|
||||
|
||||
### Layout 3 — Titel (Bild, Logo Weiß)
|
||||
Funktion: `add_titel_bild_weiss(prs, titel, untertitel="", bild=None, kategorie="", footer="")`
|
||||
Wie Layout 2, Logo erscheint weiß.
|
||||
|
||||
### Layout 6 — Titel (Rahmen)
|
||||
Funktion: `add_titel_rahmen(prs, titel, untertitel="", bild=None, kategorie="", footer="")`
|
||||
Titel im Rahmen über Vollbild. Visueller Hingucker für Highlights.
|
||||
|
||||
| idx | Typ | Inhalt |
|
||||
|----:|--------------|-----------------------|
|
||||
| 0 | TITLE | Titel |
|
||||
| 1 | SUBTITLE | Untertitel |
|
||||
| 15 | PICTURE | Hintergrundbild |
|
||||
| 18 | BODY | Kategorie / Tagline |
|
||||
| 11 | FOOTER | Footer |
|
||||
| 12 | SLIDE_NUMBER | Foliennummer (auto) |
|
||||
|
||||
## Inhaltsverzeichnis-Layouts (7–10)
|
||||
|
||||
### Layout 7 — Inhaltsverzeichnis (Weiß)
|
||||
Funktion: `add_inhaltsverzeichnis_weiss(prs, titel, eintraege, footer="")`
|
||||
|
||||
| idx | Typ | Inhalt |
|
||||
|----:|---------------|-----------------------|
|
||||
| 0 | TITLE | Titel ("Agenda") |
|
||||
| 19 | BODY | Liste der Einträge |
|
||||
| 20 | FOOTER | Footer |
|
||||
| 12 | SLIDE_NUMBER | Foliennummer (auto) |
|
||||
|
||||
### Layout 8 — Inhaltsverzeichnis (Rot)
|
||||
Funktion: `add_inhaltsverzeichnis_rot(prs, titel, eintraege, footer="")`
|
||||
Roter Hintergrund. Footer ist hier idx=11.
|
||||
|
||||
### Layout 9 — Inhaltsverzeichnis (Bild, Logo Schwarz)
|
||||
Funktion: `add_inhaltsverzeichnis_bild_schwarz(prs, titel, eintraege, bild=None, kategorie="", footer="")`
|
||||
Zusätzlich Bild-Platzhalter idx=15 und Kategorie idx=18.
|
||||
|
||||
### Layout 10 — Inhaltsverzeichnis (Bild, Logo Weiß)
|
||||
Funktion: `add_inhaltsverzeichnis_bild_weiss(...)`
|
||||
Wie Layout 9, Logo weiß.
|
||||
|
||||
## Kapiteltrenner (11–13)
|
||||
|
||||
### Layout 11 — Kapiteltrenner (Weiß)
|
||||
Funktion: `add_kapiteltrenner_weiss(prs, titel, untertitel="", footer="")`
|
||||
|
||||
| idx | Typ | Inhalt |
|
||||
|----:|--------------|-----------------------|
|
||||
| 0 | TITLE | Kapitel-Titel |
|
||||
| 14 | BODY | Untertitel/Erklärung |
|
||||
| 11 | FOOTER | Footer |
|
||||
|
||||
### Layout 12 — Kapiteltrenner (Bild, Logo Schwarz)
|
||||
Funktion: `add_kapiteltrenner_bild_schwarz(prs, titel, untertitel="", bild=None, kategorie="", footer="")`
|
||||
Zusätzlich Bild idx=17, Kategorie idx=18.
|
||||
|
||||
### Layout 13 — Kapiteltrenner (Bild, Logo Weiß)
|
||||
Funktion: `add_kapiteltrenner_bild_weiss(...)`
|
||||
|
||||
## Inhaltsfolien (14–22)
|
||||
|
||||
### Layout 14 — Titel und Inhalt (DEFAULT für Inhaltsfolien)
|
||||
Funktion: `add_titel_und_inhalt(prs, titel, bullets, levels=None, footer="")`
|
||||
|
||||
| idx | Typ | Inhalt |
|
||||
|----:|--------------|-------------------------------------|
|
||||
| 0 | TITLE | Folientitel |
|
||||
| 13 | OBJECT | Bullet-Liste (oder beliebiger Text) |
|
||||
| 11 | FOOTER | Footer |
|
||||
|
||||
`levels=[0, 0, 1, 1, 0]` für mehrstufige Listen (0 = Hauptpunkt, 1 = Unterpunkt).
|
||||
|
||||
### Layout 15 — Titel und 2 Inhalte
|
||||
Funktion: `add_titel_und_2_inhalte(prs, titel, bullets_links, bullets_rechts, footer="")`
|
||||
Zwei OBJECT-Platzhalter idx=14 (links) und idx=15 (rechts).
|
||||
|
||||
### Layout 16 — Text und Bild (links)
|
||||
Funktion: `add_text_und_bild_links(prs, titel, bullets, bild=None, footer="")`
|
||||
Bild-Platzhalter idx=15 (links unten), Text idx=16 (rechts).
|
||||
|
||||
### Layout 17 — Text und Bild (rechts)
|
||||
Funktion: `add_text_und_bild_rechts(prs, titel, bullets, bild=None, footer="")`
|
||||
Spiegelversion: Bild rechts, Text links.
|
||||
|
||||
### Layout 18 — Bild mit Titel (Logo Schwarz)
|
||||
Funktion: `add_bild_mit_titel_schwarz(prs, titel, bild=None, kategorie="", footer="")`
|
||||
Vollbild mit oben durchgehender Titelzeile.
|
||||
|
||||
### Layout 19 — Bild mit Titel (Logo Weiß)
|
||||
Funktion: `add_bild_mit_titel_weiss(...)`
|
||||
|
||||
### Layout 20 — Nur Titel
|
||||
Funktion: `add_nur_titel(prs, titel, footer="")`
|
||||
Leeres Inhaltsfeld zum freien Bestücken.
|
||||
|
||||
### Layout 21 — Nur Titel (Grau)
|
||||
Funktion: `add_nur_titel_grau(prs, titel, footer="")`
|
||||
Variante mit grauem Hintergrund.
|
||||
|
||||
### Layout 22 — Leer
|
||||
Funktion: `add_leer(prs, footer="")`
|
||||
Komplett leer (nur Footer-Slot). Für eigenes Layout mit `slide.shapes.add_*`.
|
||||
|
||||
## Statement / Zitat (23–26)
|
||||
|
||||
### Layout 23 — Statement (Logo Rot)
|
||||
Funktion: `add_statement_rot(prs, titel, statement, bild=None, kategorie="", footer="")`
|
||||
Großer Aussage-Text mittig (idx=19).
|
||||
|
||||
### Layout 24 — Statement (Logo Weiß)
|
||||
Funktion: `add_statement_weiss(...)`
|
||||
|
||||
### Layout 25 — Zitat (Logo Rot)
|
||||
Funktion: `add_zitat_rot(prs, zitat, autor="", kategorie="", footer="")`
|
||||
|
||||
| idx | Typ | Inhalt |
|
||||
|----:|--------------|-----------------------|
|
||||
| 0 | TITLE | Zitat (groß) |
|
||||
| 14 | BODY | Autor |
|
||||
| 18 | BODY | Kategorie / Tagline |
|
||||
| 11 | FOOTER | Footer |
|
||||
|
||||
### Layout 26 — Zitat (Logo Weiß)
|
||||
Funktion: `add_zitat_weiss(...)`
|
||||
Gleiche Platzhalter wie Layout 25, Logo erscheint weiß.
|
||||
|
||||
## Schluss / Spezial (27–30)
|
||||
|
||||
### Layout 27 — Ende (Bild)
|
||||
Funktion: `add_ende_bild(prs, titel="Vielen Dank.", bild=None)`
|
||||
|
||||
### Layout 28 — Ende (Rot)
|
||||
Funktion: `add_ende_rot(prs, titel="Vielen Dank.")`
|
||||
|
||||
### Layout 29 — Bild_Agenda
|
||||
Funktion: `add_bild_agenda(prs, titel, kategorie="", footer="")`
|
||||
Spezial für bildgeprägte Agenda-Folien.
|
||||
|
||||
### Layout 30 — Ende (Logo)
|
||||
Funktion: `add_ende_logo(prs, text="")`
|
||||
Schlussfolie mit zentrierter Logo-Darstellung.
|
||||
|
||||
| idx | Typ | Inhalt |
|
||||
|----:|--------------|-----------------------------------|
|
||||
| 18 | BODY | Optionaler Text (z. B. Kontakt) |
|
||||
|
||||
Hinweis: Diese Schlussfolie hat KEINEN Footer- und KEINEN Foliennummer-Slot —
|
||||
das ist Layout-Default für Schlussfolien (Layouts 27, 28, 30).
|
||||
|
||||
## Schnell-Referenz: Welcher Index für welchen Inhaltstyp?
|
||||
|
||||
| idx-Bereich | Bedeutung im Master |
|
||||
|-------------|--------------------------------------------------|
|
||||
| 0 | Titel (TITLE oder CENTER_TITLE) |
|
||||
| 1 | Untertitel |
|
||||
| 10–12 | Footer / Sub-Decorations |
|
||||
| 11 | FOOTER (sichtbarer Footer) |
|
||||
| 12 | SLIDE_NUMBER (auto) |
|
||||
| 13–16 | Haupt-Content (OBJECT, BODY, PICTURE) |
|
||||
| 17 | Hintergrundbild bei Trennern |
|
||||
| 18, 20 | Kategorie / Tagline |
|
||||
| 19 | Statement-Text / Inhaltsverzeichnis-Liste |
|
||||
|
||||
Bei Unsicherheit: Skript ausführen, das `prs.slide_layouts[i].placeholders` durchgeht.
|
||||
@@ -0,0 +1,686 @@
|
||||
# Slide-Typen mit Code-Beispielen
|
||||
|
||||
Alle Funktionen aus `db_infrago_pptx`. Importiere nur was du brauchst.
|
||||
|
||||
## Setup
|
||||
|
||||
`SKILL_DIR` zeigt auf den `assets/`-Ordner deiner Skill-Installation. Pfad an deine
|
||||
Plattform anpassen:
|
||||
|
||||
- Windows (user-level): `C:\Users\<dein-username>\.kiro\skills\pptx-infrago\assets`
|
||||
- Windows (workspace): `<projekt>\.kiro\skills\pptx-infrago\assets`
|
||||
- macOS / Linux (user-level): `~/.kiro/skills/pptx-infrago/assets`
|
||||
- macOS / Linux (workspace): `<projekt>/.kiro/skills/pptx-infrago/assets`
|
||||
|
||||
```python
|
||||
import sys
|
||||
from pathlib import Path
|
||||
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
|
||||
|
||||
prs = open_deck()
|
||||
FOOTER = "DB InfraGO AG | Max Mustermann | Team | 2026"
|
||||
```
|
||||
|
||||
## Titel-Folien
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import (
|
||||
add_titel_bild_schwarz,
|
||||
add_titel_bild_weiss, add_titel_rahmen,
|
||||
)
|
||||
|
||||
# Mit Hintergrundbild (Logo Schwarz) — der häufigste Fall
|
||||
add_titel_bild_schwarz(
|
||||
prs,
|
||||
titel="Cloud Migration",
|
||||
untertitel="Migration der O2C-Systeme auf CNP",
|
||||
bild=background_image_path("datenstroeme"),
|
||||
kategorie="Architektur",
|
||||
footer=FOOTER,
|
||||
)
|
||||
|
||||
# Mit Hintergrundbild (Logo Weiß) — für dunkle Bilder
|
||||
add_titel_bild_weiss(
|
||||
prs,
|
||||
titel="Digitale Transformation",
|
||||
untertitel="Unsere Roadmap 2026",
|
||||
bild=background_image_path("weltkugel"),
|
||||
kategorie="Strategie",
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
## Inhaltsverzeichnis (Agenda)
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_inhaltsverzeichnis_weiss, add_inhaltsverzeichnis_bild_schwarz
|
||||
|
||||
add_inhaltsverzeichnis_weiss(
|
||||
prs,
|
||||
titel="Agenda",
|
||||
eintraege=[
|
||||
"Ausgangslage",
|
||||
"Lösungsansatz",
|
||||
"Beispiel anhand O2C",
|
||||
"Risiken & Maßnahmen",
|
||||
"Ausblick",
|
||||
],
|
||||
footer=FOOTER,
|
||||
)
|
||||
|
||||
# Mit Bild
|
||||
add_inhaltsverzeichnis_bild_schwarz(
|
||||
prs,
|
||||
titel="Agenda",
|
||||
eintraege=["Punkt 1", "Punkt 2", "Punkt 3"],
|
||||
bild=background_image_path("ice_line"),
|
||||
kategorie="Q2 Update",
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
## Kapiteltrenner
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_kapiteltrenner_weiss, add_kapiteltrenner_bild_weiss
|
||||
|
||||
add_kapiteltrenner_weiss(
|
||||
prs,
|
||||
titel="2. Lösungsansatz",
|
||||
untertitel="Wie wir das Problem angehen",
|
||||
footer=FOOTER,
|
||||
)
|
||||
|
||||
add_kapiteltrenner_bild_weiss(
|
||||
prs,
|
||||
titel="3. Roadmap",
|
||||
untertitel="Meilensteine bis Ende 2026",
|
||||
bild=background_image_path("ice_bahnsteig"),
|
||||
kategorie="Plan",
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
## Standard-Inhaltsfolie
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_titel_und_inhalt, add_notes
|
||||
|
||||
slide = add_titel_und_inhalt(
|
||||
prs,
|
||||
titel="Ausgangslage",
|
||||
bullets=[
|
||||
"Bestehende O2C-Systeme sind verteilt auf 4 Plattformen",
|
||||
"Datenredundanz erschwert Konsolidierung",
|
||||
"Migration auf CNP läuft seit Q4 2025",
|
||||
"Erste Komponenten produktiv",
|
||||
],
|
||||
footer=FOOTER,
|
||||
)
|
||||
add_notes(slide, """
|
||||
Hier den Kontext erklären: Wo kommen wir her, was war der Auslöser.
|
||||
Bei Punkt 4 das Beispiel CRM-Modul nennen, das seit März läuft.
|
||||
Überleitung: 'Daraus ergibt sich folgender Lösungsansatz…'
|
||||
""")
|
||||
```
|
||||
|
||||
### Mehrstufige Bullets
|
||||
|
||||
```python
|
||||
add_titel_und_inhalt(
|
||||
prs,
|
||||
titel="Architektur-Komponenten",
|
||||
bullets=[
|
||||
"Frontend",
|
||||
"React 18",
|
||||
"Tailwind",
|
||||
"Backend",
|
||||
"Java 21 / Spring Boot",
|
||||
"PostgreSQL",
|
||||
],
|
||||
levels=[0, 1, 1, 0, 1, 1],
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
## Zwei-Spalten-Inhalt
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_titel_und_2_inhalte
|
||||
|
||||
add_titel_und_2_inhalte(
|
||||
prs,
|
||||
titel="Pro & Contra Cloud-Migration",
|
||||
bullets_links=[
|
||||
"Pro:",
|
||||
"Skalierung on-demand",
|
||||
"Geringere Wartung",
|
||||
"Standardisierte Tools",
|
||||
],
|
||||
bullets_rechts=[
|
||||
"Contra:",
|
||||
"Initial-Investition",
|
||||
"Lernkurve im Team",
|
||||
"Datenschutz-Anforderungen",
|
||||
],
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
## Text + Bild
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_text_und_bild_links, add_text_und_bild_rechts
|
||||
|
||||
add_text_und_bild_links(
|
||||
prs,
|
||||
titel="Beispiel: Order-to-Cash Pipeline",
|
||||
bullets=[
|
||||
"Order kommt vom EVU",
|
||||
"Validierung und Routing automatisch",
|
||||
"Abrechnung über Billing-Service",
|
||||
"Reporting in Power BI",
|
||||
],
|
||||
bild=r"C:\diagramme\o2c-flow.png",
|
||||
footer=FOOTER,
|
||||
)
|
||||
|
||||
add_text_und_bild_rechts(
|
||||
prs,
|
||||
titel="Vergleich alt vs. neu",
|
||||
bullets=["Alt: 4 manuelle Schritte", "Neu: vollautomatisch", "70% schneller"],
|
||||
bild=r"C:\screenshots\dashboard.png",
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
## Vollbild mit Titel
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_bild_mit_titel_schwarz
|
||||
|
||||
add_bild_mit_titel_schwarz(
|
||||
prs,
|
||||
titel="Live-Demo Architektur",
|
||||
bild=r"C:\diagramme\architektur-uebersicht.png",
|
||||
kategorie="Demo",
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
## Statement / Aussage
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_statement_rot, add_statement_weiss
|
||||
|
||||
add_statement_rot(
|
||||
prs,
|
||||
titel="Kernaussage",
|
||||
statement="Der gemeinsame Datenraum ist der Schlüssel für integrierte O2C-Prozesse.",
|
||||
bild=background_image_path("weltkugel"),
|
||||
kategorie="Vision",
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
## Zitat
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_zitat_rot
|
||||
|
||||
add_zitat_rot(
|
||||
prs,
|
||||
zitat="Erst kürzlich haben wir festgestellt, dass die Migration unsere Reaktionszeit halbiert hat.",
|
||||
autor="— Eva Köster, Trassenmanagement",
|
||||
kategorie="Stimme aus dem Fachbereich",
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
## Nur Titel / Leer (für eigenes Layout)
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_nur_titel, add_leer
|
||||
|
||||
# Nur Titel — du fügst Inhalt manuell hinzu
|
||||
slide = add_nur_titel(prs, titel="Eigenes Diagramm", footer=FOOTER)
|
||||
# Dann z.B.:
|
||||
from pptx.util import Cm
|
||||
from pptx.enum.shapes import MSO_SHAPE
|
||||
shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Cm(2), Cm(5), Cm(10), Cm(3))
|
||||
shape.text_frame.text = "Eigene Box"
|
||||
|
||||
# Komplett leer (auch kein Titel)
|
||||
add_leer(prs, footer=FOOTER)
|
||||
```
|
||||
|
||||
## Schluss-Folien
|
||||
|
||||
Hinweis: Schlussfolien (`add_ende_bild`, `add_ende_rot`, `add_ende_logo`) haben
|
||||
bewusst KEINEN Footer- und Foliennummer-Slot — das ist Layout-Default. Deshalb
|
||||
nehmen sie auch keinen `footer`-Parameter.
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_ende_bild, add_ende_rot, add_ende_logo
|
||||
|
||||
# Mit Bild
|
||||
add_ende_bild(
|
||||
prs,
|
||||
titel="Vielen Dank.\nFragen?",
|
||||
bild=background_image_path("ice_bahnsteig"),
|
||||
)
|
||||
|
||||
# Auf Rot
|
||||
add_ende_rot(prs, titel="Vielen Dank.")
|
||||
|
||||
# Mit Logo zentriert
|
||||
add_ende_logo(prs, text="Kontakt: max.mustermann@deutschebahn.com")
|
||||
```
|
||||
|
||||
## Beispielfolien-Patterns aus dem Master
|
||||
|
||||
Vier zusätzliche Helper bauen die häufigsten Patterns aus den Beispielfolien des
|
||||
DB InfraGO Masters automatisch nach: Tabelle, Daten und Fakten, Zeitstrahl,
|
||||
Prozessablauf. Sie nutzen Layout 14 (Titel und Inhalt) als Basis und befüllen den
|
||||
Inhaltsbereich mit Shapes/Tabellen statt Bullets.
|
||||
|
||||
### Tabelle mit Türkis-Header
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_tabelle
|
||||
|
||||
add_tabelle(
|
||||
prs, titel="Quartalszahlen",
|
||||
header=["Quartal", "Umsatz", "Wachstum", "Status"],
|
||||
zeilen=[
|
||||
["Q1 2026", "12,4 Mio", "+8 %", "✓"],
|
||||
["Q2 2026", "13,1 Mio", "+5 %", "✓"],
|
||||
["Q3 2026", "13,8 Mio", "+5 %", "→"],
|
||||
],
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
Header-Zeile bekommt automatisch DB-Türkis als Hintergrund mit weißer fetter Schrift,
|
||||
Datenzeilen sind weiß. Spalten werden gleichmäßig verteilt. Empfehlung: max 5–6
|
||||
Datenzeilen, sonst auf mehrere Folien aufteilen.
|
||||
|
||||
### Daten und Fakten (Kennzahl groß)
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_daten_und_fakten
|
||||
|
||||
add_daten_und_fakten(
|
||||
prs, titel="Migration in Zahlen",
|
||||
kennzahl="128",
|
||||
kennzahl_label="Komponenten migriert",
|
||||
beschreibung="Bis Ende Q2 2026 wurden 128 von 145 Komponenten erfolgreich "
|
||||
"auf die neue Plattform migriert. Die übrigen 17 folgen in Q3.",
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
Links steht die große Kennzahl in DB-Türkis (96pt) mit kleinem Label darunter,
|
||||
rechts der Erklärungstext. Gut für Management-Slides mit einer Hauptzahl.
|
||||
|
||||
### Zeitstrahl mit n Stationen
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_zeitstrahl
|
||||
|
||||
add_zeitstrahl(
|
||||
prs, titel="Roadmap 2026",
|
||||
stationen=[
|
||||
("Q1", "Konzept und Architektur"),
|
||||
("Q2", "Pilotbetrieb mit 3 Teams"),
|
||||
("Q3", "Rollout DB-weit"),
|
||||
("Q4", "Optimierung und Skalierung"),
|
||||
],
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
Horizontale Linie mit Türkis-Kreisen für jede Station. Beschreibungstext alterniert
|
||||
oben/unten, damit Texte sich nicht überlappen. Empfohlen: 3–5 Stationen.
|
||||
|
||||
### Prozessablauf
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_prozessablauf
|
||||
|
||||
add_prozessablauf(
|
||||
prs, titel="Onboarding-Prozess",
|
||||
schritte=[
|
||||
("Antrag", "Self-Service-Antrag stellen"),
|
||||
("Prüfung", "Fachbereich prüft binnen 2 AT"),
|
||||
("Setup", "IT richtet Zugänge ein"),
|
||||
("Go-Live", "Onboarding und Start"),
|
||||
],
|
||||
footer=FOOTER,
|
||||
)
|
||||
```
|
||||
|
||||
Durchnummerierte Boxen (Türkis-Light, dunkler Türkis-Rand) mit Pfeilen dazwischen.
|
||||
Die große Nummer steht oben in der Box, dann Überschrift, dann Beschreibung.
|
||||
Empfohlen: 3–5 Schritte.
|
||||
|
||||
## Piktogramme
|
||||
|
||||
86 monochrome SVG-Icons aus der DB-Master-Vorlage (Slide 24). Nutze sie auf
|
||||
freien Folien (`add_nur_titel`, `add_leer`) oder als Akzent neben Bullets.
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import (
|
||||
add_pictogram, list_pictograms, pictogram_path,
|
||||
DB_TURQUOISE_500, DB_RED, DB_BLACK,
|
||||
)
|
||||
from pptx.util import Cm
|
||||
|
||||
# Vier Icons nebeneinander mit Beschriftung
|
||||
slide = add_nur_titel(prs, "Vier Vorteile", footer=FOOTER)
|
||||
icons = [("haekchen", "Geprüft"), ("uhr", "Schneller"),
|
||||
("datenbank", "Daten"), ("puzzleteile", "Integriert")]
|
||||
for i, (key, label) in enumerate(icons):
|
||||
add_pictogram(slide, key, Cm(2 + i * 7.5), Cm(7), Cm(4),
|
||||
color=DB_TURQUOISE_500)
|
||||
# Label darunter via add_textbox …
|
||||
```
|
||||
|
||||
### Piktogramm-Keys finden
|
||||
|
||||
```python
|
||||
# Alle Keys mit Beschreibung
|
||||
for key, descr in list_pictograms():
|
||||
print(f" {key:30s} {descr}")
|
||||
|
||||
# Direkten Pfad zur SVG bekommen (für add_titel_bild_*-Funktionen)
|
||||
svg = pictogram_path("haekchen") # Path-Objekt
|
||||
```
|
||||
|
||||
### Farben
|
||||
|
||||
`color`-Parameter ist optional. Empfohlene Werte:
|
||||
- `DB_TURQUOISE_500` — Standard für Akzent-Icons
|
||||
- `DB_TURQUOISE_700` — dezenter
|
||||
- `DB_RED` — für Warnungen, „nicht zulässig"
|
||||
- `DB_BLACK` / `DB_DARK` — neutraler Look
|
||||
- `DB_WHITE` — für Icons auf farbigem Hintergrund
|
||||
|
||||
Ohne `color` bleibt das Icon in der SVG-Default-Farbe (meist Schwarz).
|
||||
|
||||
### Wichtige Keys nach Anwendung
|
||||
|
||||
- **Bestätigung:** `haekchen`, `volltreffer`, `pruefliste`, `klemmbrett`, `klemmbrett_marke`
|
||||
- **Negation:** `schliessen`, `verbotsschild`, `nicht_zulaessig`, `kommentar_gefaellt_nicht`
|
||||
- **Daten/Charts:** `datenbank`, `cloud`, `cloudcomputing`, `balkendiagramm`,
|
||||
`flussdiagramm`, `verzweigungsdiagramm`, `abwaertstrend-diagramm`,
|
||||
`balkendiagramm_mit_abwaertstrend`, `blockchain`
|
||||
- **Kommunikation:** `chat`, `chatblase`, `e-mail`, `kommentar_like`,
|
||||
`kommentar_herz`, `kommentar_wichtig`, `posteingang`, `informationen`
|
||||
- **Zeit:** `uhr`, `tageskalender`, `flip-kalender`, `geschichte` (Reload),
|
||||
`aktualisieren`, `zurueckspulen`, `schneller_vorlauf`
|
||||
- **Aktionen:** `wiedergabe`, `herunterladen`, `aus_der_cloud_herunterladen`,
|
||||
`uebertragen`, `einchecken`, `sortieren`, `shuffle`, `umschaltflaeche`
|
||||
- **Pfeile:** `pfeil_nach_oben`, `_unten`, `_rechts`, `pfeil_kreis`,
|
||||
`pfeil_mit_einer_linie_gerade`, `pfeil_mit_einer_linie_kurve_im_uhrzeigersinn`,
|
||||
`caretzeichen_nach_oben` / `_unten` / `_links` / `_rechts`
|
||||
- **Sonstiges:** `puzzleteile`, `handschlag`, `aktenkoffer`, `lupe`,
|
||||
`hilfe`, `fragezeichen`, `ausrufezeichen`, `management`, `vertrag`,
|
||||
`gehaltsabrechnung`, `papier`, `bueroklammer`, `ordner`, `ordnersuche`,
|
||||
`liste`, `sperren`, `markierung`, `maximieren`, `folgen`, `prost`,
|
||||
`fahrrad_mit_personen`, `grinsendes_gesicht`, `lachendes_gesicht`,
|
||||
`computer`, `browserfenster`
|
||||
|
||||
Vollständige Liste: `list_pictograms()` oder `PICTOGRAMS.keys()`.
|
||||
|
||||
## Weitere Layout-Varianten
|
||||
|
||||
Die häufigsten Layouts haben oben eigene Beispiele. Die folgenden Varianten sind
|
||||
strukturell identisch zu ihren Pendants — Aufruf nur zum Überblick:
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import (
|
||||
add_titel_rahmen, add_inhaltsverzeichnis_rot,
|
||||
add_kapiteltrenner_bild_schwarz, add_bild_mit_titel_weiss,
|
||||
add_zitat_weiss, add_nur_titel_grau, add_bild_agenda,
|
||||
)
|
||||
|
||||
# Titel im Rahmen über Bild — visueller Hingucker
|
||||
add_titel_rahmen(prs, "Quartals-Highlight", "Q2 2026",
|
||||
bild=background_image_path("gluehbirne"),
|
||||
kategorie="Highlight", footer=FOOTER)
|
||||
|
||||
# Agenda auf Rot — markant für offizielle Themen
|
||||
add_inhaltsverzeichnis_rot(prs, "Agenda",
|
||||
["Eins", "Zwei", "Drei"], footer=FOOTER)
|
||||
|
||||
# Kapiteltrenner mit Bild und schwarzem Logo
|
||||
add_kapiteltrenner_bild_schwarz(prs, "4. Risiken",
|
||||
untertitel="Was uns Sorgen macht",
|
||||
bild=background_image_path("gleisarbeiter"),
|
||||
footer=FOOTER)
|
||||
|
||||
# Vollbild-Bild mit Titelzeile und weißem Logo
|
||||
add_bild_mit_titel_weiss(prs, "Architektur-Übersicht",
|
||||
bild=r"C:\diagramme\overview.png",
|
||||
kategorie="Demo", footer=FOOTER)
|
||||
|
||||
# Zitat auf hellem Hintergrund (Logo Weiß)
|
||||
add_zitat_weiss(prs, zitat="Kein Plan überlebt den ersten Kundenkontakt.",
|
||||
autor="— Helmuth von Moltke", footer=FOOTER)
|
||||
|
||||
# Nur Titel auf grauem Hintergrund — visuelle Abgrenzung im Foliensatz
|
||||
add_nur_titel_grau(prs, "Backup-Slides", footer=FOOTER)
|
||||
|
||||
# Bild-Agenda — Spezial-Layout für bildgeprägte Agenden
|
||||
add_bild_agenda(prs, "Übersicht", kategorie="Agenda", footer=FOOTER)
|
||||
```
|
||||
|
||||
## Kreative Folien — wenn die Templates nicht reichen
|
||||
|
||||
Die fertigen Layouts (Titel-und-Inhalt, Zwei-Spalten, Statement, Zitat usw.) sind
|
||||
für die häufigen Fälle. Für Architektur-Diagramme, BPMN-Skizzen, Roadmaps,
|
||||
selbstgezeichnete Visualisierungen oder freie Bildkompositionen gibt es drei Layouts,
|
||||
die als Leinwand gedacht sind:
|
||||
|
||||
- `add_nur_titel(prs, titel, footer)` — Titelzeile oben, Rest frei
|
||||
- `add_nur_titel_grau(prs, titel, footer)` — Variante mit grauem Hintergrund
|
||||
- `add_leer(prs, footer)` — komplett frei, nur Footer-Slot
|
||||
|
||||
Logo und Foliennummer kommen weiter vom Master — du verzichtest nur auf die
|
||||
vorgefertigten Bullet-Listen und kannst stattdessen mit Shapes, Connectoren, Bildern
|
||||
und Textfeldern arbeiten.
|
||||
|
||||
### Eigenes Architektur-Diagramm
|
||||
|
||||
```python
|
||||
from pptx.util import Cm, Pt
|
||||
from pptx.enum.shapes import MSO_SHAPE, MSO_CONNECTOR
|
||||
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
|
||||
from pptx.dml.color import RGBColor
|
||||
from db_infrago_pptx import (
|
||||
add_nur_titel,
|
||||
DB_TURQUOISE_500, DB_TURQUOISE_700, DB_RED, DB_SAND, DB_GRAY_LIGHT, DB_WHITE,
|
||||
)
|
||||
|
||||
slide = add_nur_titel(prs, "O2C Architektur-Skizze", footer=FOOTER)
|
||||
|
||||
def box(slide, x_cm, y_cm, w_cm, h_cm, text, fill=DB_TURQUOISE_500, fg=DB_WHITE):
|
||||
s = slide.shapes.add_shape(
|
||||
MSO_SHAPE.ROUNDED_RECTANGLE,
|
||||
Cm(x_cm), Cm(y_cm), Cm(w_cm), Cm(h_cm),
|
||||
)
|
||||
s.fill.solid(); s.fill.fore_color.rgb = fill
|
||||
s.line.fill.background()
|
||||
tf = s.text_frame
|
||||
tf.text = text
|
||||
tf.vertical_anchor = MSO_ANCHOR.MIDDLE
|
||||
p = tf.paragraphs[0]
|
||||
p.alignment = PP_ALIGN.CENTER
|
||||
p.runs[0].font.color.rgb = fg
|
||||
p.runs[0].font.size = Pt(14)
|
||||
p.runs[0].font.bold = True
|
||||
return s
|
||||
|
||||
frontend = box(slide, 2, 5, 7, 2.5, "Frontend")
|
||||
backend = box(slide, 13, 5, 7, 2.5, "Backend", fill=DB_TURQUOISE_700)
|
||||
db = box(slide, 24, 5, 7, 2.5, "Datenbank", fill=DB_RED)
|
||||
|
||||
def arrow(slide, x1, y1, x2, y2):
|
||||
c = slide.shapes.add_connector(MSO_CONNECTOR.STRAIGHT,
|
||||
Cm(x1), Cm(y1), Cm(x2), Cm(y2))
|
||||
c.line.color.rgb = RGBColor(0x00, 0x00, 0x00)
|
||||
c.line.width = Pt(1.5)
|
||||
return c
|
||||
|
||||
arrow(slide, 9, 6.25, 13, 6.25)
|
||||
arrow(slide, 20, 6.25, 24, 6.25)
|
||||
```
|
||||
|
||||
### Eigenes Bild platzieren mit Caption
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import add_nur_titel
|
||||
from pptx.util import Cm, Pt
|
||||
|
||||
slide = add_nur_titel(prs, "Screenshot Dashboard", footer=FOOTER)
|
||||
|
||||
# Bild zentriert, max-Breite
|
||||
slide.shapes.add_picture(
|
||||
r"C:\screenshots\dashboard.png",
|
||||
left=Cm(4), top=Cm(4), width=Cm(26),
|
||||
)
|
||||
|
||||
# Caption darunter
|
||||
caption = slide.shapes.add_textbox(Cm(4), Cm(16.5), Cm(26), Cm(1))
|
||||
caption.text_frame.text = "Quelle: Power BI Demo, Stand Mai 2026"
|
||||
caption.text_frame.paragraphs[0].runs[0].font.size = Pt(10)
|
||||
caption.text_frame.paragraphs[0].runs[0].font.italic = True
|
||||
```
|
||||
|
||||
### Drei-Säulen-Visualisierung
|
||||
|
||||
```python
|
||||
from db_infrago_pptx import (
|
||||
add_nur_titel,
|
||||
DB_TURQUOISE_500, DB_TURQUOISE_700, DB_RED, DB_WHITE, DB_GRAY_LIGHT,
|
||||
)
|
||||
from pptx.util import Cm, Pt
|
||||
from pptx.enum.shapes import MSO_SHAPE
|
||||
from pptx.enum.text import PP_ALIGN
|
||||
|
||||
slide = add_nur_titel(prs, "Drei Erfolgsfaktoren", footer=FOOTER)
|
||||
|
||||
saeulen = [
|
||||
("Daten", "Einheitliche Stammdaten als Grundlage", DB_TURQUOISE_500),
|
||||
("Prozesse", "Standardisierte Workflows", DB_TURQUOISE_700),
|
||||
("Plattform", "CNP als technisches Fundament", DB_RED),
|
||||
]
|
||||
|
||||
for i, (titel, text, color) in enumerate(saeulen):
|
||||
x = 2 + i * 10.5
|
||||
# Header
|
||||
h = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Cm(x), Cm(5), Cm(9.5), Cm(2))
|
||||
h.fill.solid(); h.fill.fore_color.rgb = color; h.line.fill.background()
|
||||
h.text_frame.text = titel
|
||||
h.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
|
||||
h.text_frame.paragraphs[0].runs[0].font.color.rgb = DB_WHITE
|
||||
h.text_frame.paragraphs[0].runs[0].font.bold = True
|
||||
h.text_frame.paragraphs[0].runs[0].font.size = Pt(20)
|
||||
# Body
|
||||
b = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Cm(x), Cm(7), Cm(9.5), Cm(8))
|
||||
b.fill.solid(); b.fill.fore_color.rgb = DB_GRAY_LIGHT
|
||||
b.line.fill.background()
|
||||
b.text_frame.text = text
|
||||
b.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
|
||||
b.text_frame.paragraphs[0].runs[0].font.size = Pt(14)
|
||||
```
|
||||
|
||||
### Hinweise
|
||||
|
||||
- Alle Maße in `Cm(...)`, `Pt(...)` oder `Emu(...)` — niemals Pixel
|
||||
- Folie ist 33.87 × 19.05 cm — Logo oben rechts, Footer unten links nicht überdecken
|
||||
- DB-Farbkonstanten aus dem Helper importieren statt RGB selbst zu tippen
|
||||
- Für komplexe Diagramme (Mermaid, Draw.io, Lucidchart) lieber als Bild exportieren und
|
||||
via `slide.shapes.add_picture(...)` einfügen — saubereres Ergebnis
|
||||
|
||||
## Speichern und öffnen
|
||||
|
||||
```python
|
||||
out = save(prs, r"C:\BA\projekt\2026-05-10_o2c-update.pptx")
|
||||
print(f"Erzeugt: {out}")
|
||||
```
|
||||
|
||||
Im PowerShell danach:
|
||||
```powershell
|
||||
Invoke-Item "C:\BA\projekt\2026-05-10_o2c-update.pptx"
|
||||
```
|
||||
|
||||
## Speaker Notes
|
||||
|
||||
Für jede Inhaltsfolie:
|
||||
|
||||
```python
|
||||
slide = add_titel_und_inhalt(prs, titel="…", bullets=[…], footer=FOOTER)
|
||||
add_notes(slide, """
|
||||
- Hier den Kontext erklären
|
||||
- Auf Punkt 2 besonders eingehen
|
||||
- Übergang zur nächsten Folie: 'Daraus ergibt sich…'
|
||||
""")
|
||||
```
|
||||
|
||||
## Komplettes Mini-Beispiel
|
||||
|
||||
```python
|
||||
import sys
|
||||
from pathlib import Path
|
||||
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_statement_rot, add_ende_bild,
|
||||
)
|
||||
|
||||
FOOTER = "DB InfraGO AG | Max Mustermann | V.IVE 11 | 2026"
|
||||
prs = open_deck()
|
||||
|
||||
# Titel
|
||||
add_titel_bild_schwarz(
|
||||
prs, "O2C Cloud-Migration", "Status Q2 2026",
|
||||
bild=background_image_path("datenstroeme"),
|
||||
kategorie="Architektur", footer=FOOTER,
|
||||
)
|
||||
|
||||
# Agenda
|
||||
add_inhaltsverzeichnis_weiss(
|
||||
prs, "Agenda",
|
||||
["Ausgangslage", "Status", "Nächste Schritte"],
|
||||
footer=FOOTER,
|
||||
)
|
||||
|
||||
# Inhalt
|
||||
slide = add_titel_und_inhalt(
|
||||
prs, "Status",
|
||||
["Frontend migriert", "Backend in Migration", "DB-Migration startet Q3"],
|
||||
footer=FOOTER,
|
||||
)
|
||||
add_notes(slide, "Frontend ist seit März live. Backend hat 60% geschafft.")
|
||||
|
||||
# Statement
|
||||
add_statement_rot(
|
||||
prs, "Aussage",
|
||||
"Wir liegen im Plan und haben das Risiko reduziert.",
|
||||
bild=background_image_path("laptop_checkmark"),
|
||||
kategorie="Bottom Line", footer=FOOTER,
|
||||
)
|
||||
|
||||
# Ende
|
||||
add_ende_bild(prs, "Vielen Dank.", bild=background_image_path("ice_bahnsteig"))
|
||||
|
||||
save(prs, r"C:\BA\projekt\2026-05-10_o2c-status.pptx")
|
||||
```
|
||||
Reference in New Issue
Block a user