PPTX-Erstellung, -Bearbeitung und -Analyse
Eine .pptx-Datei ist ein ZIP-Archiv von XML-Dateien. Wählen Sie je nach Aufgabe den passenden Ansatz:
| Aufgabe | Ansatz |
|---|---|
| Erstellen eines neuen Decks | Schreiben Sie ein pptxgenjs-Skript — siehe die 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
Die Pfade sind relativ zum Verzeichnis dieser Fähigkeit. Alles andere ist reines Python, node oder Shell.
| Skript | Funktion |
|---|---|
scripts/thumbnail.py deck.pptx [prefix] | Beschriftetes Raster jeder Folie zum Auswählen von Vorlagen-Layouts. Nur .pptx. prefix übergeben – standardmäßig wird thumbnails verwendet, 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öscht nicht mehr referenzierte Folien, Medien und Beziehungen. Nachdem <p:sldIdLst> endgültig ist, ausführen |
scripts/office/validate.py deck.pptx [--original src.pptx] | Schema-, Beziehungs-, Inhaltstyp-, Diagramm- und Folienprüfungen; jeder Fehler nennt die Lösung. --original für jedes aus einer Vorlage erstellte Deck übergeben – es setzt die Schema-Prüfungen gegen die Vorlage als Basis, sodass deren eigene XSD-Fehler nicht als Ihre erscheinen |
scripts/office/soffice.py --headless --convert-to pdf deck.pptx | LibreOffice-Wrapper – soffice allein 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 falls dieser require fehlschlägt: npm install pptxgenjs. Das Modell kennt die API; dies sind die Fallstricke:
- 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 Alpha-Werte im Hex-String ("00000020") beschädigen die Datei. Für Transluzenz:transparency: 0-100bei Füllungen und Bildern,opacity: 0.0-1.0bei Schatten – jeweils wird die andere Option stillschweigend ignoriert. - pptxgenjs mutiert Optionsobjekte direkt (wandelt Werte bei erster Verwendung in EMU um). Teilen Sie niemals ein
shadow-/Optionsobjekt für zweiadd*-Aufrufe – erstellen Sie jedes Mal ein neues Objekt. - Schatten-
offsetmuss ≥ 0 sein – ein negativer Wert beschädigt die Datei. Um einen Schatten nach oben zu werfen, verwenden Sieangle: 270mit einem positiven Offset. letterSpacingwird stillschweigend ignoriert – die echte 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. 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 einen eingebauten Innenabstand – setzen Sie
margin: 0, wenn Text an derselben x-Position an einer Form, Linie oder einem Symbol ausgerichtet sein muss. - Referentennotizen kommen in
slide.addNotes("...")(Klartext, einmal pro Folie), niemals in einem Textfeld auf der Folie. - Diagramme nativ halten. Verwenden Sie
addChart()für alles, was PowerPoint diagrammieren kann (übergeben Sie ein Array von{type, data, options}für Kombinationsdiagramme). Für PowerPoint-native Funktionen, die die Bibliothek nicht freigibt (Trendlinien, Fehlerbalken), berechnen Sie die zusätzliche Serie selbst oder verarbeiten Sie das generierte OOXML nach – greifen Sie nicht auf ein gerendertes Bild zurück. Nur Diagrammtypen, die PowerPoint nicht nativ darstellen kann (Sankey, Netzwerk, Chord), kommen als Bilder. - Standarddiagramme sehen nackt aus – 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 Serie). - Bei gestapelten Balken- oder Säulendiagrammen muss
dataLabelPositionctr,inEndoderinBasesein.outEndbeschädigt die Datei. - Eine Kombinationsserie mit
secondaryValAxis/secondaryCatAxisbenö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. - Führen Sie nach
writeFile()python scripts/office/validate.py deck.pptxaus. Es meldet die beiden obigen Diagrammfehler und die Folien-XML-Defekte, die PowerPoint ablehnt, und nennt die Lösung für jeden. Beheben Sie diese in Ihrem Generator, nicht durch manuelle Bearbeitung des gepackten XML. - Ordnen Sie die Kinder von
<p:presentation>niemals neu an. pptxgenjs schreibt<p:notesMasterIdLst>direkt nach<p:sldIdLst>und zeigt beide Master auf ein Theme-Teil. PowerPoint liest das problemlos – verschieben Sie das Element und dasselbe Deck wird unöffnungsbar. - Symbole: rendern Sie
react-iconsals SVG (ReactDOMServer.renderToStaticMarkup), rasterisieren Sie mitsharpbei ≥256px, und fügen Sie es mitaddImage({ 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).
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, aufgeteilt in template-thumbs-N.jpg bei mehr als 12 Folien. Übergeben Sie immer dieses zweite Argument, benannt nach dem Deck. Es lautet standardmäßig thumbnails, sodass zwei Decks, die in einem Verzeichnis thumbnailed werden, stillschweigend die Raster des jeweils anderen überschreiben – die Raster des ersten Decks sind einfach weg (nur für Vorlagenanalyse – visuelle Qualitätssicherung benötigt die hochauflösenden Renderings aus Konvertierung in Bilder; es akzeptiert nur .pptx, kopieren Sie also zuerst eine .potx in einen .pptx-Namen). Verwenden Sie dies mit markitdown, um jeden Inhaltsabschnitt einer Vorlagenfolie zuzuordnen, und variieren Sie die Layouts – legen Sie nicht jeden Abschnitt auf dieselbe Titel-und-Aufzählungspunkte-Folie.
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
# Folieninhalt in ppt/slides/slideN.xml bearbeiten
(cd unpacked && rm -f ../out.pptx && zip -Xr ../out.pptx .) # zip von INNERHALB des Verzeichnisses; zuerst rm, sonst bleiben gelöschte Teile erhalten
python scripts/office/validate.py out.pptx --original deck.pptx
- Führen Sie alle strukturellen Arbeiten – Hinzufügen, Löschen, Neu anordnen – durch, bevor Sie den Inhalt einer Folie bearbeiten.
add_slide.pykopiert eine Folien-Datei wortwörtlich, sodass ein Duplizieren nach einer Bearbeitung den editierten Inhalt klont; undclean.pylöscht jede Folie, die in<p:sldIdLst>fehlt, einschließlich einer gerade geschriebenen Folie. - Kopieren Sie niemals eine Folien-Datei von Hand –
add_slide.pyführt alle Registrierungen durch, die eine neue Folie benötigt, und meldet, was es erstellt hat (Created ppt/slides/slide17.xml from slide2.xml). Es arbeitet auch direkt auf einer Datei:add_slide.py deck.pptx slide2.xml -o out.pptx– übergeben Sie-o, sonst überschreibt es das Eingabe-Deck direkt. Eine duplizierte Folie referenziert weiterhin die Diagramm-/SmartArt-/Eingebettete-Objekt-Teile ihrer Quelle, anstatt sie zu klonen. Die Bearbeitung des Diagramms einer Folie ändert daher das der anderen. - Wenn Sie
python-pptxverwenden, drei Dinge, die es nicht kann: eine Folie duplizieren (der einzige Einstiegspunkt istadd_slide(layout)), Formatierung durchtext_frame.text = "..."beibehalten (das reduziert den Absatz auf einen einzelnen Lauf ohne Stil – weisen Sie stattdessenrun.textzu) oder das SVG/EMF lesen, das die meisten Vorlagengrafiken verwenden (add_picturelöstUnidentifiedImageErroraus). - Ältere
.pptmüssen 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 Durchschleifen von OOXML durchxml.etree.ElementTreeschreibt Namespace-Präfixe um und beschädigt das Deck. - Vorlagenplätze ≠ Quellenelemente. Wenn die Vorlage 4 Teammitglieder zeigt und Sie haben 3, löschen Sie die gesamte Gruppe des 4. Mitglieds (Bild + Textfelder), nicht nur dessen Text – überprüfen Sie dann in der Qualitätssicherung auf verwaiste visuelle Elemente.
- Ein
<a:p>pro Listenelement – verketten Sie Listenelemente niemals zu einem einzelnen Absatz. Kopieren Sie das Geschwister-<a:pPr>, um die Abstände beizubehalten, und setzen Sieb="1"auf das<a:rPr>von Titeln, Abschnittsüberschriften und Inline-Beschriftungen (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 nachgestellten Leerzeichen benötigt
xml:space="preserve"auf seinem<a:t>.
Design-Ideen
Erstellen Sie keine langweiligen Folien. Einfache Aufzählungspunkte auf weißem Hintergrund werden niemanden beeindrucken. Ziehen Sie für jede Folie Ideen aus dieser Liste in Betracht.
Bevor es losgeht
- Wählen Sie eine kräftige, inhaltsbezogene Farbpalette: Die Palette sollte sich wie für DIESES Thema entworfen anfühlen. Wenn das Vertauschen Ihrer Farben in eine völlig andere Präsentation immer noch "funktionieren" würde, haben Sie keine ausreichend spezifischen Entscheidungen getroffen.
- Dominanz vor Gleichberechtigung: Eine Farbe sollte dominieren (60-70% visuelles Gewicht), mit 1-2 unterstützenden Tönen und einem scharfen Akzent. Geben Sie niemals allen Farben das gleiche Gewicht.
- Dunkel-/Hell-Kontrast: Dunkle Hintergründe für Titel- und Schlussfolien, helle für Inhalte ("Sandwich"-Struktur). Oder konsequent dunkel für ein Premium-Gefühl.
- Legen Sie ein visuelles Motiv fest: Wählen Sie EIN unverwechselbares Element 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 – standardmäßig kein generisches Blau. Verwenden Sie diese Paletten als Inspiration:
| Thema | Primärfarbe | Sekundärfarbe | Akzentfarbe |
|---|---|---|---|
| Mitternachts-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 (dunkelblau) | 1C7293 (blaugrün) | 21295C (mitternachtsblau) |
| Holzkohle-Minimal | 36454F (holzkohle) | F2F2F2 (gebrochenes weiß) | 212121 (schwarz) |
| Teal-Vertrauen | 028090 (blaugrün) | 00A896 (meerschaum) | 02C39A (minze) |
| Beere & Creme | 6D2E46 (beere) | A26769 (staubiges rosa) | ECE2D0 (creme) |
| Salbei-Ruhe | 84B59F (salbei) | 69A297 (eukalyptus) | 50808E (schiefer) |
| Kirsch-Rot mutig | 990011 (kirschrot) | FCF6F5 (gebrochenes weiß) | 2F3C7E (marineblau) |
Für jede Folie
Jede Folie braucht ein visuelles Element – Bild, Diagramm, Symbol oder Form. Nur-Text-Folien sind vergesslich.
Layout-Optionen:
- Zwei Spalten (Text links, Abbildung 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)
- Halbseitiges Bild (volle linke oder rechte Seite) mit Inhaltsüberlagerung
Datenanzeige:
- Große Zahlen-Highlights (große Zahlen 60-72pt mit kleinen Beschriftungen darunter)
- Vergleichsspalten (vorher/nachher, pro/contra, 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 Ersatz ersetzt – und bei manchen Schriftarten hat der Ersatz andere Breiten, sodass Ihre QA-Vorschau einen Textüberlauf (oder eine Passung) anzeigen kann, die das echte Deck nicht hat. Um Ihre QA vertrauenswürdig zu halten:
- Sichere Schriftarten (werden in QA und im ausgelieferten Office maßstabsgetreu gerendert): Arial, Calibri, Cambria, Times New Roman, Courier New, Bookman Old Style, Century Schoolbook. Verwenden Sie diese für Fließtext und alles, wo die Passung wichtig ist.
- Überschriften mit Persönlichkeit bei null QA-Risiko: Kombinieren Sie eine serifenbetonte Überschrift aus der Sicherheitsliste (Cambria, Bookman Old Style, Century Schoolbook) mit einer serifenlosen Grundschrift aus der Sicherheitsliste (Calibri oder Arial). Sie erhalten visuellen Kontrast, ohne auf zuverlässige Überlaufprüfungen zu verzichten.
- Wenn der Benutzer nach einer Schriftart außerhalb der Sicherheitsliste fragt (z.B. Georgia oder Trebuchet MS): Verwenden Sie sie dort, wo der Benutzer sie wünscht, dimensionieren Sie diese Container jedoch mit zusätzlichem Spielraum (~10%) und vertrauen Sie nicht auf die QA-Textpassung für diese Elemente – die Vorschau dieser Schriftart ist ungefähr. Wenn der Benutzer keine Angabe gemacht hat, bevorzugen Sie Schriftarten aus der Sicherheitsliste für Fließtext.
- QA-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 QA-unzuverlässig. Für Titel/Akzente mit Spielraum in Ordnung; vertrauen Sie nicht auf die QA-Textpassung für diese.
- 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 |
…
[für die Übersetzung gekürzt]