PPTX-Erstellung, -Bearbeitung und -Analyse
Eine .pptx-Datei ist ein ZIP-Archiv von XML-Dateien. Wählen Sie Ihren Ansatz je nach Aufgabe:
| Aufgabe | Ansatz |
|---|---|
| Erstellen eines neuen Decks | Ein pptxgenjs-Skript schreiben – siehe Fallstricke unten |
| Bearbeiten eines vorhandenen Decks oder Erstellen aus einer Vorlage | Entpacken → ppt/slides/slideN.xml bearbeiten → zippen |
| Lesen von Inhalten | markitdown deck.pptx (ein Block pro Folie unter <!-- Slide number: N -->-Markierungen); visuelles Raster: python scripts/thumbnail.py deck.pptx |
Skripte
Pfade sind relativ zum Verzeichnis dieses Skills. Alles andere ist reines Python, node oder Shell.
| Skript | Funktion |
|---|---|
scripts/thumbnail.py deck.pptx [prefix] | Beschriftetes Raster jeder Folie zur Auswahl von Vorlagen-Layouts. Nur .pptx. Übergeben Sie prefix – standardmäßig thumbnails, was die Raster anderer Decks im selben Verzeichnis überschreibt |
scripts/add_slide.py unpacked/ slide2.xml [--after slideN.xml] | Eine Folie (oder eine slideLayoutN.xml) mit der gesamten Paketverwaltung duplizieren. Akzeptiert auch eine .pptx-Datei direkt mit -o out.pptx |
scripts/clean.py unpacked/ | Löschen nicht mehr referenzierter Folien, Medien und Beziehungen. Nach der endgültigen <p:sldIdLst> ausführen |
scripts/office/validate.py deck.pptx [--original src.pptx] | Schema-, Beziehungs-, Inhaltstyp-, Diagramm- und Folienprüfungen; jeder Fehler benennt seine Behebung. Übergeben Sie --original für jedes aus einer Vorlage abgeleitete Deck – es basiert die Schema-Prüfungen auf der Vorlage, sodass die eigenen XSD-Fehler der Vorlage nicht als Ihre erscheinen |
scripts/office/soffice.py --headless --convert-to pdf deck.pptx | LibreOffice-Wrapper – reines soffice hängt in dieser Sandbox |
Erstellen mit pptxgenjs – Fallstricke
pptxgenjs ist vorinstalliert – führen Sie nicht npm install aus; schreiben Sie das Skript und verwenden Sie require('pptxgenjs') direkt. Nur wenn dieser Aufruf fehlschlägt: npm install pptxgenjs. Das Modell kennt die API; hier sind die Fallstricke:
- Setzen Sie
pres.layoutvor dem Hinzufügen von Folien. Die Standard-Leinwand istLAYOUT_16x9= 10" × 5.625", nicht 13,3" breit. Koordinaten jenseits des Randes werden geschrieben, nicht begrenzt – die Form ist einfach nicht auf der Folie. (LAYOUT_WIDEist 13,3" × 7,5".) - Hex-Farben: niemals
#, niemals 8 Ziffern.color: "FF0000". Sowohl"#FF0000"als auch Alpha in der Hex ("00000020") beschädigen die Datei. Für Transluzenz:transparency: 0-100bei Füllungen und Bildern,opacity: 0.0-1.0bei Schatten – jedes wird beim anderen still ignoriert. - pptxgenjs ändert Optionsobjekte direkt (wandelt Werte bei erster Verwendung in EMU um). Teilen Sie niemals ein
shadow/Options-Objekt über zweiadd*-Aufrufe – erstellen Sie jedes Mal ein neues Objekt. - Schatten
offsetmuss ≥ 0 sein – ein negativer Offset beschädigt die Datei. Um einen Schatten nach oben zu werfen, verwenden Sieangle: 270mit einem positiven Offset. letterSpacingwird still ignoriert – die korrekte Option istcharSpacing.- Listen:
bullet: truebei jedem Element, niemals ein wörtliches•(ergibt doppelte Aufzählungszeichen). Setzen SiebreakLine: truebei jedem Array-Element außer dem letzten. Abstand zwischen Aufzählungsabsätzen mitparaSpaceAfter, nichtlineSpacing(führt zu großen Lücken). - Ein
new pptxgen()pro Ausgabedatei – verwenden Sie niemals eine Instanz wieder. rectRadiusfunktioniert nur beiROUNDED_RECTANGLE, nicht beiRECTANGLE.- Verlaufsfüllungen werden nicht unterstützt – verwenden Sie stattdessen ein Verlaufsbild als Hintergrund.
- Textfelder haben eingebauten Innenabstand – setzen Sie
margin: 0, wenn Text auf derselben x-Position mit einer Form, Linie oder einem Symbol ausgerichtet sein muss. - Referentennotizen kommen in
slide.addNotes("...")(Klartext, einmal pro Folie), niemals in ein Textfeld auf der Folie. - Halten Sie Diagramme nativ. Verwenden Sie
addChart()für alles, was PowerPoint darstellen kann (übergeben Sie ein Array von{type, data, options}für Kombinationen). Für PowerPoint-native Funktionen, die die Bibliothek nicht bereitstellt (Trendlinien, Fehlerbalken), berechnen Sie die zusätzliche Reihe selbst oder verarbeiten Sie das generierte OOXML nach – greifen Sie nicht auf ein gerendertes Bild zurück. Nur Diagrammtypen, für die PowerPoint keine native Form hat (Sankey, Netzwerk, Chord), werden als Bilder eingefügt. - Standard-Diagramme rendern kahl – kein Titel, keine Datenbeschriftungen, veraltete Palette. Setzen Sie
showTitle+title,showValue: true+dataLabelPosition,chartColors: [...]aus Ihrer Palette, und beruhigen Sie den Rahmen (catAxisLabelColor/valAxisLabelColor,valGridLine: { color, size },catGridLine: { style: "none" },showLegend: falsefür eine einzelne Reihe). - Bei einem gestapelten Balken- oder Säulendiagramm muss
dataLabelPositionctr,inEndoderinBasesein.outEndbeschädigt die Datei. - Eine Kombinationsreihe, die
secondaryValAxis/secondaryCatAxisverwendet, benötigt sowohlvalAxesals auchcatAxesin den Diagrammoptionen, jeweils zwei Einträge. Ohne diese schreibt pptxgenjs Achsen-IDs, die es nie deklariert, und PowerPoint verwirft dieses Diagramm und meldet die Datei als beschädigt. NurvalAxesbereitzustellen, reicht nicht. - Nach
writeFile()führen Siepython scripts/office/validate.py deck.pptxaus. Es meldet die beiden obigen Diagrammfehler und die Folien-XML-Defekte, die PowerPoint ablehnt, und benennt die Behebung für jeden. Beheben Sie sie in Ihrem Generator, nicht durch manuelle Bearbeitung der gepackten XML. - Ordnen Sie die Kinder von
<p:presentation>niemals neu. pptxgenjs schreibt<p:notesMasterIdLst>direkt nach<p:sldIdLst>und verweist beide Master auf ein Theme-Teil. PowerPoint liest das problemlos – verschieben Sie das Element und dasselbe Deck wird unöffnbar. - Symbole: Rendern Sie
react-iconsin SVG (ReactDOMServer.renderToStaticMarkup), rasterisieren Sie mitsharpbei ≥256px, und fügen Sie es überaddImage({ data: "image/png;base64," + buf.toString("base64") })ein – das Präfiximage/png;base64,ist erforderlich (react-icons,react,react-domundsharpsind vorinstalliert –npm install react-icons react react-dom sharpnur, wenn einrequirefehlschlägt).
Bearbeiten vorhandener Decks und Vorlagen
Wählen Sie zuerst Layouts aus: python scripts/thumbnail.py template.pptx template-thumbs schreibt ein beschriftetes Raster jeder Folie und gibt die erstellte(n) Datei(en) aus – template-thumbs.jpg, bei mehr als 12 Folien aufgeteilt in template-thumbs-N.jpg. Übergeben Sie immer dieses zweite Argument, benannt nach dem Deck. Es standardmäßig thumbnails, sodass zwei Decks, die in einem Verzeichnis gerastert werden, sich gegenseitig die Raster überschreiben – die Raster des ersten Decks sind einfach weg (nur Vorlagenanalyse – visuelle Qualitätssicherung benötigt die hochauflösenden Renderings aus In Bilder konvertieren; es akzeptiert nur .pptx, kopieren Sie also zuerst eine .potx in einen .pptx-Namen). Verwenden Sie es mit markitdown, um jeden Inhaltsabschnitt einer Vorlagenfolie zuzuordnen, und variieren Sie die Layouts – setzen Sie nicht jeden Abschnitt auf dieselbe Titel-und-Aufzählungsfolie.
python3 -c "import sys,zipfile; zipfile.ZipFile(sys.argv[1]).extractall('unpacked')" deck.pptx
python scripts/add_slide.py unpacked/ slide2.xml --after slide2.xml # eine Folie (oder slideLayoutN.xml) duplizieren; gibt den Pfad der neuen Folie aus
# Folien neu anordnen / löschen = <p:sldIdLst> in ppt/presentation.xml bearbeiten
python scripts/clean.py unpacked/ # nach Löschungen: entfernt verwaiste Folien, Medien, Beziehungen
# Folieninhalte in ppt/slides/slideN.xml bearbeiten
(cd unpacked && rm -f ../out.pptx && zip -Xr ../out.pptx .) # vom INNERHALB des Verzeichnisses zippen; zuerst löschen, sonst überleben gelöschte Teile
python scripts/office/validate.py out.pptx --original deck.pptx
- Führen Sie alle strukturellen Arbeiten – Hinzufügen, Löschen, Neuanordnen – aus, bevor Sie den Inhalt einer Folie bearbeiten.
add_slide.pykopiert eine Foliendatei wörtlich, sodass das Duplizieren nach einer Bearbeitung den bearbeiteten Inhalt klont; undclean.pylöscht jede Folie, die in<p:sldIdLst>fehlt, einschließlich einer gerade geschriebenen. - Kopieren Sie niemals eine Foliendatei von Hand –
add_slide.pyerledigt alle Registrierungen, die eine neue Folie benötigt, und gibt aus, was es erstellt hat (Created ppt/slides/slide17.xml from slide2.xml). Es funktioniert auch direkt auf einer Datei:add_slide.py deck.pptx slide2.xml -o out.pptx– übergeben Sie-o, sonst wird das Eingabe-Deck direkt überschrieben. Eine duplizierte Folie referenziert weiterhin die Diagramm-/SmartArt-/eingebetteten Objektteile ihrer Quelle, anstatt sie zu klonen, sodass das Bearbeiten des Diagramms einer Folie das der anderen ändert. - Wenn Sie
python-pptxverwenden, drei Dinge, die es nicht kann: eine Folie duplizieren (sein einziger Einstiegspunkt istadd_slide(layout)), Formatierung durchtext_frame.text = "..."erhalten (das reduziert den Absatz auf einen einzigen Lauf ohne Stil – weisen Sie stattdessenrun.textzu) oder das SVG/EMF lesen, das die meisten Vorlagengrafiken verwenden (add_picturelöstUnidentifiedImageErroraus). - Legacy
.pptmuss zuerst konvertiert werden:python scripts/office/soffice.py --headless --convert-to pptx file.ppt..potx-Vorlagen werden identisch entpackt und gepackt – behalten Sie die.potx-Erweiterung in der Ausgabe bei. - Um ein Vorlagensymbol oder -bild wiederzuverwenden, duplizieren Sie eine Folie oder ein Layout, das es bereits enthält.
Beim Ausfüllen einer Vorlage:
- Wenn Sie eine XML-Transformation skripten, parsen Sie mit
defusedxml.minidom– das Hin- und Herwandeln von OOXML durchxml.etree.ElementTreeüberschreibt Namespace-Präfixe und beschädigt das Deck. - Vorlagenplätze ≠ Quellenelemente. Wenn die Vorlage 4 Teammitglieder zeigt und Sie 3 haben, löschen Sie die gesamte Gruppe des 4. Mitglieds (Bild + Textfelder), nicht nur seinen Text – überprüfen Sie dann in der Qualitätssicherung auf verwaiste visuelle Elemente.
- Ein
<a:p>pro Listenelement – verketten Sie Elemente niemals zu einem einzigen Absatz. Kopieren Sie das Geschwister-<a:pPr>, um den Abstand zu erhalten, und setzen Sieb="1"auf<a:rPr>von Titeln, Abschnittsüberschriften und Inline-Labels (Status:,Owner:). - Lassen Sie Aufzählungszeichen vom Layout erben; fügen Sie nur
<a:buChar>,<a:buAutoNum>(nummeriert) oder<a:buNone>hinzu, um zu überschreiben – niemals ein wörtliches•im Text. - Text mit führenden oder nachfolgenden Leerzeichen benötigt
xml:space="preserve"auf seinem<a:t>.
Design-Ideen
Erstellen Sie keine langweiligen Folien. Einfache Aufzählungspunkte auf weißem Hintergrund beeindrucken niemanden. Ziehen Sie für jede Folie Ideen aus dieser Liste in Betracht.
Vor dem Start
- Wählen Sie eine kräftige, inhaltlich abgestimmte Farbpalette: Die Palette sollte WIRKLICH zu DIESEM Thema gestaltet sein. Wenn das Einfügen Ihrer Farben in eine völlig andere Präsentation immer noch „funktionieren" würde, haben Sie keine ausreichend spezifischen Entscheidungen getroffen.
- Dominanz vor Gleichheit: Eine Farbe sollte dominieren (60-70 % visuelles Gewicht), mit 1-2 unterstützenden Tönen und einem scharfen Akzent. Geben Sie niemals allen Farben gleiches Gewicht.
- Hell/Dunkel-Kontrast: Dunkle Hintergründe für Titel- und Schlussfolien, helle für Inhalte („Sandwich"-Struktur). Oder durchgehend dunkel für ein hochwertiges Gefühl.
- Legen Sie ein visuelles Motiv fest: Wählen Sie EIN markantes Element und wiederholen Sie es – abgerundete Bildrahmen, Symbole in farbigen Kreisen. Ziehen Sie es über jede Folie. Verwenden Sie keinen Farbbalken oder Akzentstreifen als Motiv (siehe Vermeidungsliste).
Farbpaletten
Wählen Sie Farben, die zu Ihrem Thema passen – verwenden Sie nicht standardmäßig generisches Blau. Verwenden Sie diese Paletten als Inspiration:
| Thema | Primär | Sekundär | Akzent |
|---|---|---|---|
| Mitternacht Executive | 1E2761 (marineblau) | CADCFC (eisblau) | FFFFFF (weiß) |
| Wald & Moos | 2C5F2D (wald) | 97BC62 (moos) | F5F5F5 (creme) |
| Korallen-Energie | F96167 (koralle) | F9E795 (gold) | 2F3C7E (marineblau) |
| Warmes Terrakotta | B85042 (terrakotta) | E7E8D1 (sand) | A7BEAE (salbei) |
| Ozean-Verlauf | 065A82 (tiefblau) | 1C7293 (blaugrün) | 21295C (mitternacht) |
| Holzkohle Minimal | 36454F (holzkohle) | F2F2F2 (off-white) | 212121 (schwarz) |
| Blaugrün Vertrauen | 028090 (blaugrün) | 00A896 (seeschaum) | 02C39A (minze) |
| Beere & Sahne | 6D2E46 (beere) | A26769 (altrosa) | ECE2D0 (creme) |
| Salbei Ruhe | 84B59F (salbei) | 69A297 (eukalyptus) | 50808E (schiefer) |
| Kirschrot Kühn | 990011 (kirschrot) | FCF6F5 (off-white) | 2F3C7E (marineblau) |
Für jede Folie
Jede Folie braucht ein visuelles Element – Bild, Diagramm, Symbol oder Form. Text-only-Folien sind vergesslich.
Layout-Optionen:
- Zwei Spalten (Text links, Illustration rechts)
- Symbol + Textzeilen (Symbol in farbigem Kreis, fette Überschrift, Beschreibung darunter)
- 2x2- oder 2x3-Raster (Bild auf einer Seite, Raster von Inhaltsblöcken auf der anderen)
- Halbseitenbild (volle linke oder rechte Seite) mit Inhaltsüberlagerung
Datenanzeige:
- Große Statistiken (große Zahlen 60-72pt mit kleinen Labels darunter)
- Vergleichsspalten (vorher/nachher, pro/kontra, Optionen nebeneinander)
- Zeitleiste oder Prozessablauf (nummerierte Schritte, Pfeile)
Visuelle Verfeinerung:
- Symbole in kleinen farbigen Kreisen neben Abschnittsüberschriften
- Kursiver Akzenttext für wichtige Statistiken oder Slogans
Typografie
Schriftnamen, die Sie in die .pptx schreiben, werden vom PowerPoint des Benutzers gerendert, nicht von dieser Umgebung. Ihre visuelle Qualitätssicherung rendert über LibreOffice, das Schriftarten durch andere ersetzt, die es nicht hat – und bei manchen Schriftarten hat der Ersatz andere Breiten, sodass Ihre Qualitätssicherungsvorschau einen Textüberlauf (oder passen) anzeigen kann, den das echte Deck nicht haben wird. Um Ihre Qualitätssicherung vertrauenswürdig zu halten:
- Sichere Schriftarten (rendern in der Qualitätssicherung maßstabsgetreu und werden mit Office ausgeliefert): Arial, Calibri, Cambria, Times New Roman, Courier New, Bookman Old Style, Century Schoolbook. Verwenden Sie diese für Fließtext und alles, bei dem der Platz genau passen muss.
- Überschriften mit Persönlichkeit bei null Qualitätssicherungsrisiko: Kombinieren Sie eine sichere Serifen-Überschrift (Cambria, Bookman Old Style, Century Schoolbook) mit einer sicheren serifenlosen Fließtextschrift (Calibri oder Arial). Sie erhalten visuellen Kontrast, ohne zuverlässige Überlaufprüfungen aufzugeben.
- Wenn der Benutzer eine Schriftart außerhalb der sicheren Liste verlangt (z. B. Georgia oder Trebuchet MS): Verwenden Sie sie dort, wo der Benutzer es wünscht, dimensionieren Sie diese Container jedoch mit zusätzlichem Spielraum (~10 %) und vertrauen Sie bei diesen Elementen nicht der Qualitätssicherungs-Textpassgenauigkeit – die Vorschau dieser Schriftart ist ungefähr. Wenn der Benutzer keine Angabe gemacht hat, bevorzugen Sie Schriftarten aus der sicheren Liste für Fließtext.
- In der Qualitätssicherung unzuverlässige Schriftarten (Ersatz hat andere Breiten – Überlaufprüfungen können falsch sein): Georgia, Trebuchet MS, Impact, Arial Black, Garamond, Consolas, Palatino Linotype. Calibri Light-Ersatz variiert je nach Umgebung; behandeln Sie es als in der Qualitätssicherung unzuverlässig. Für Titel/Akzente mit Spielraum in Ordnung; vertrauen Sie nicht der Qualitätssicherungs-Textpassgenauigkeit bei diesen.
- Verwenden Sie niemals standardmäßig Aptos – Offices Post-2023-Standard hat hier keinen metrikkompatiblen Ersatz und fehlt in älteren Office-Installationen, daher ist es auf beiden Seiten unzuverlässig.
| Element | Größe |
|---|---|
| Folientitel | 36-44pt fett |
| Abschnittsüberschrift | 20-24pt fett |
| Fließtext | 14-16pt |
| Beschriftungen | 10-12pt gedämpft |
…
[gekürzt zur Übersetzung]