Erstellung, Bearbeitung und Analyse von PPTX-Dateien
Ein .pptx-Archiv 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 → packen |
| 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 einfaches Python, node oder Shell.
| Skript | Beschreibung |
|---|---|
scripts/thumbnail.py deck.pptx [präfix] | Beschriftetes Raster jeder Folie, zur Auswahl von Vorlagenlayouts. Nur .pptx. präfix übergeben – standardmäßig thumbnails, was Raster anderer Decks im selben Verzeichnis überschreibt |
scripts/add_slide.py entpackt/ slide2.xml [--after slideN.xml] | Dupliziert eine Folie (oder eine slideLayoutN.xml) mit der gesamten Paketverwaltung. Akzeptiert auch direkt eine .pptx mit -o ausgabe.pptx |
scripts/clean.py entpackt/ | Löscht nicht mehr referenzierte Folien, Medien und rels. Nach dem Abschluss von <p:sldIdLst> ausführen |
scripts/office/validate.py deck.pptx [--original quelle.pptx] | Schema-, Beziehungs-, Content-Typ-, Diagramm- und Folienprüfungen; jeder Fehler benennt seine Behebung. --original für jedes aus einer Vorlage abgeleitete Deck übergeben – es basiert die Schema-Prüfungen auf der Vorlage, sodass die eigenen XSD-Fehler der Vorlage nicht als Ihre gelten |
scripts/office/soffice.py --headless --convert-to pdf deck.pptx | LibreOffice-Wrapper – ein 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 direkt require('pptxgenjs'). Nur falls dieser require fehlschlägt: npm install pptxgenjs. Das Modell kennt die API; hier sind die Tücken:
- Setzen Sie
pres.layoutvor dem Hinzufügen von Folien. Die Standardleinwand istLAYOUT_16x9= 10" × 5,625", nicht 13,3" breit. Koordinaten jenseits des Randes werden geschrieben, nicht begrenzt – die Form ist dann einfach nicht auf der Folie. (LAYOUT_WIDEist 13,3" × 7,5".) - Hex-Farben: niemals
#, niemals 8 Ziffern.color: "FF0000". Sowohl"#FF0000"als auch in das Hex eingebautes Alpha ("00000020") beschädigen die Datei. Für Transluzenz:transparency: 0-100bei Füllungen und Bildern,opacity: 0.0-1.0bei Schatten – jeweils wird der andere Wert stillschweigend ignoriert. - pptxgenjs verändert Optionsobjekte direkt (wandelt Werte bei erster Verwendung in EMU um). Teilen Sie niemals ein
shadow/Optionsobjekt zwischen zweiadd*-Aufrufen – 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 stillschweigend ignoriert – die tatsächliche Option istcharSpacing.- Listen:
bullet: truebei jedem Element, niemals ein wörtliches•(erzeugt doppelte Aufzählungszeichen). Setzen SiebreakLine: truebei jedem Array-Element außer dem letzten. Abstände zwischen Aufzählungsabsätzen mitparaSpaceAfter, nicht mitlineSpacing(riesige Lücken). - Ein
new pptxgen()pro Ausgabedatei – Instanz niemals wiederverwenden. rectRadiusfunktioniert nur beiROUNDED_RECTANGLE, nicht beiRECTANGLE.- Verlaufsfüllungen werden nicht unterstützt – stattdessen ein Verlaufsbild als Hintergrund verwenden.
- Textfelder haben eingebaute Innenabstände – setzen Sie
margin: 0, wenn Text an derselben x-Position mit einer Form, Linie oder einem Icon ausgerichtet sein muss. - Sprechernotizen gehören 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 diagrammieren kann (übergeben Sie ein Array von{type, data, options}für Kombinationen). Für PowerPoint-native Funktionen, die die Bibliothek nicht freigibt (Trendlinien, Fehlerbalken), berechnen Sie die zusätzliche Reihe selbst oder bearbeiten 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), kommen als Bilder hinein. - Standarddiagramme rendern karg – 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. NurvalAxesanzugeben, reicht nicht. - Nach
writeFile()führen Siepython scripts/office/validate.py deck.pptxaus. Es meldet die beiden oben genannten Diagrammfehler und die XML-Defekte der Folien, die PowerPoint verweigert, und nennt die Behebung für jeden. Beheben Sie sie in Ihrem Generator, nicht durch manuelle Bearbeitung des gepackten XML. - Ordnen Sie die Kinder von
<p:presentation>niemals um. pptxgenjs schreibt<p:notesMasterIdLst>direkt nach<p:sldIdLst>und zeigt beide Master auf ein Themen-Teil. PowerPoint liest das glücklich – verschieben Sie das Element, und dasselbe Deck wird unöffnend. - Icons: Rendern Sie
react-iconsals SVG (ReactDOMServer.renderToStaticMarkup), rastern Sie mitsharpbei ≥256px und fügen Sie viaaddImage({ 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 ein require fehlschlägt).
Vorhandene Decks und Vorlagen bearbeiten
Wählen Sie zuerst Layouts: python scripts/thumbnail.py vorlage.pptx vorlagen-thumbs schreibt ein beschriftetes Raster jeder Folie und gibt die erstellte(n) Datei(en) aus – vorlagen-thumbs.jpg, aufgeteilt in vorlagen-thumbs-N.jpg bei mehr als 12 Folien. Übergeben Sie immer dieses zweite Argument, benannt nach dem Deck. Es standardisiert auf thumbnails, sodass zwei in einem Verzeichnis mit Thumbnails versehene Decks stillschweigend die Raster des jeweils anderen überschreiben – die des ersten Decks sind einfach weg (nur Vorlagenanalyse – visuelle Qualitätskontrolle benötigt die hochauflösenden Renderings von Konvertieren in Bilder; 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('entpackt')" deck.pptx
python scripts/add_slide.py entpackt/ slide2.xml --after slide2.xml # eine Folie (oder slideLayoutN.xml) duplizieren; gibt den Pfad der neuen Folie aus
# Neu ordnen / Folien löschen = bearbeiten Sie <p:sldIdLst> in ppt/presentation.xml
python scripts/clean.py entpackt/ # nach Löschungen: entfernt verwaiste Folien, Medien, rels
# Folieninhalt in ppt/slides/slideN.xml bearbeiten
(cd entpackt && rm -f ../ausgabe.pptx && zip -Xr ../ausgabe.pptx .) # von INNERHALB des Verzeichnisses zippen; zuerst rm, sonst bleiben gelöschte Teile erhalten
python scripts/office/validate.py ausgabe.pptx --original deck.pptx
- Führen Sie alle strukturellen Arbeiten – hinzufügen, löschen, neu ordnen – aus, bevor Sie den Inhalt einer Folie bearbeiten.
add_slide.pykopiert eine Folie wörtlich; das Duplizieren nach einer Bearbeitung klont den bearbeiteten Inhalt; undclean.pylöscht jede Folie, die in<p:sldIdLst>fehlt, einschließlich einer, die Sie gerade geschrieben haben. - Kopieren Sie niemals eine Folie von Hand –
add_slide.pyführt jede Registrierung durch, die eine neue Folie benötigt, und meldet, 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 ausgabe.pptx– übergeben Sie-o, sonst überschreibt es das eingegebene Deck direkt. Eine duplizierte Folie referenziert weiterhin die Diagramm-/SmartArt-/Eingebettete-Objekt-Teile ihrer Quelle, statt sie zu klonen; das Bearbeiten des Diagramms auf einer Folie ändert also das auf der anderen. - Wenn Sie
python-pptxverwenden, drei Dinge, die es nicht kann: eine Folie duplizieren (sein einziger Einstiegspunkt istadd_slide(layout)), die Formatierung durchtext_frame.text = "..."bewahren (das reduziert den Absatz auf einen einzigen unformatierten Lauf – weisen Sie stattdessenrun.textzu), oder das SVG/EMF lesen, das die meiste Vorlagenkunst verwendet (add_picturelöstUnidentifiedImageErroraus). - Ältere
.pptmüssen zuerst konvertiert werden:python scripts/office/soffice.py --headless --convert-to pptx datei.ppt..potx-Vorlagen entpacken und packen identisch – behalten Sie die.potx-Erweiterung in der Ausgabe. - Um ein Vorlagen-Icon 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 Durchschleifen von OOXML durchxml.etree.ElementTreeschreibt Namespace-Präfixe um und beschädigt das Deck. - Vorlagenschlitze ≠ 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ätskontrolle auf verwaiste visuelle Elemente.
- Ein
<a:p>pro Listenelement – verketten Sie Elemente niemals zu einem einzigen Absatz. Kopieren Sie das benachbarte<a:pPr>, um Abstände zu bewahren, und setzen Sieb="1"auf das<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>zum Überschreiben hinzu – niemals ein wörtliches•im Text. - Text mit führenden oder abschließenden Leerzeichen benötigt
xml:space="preserve"auf seinem<a:t>.
Designideen
Erstellen Sie keine langweiligen Folien. Einfache Aufzählungszeichen 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, inhaltsbezogene Farbpalette: Die Palette sollte sich anfühlen, als wäre sie für DIESES Thema entworfen. Wenn das Eintauschen 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.
- Dunkel/Hell-Kontrast: Dunkle Hintergründe für Titel- und Schlussfolien, helle für Inhalte ("Sandwich"-Struktur). Oder durchgängig dunkel für ein hochwertiges Gefühl.
- Verpflichten Sie sich zu einem visuellen Motiv: Wählen Sie EIN unverwechselbares Element aus und wiederholen Sie es – abgerundete Bildrahmen, Symbole in farbigen Kreisen. Ziehen Sie es durch 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 und Moos | 2C5F2D (wald) | 97BC62 (moos) | F5F5F5 (creme) |
| Korallen-Energie | F96167 (koralle) | F9E795 (gold) | 2F3C7E (marineblau) |
| Warmer Terrakotta | B85042 (terrakotta) | E7E8D1 (sand) | A7BEAE (salbei) |
| Ozean-Verlauf | 065A82 (tiefblau) | 1C7293 (türkis) | 21295C (mitternacht) |
| Kohle-Minimal | 36454F (kohle) | F2F2F2 (off-white) | 212121 (schwarz) |
| Türkis Vertrauen | 028090 (türkis) | 00A896 (seegrün) | 02C39A (minze) |
| Beere und Creme | 6D2E46 (beere) | A26769 (staubiges rosa) | 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, Icon oder Form. Nur-Text-Folien sind vergesslich.
Layout-Optionen:
- Zwei Spalten (Text links, Illustration rechts)
- Icon + Textzeilen (Icon in farbigem Kreis, fette Überschrift, Beschreibung darunter)
- 2x2- oder 2x3-Raster (Bild auf einer Seite, Raster von Inhaltsblöcken auf der anderen)
- Halbseiten-Bild (volle linke oder rechte Seite) mit Inhaltsüberlagerung
Datenanzeige:
- Große Statistik-Highlights (große Zahlen 60-72pt mit kleinen Labels darunter)
- Vergleichsspalten (vorher/nachher, Vor-/Nachteile, nebeneinander Optionen)
- Zeitleiste oder Prozessablauf (nummerierte Schritte, Pfeile)
Visuelle Verfeinerung:
- Icons in kleinen farbigen Kreisen neben Abschnittsüberschriften
- Kursiver Akzenttext für wichtige Statistiken oder Slogans
Typografie
Schriftnamen, die Sie in die .pptx schreiben, werden von PowerPoint des Benutzers gerendert, nicht von dieser Umgebung. Ihre visuelle Qualitätskontrolle rendert über LibreOffice, das Schriftarten, die es nicht hat, durch andere ersetzt – und bei manchen Schriftarten hat der Ersatz andere Breiten, sodass Ihre Qualitätsvorschau einen Textüberlauf (oder ein Passen) zeigen kann, den das echte Deck nicht haben wird. Um Ihre Qualitätskontrolle vertrauenswürdig zu halten:
- Sichere Schriftarten (rendern in der Qualitätskontrolle maßstabsgetreu und sind 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, wo es auf das Passen ankommt.
- Überschriften mit Persönlichkeit bei null Qualitätsrisiko: Kombinieren Sie eine serifenbetonte Schrift der sicheren Liste (Cambria, Bookman Old Style, Century Schoolbook) mit einer serifenlosen Schrift der sicheren Liste für den Fließtext (Calibri oder Arial). Sie erhalten visuellen Kontrast, ohne auf zuverlässige Überlaufprüfungen zu verzichten.
- Wenn der Benutzer eine Schriftart außerhalb der sicheren Liste wünscht (z. B. Georgia oder Trebuchet MS): Verwenden Sie sie dort, wo der Benutzer sie angefordert hat, bemessen Sie diese Container jedoch mit zusätzlichem Spielraum (~10 %) und vertrauen Sie den Qualitätssicherungstextpassungen für diese Elemente nicht – die Vorschau dieser Schriftart ist ungefähr. Wenn der Benutzer keine Angabe gemacht hat, bevorzugen Sie Schriftarten der sicheren Liste für Fließtext.
- In der Qualitätskontrolle 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 sie als QA-unzuverlässig. Gut für Titel/Akzente mit Spielraum; vertrauen Sie der QA-Textpassung hier nicht.
- Standardmäßig niemals Aptos verwenden – Office-Standard nach 2023 hat hier keinen metrikkompatiblen Ersatz und fehlt in älteren Office-Installationen, also ist es auf beiden Seiten unzuverlässig.
| Element | Größe |
|---|---|
| Folientitel | 36-44pt fett |
| Abschnittsüberschrift | 20-24pt fett |
| Fließtext | 14-16pt |
| Bildunterschriften | 10-12pt dezent |
…
[gekürzt für die Übersetzung]