PowerPoint-Präsentationen nach HTML konvertieren in PHP
Übersicht
Aspose.Slides für PHP via Java kann PowerPoint‑Präsentationen als HTML speichern, ohne Microsoft PowerPoint zu benötigen. Die grundlegende Konvertierung besteht aus einem einzelnen Presentation‑Ladevorgang und einem save‑Aufruf mit SaveFormat. Verwenden Sie HtmlOptions, wenn Sie das exportierte Layout, Schriften, Bilder, Notizen, Kommentare, SVG‑Ausgabe oder verknüpfte Ressourcen steuern müssen.
Dieser Leitfaden konzentriert sich auf praktische HTML‑Export‑Szenarien:
- Exportieren einer gesamten Präsentation oder ausgewählter Folien.
- Erzeugen von festem Layout, responsive oder SVG‑basiertem HTML.
- Einbinden von Rednernotizen und Kommentaren.
- Steuerung der Bildqualität und zugeschnittener Bilddaten.
- Einbetten von Schriften oder getrenntes Speichern von Schriftdateien.
- Auswahl, wie externe Ressourcen und Mediendateien geschrieben und referenziert werden.
Standardmäßig erzeugt der HTML‑Export ein eigenständiges HTML‑Dokument, in dem die meisten Ressourcen eingebettet sind. Das ist praktisch, um eine einzige Datei zu teilen, kann jedoch die Ausgabedatei vergrößern. Für die Web‑Veröffentlichung sollten Sie externe Ressourcen, eine geringere Bild‑DPI und das Einbetten nur jener Schriften in Betracht ziehen, die in der Zielumgebung nicht zuverlässig verfügbar sind.
Konvertieren einer Präsentation nach HTML
Um eine Präsentation nach HTML zu exportieren, laden Sie sie mit Presentation und speichern sie mit SaveFormat.Html.
$presentation = new Presentation("presentation.pptx");
try {
$presentation->save("presentation.html", SaveFormat::Html);
} finally {
$presentation->dispose();
}
Dieses Beispiel schreibt eine HTML‑Datei. Das Präsentationsobjekt wird im finally‑Block freigegeben, wodurch Datei‑Handles und Rendering‑Ressourcen nach dem Export freigegeben werden.
HtmlOptions verwenden
HtmlOptions ist die zentrale Konfigurationsklasse für den HTML‑Export. Häufige Einstellungen umfassen:
SlidesLayoutOptions: fügt Notizen, Kommentare, Handzettel oder andere Layout‑Informationen hinzu.HtmlFormatter: ändert die Struktur des HTML‑Dokuments oder delegiert die Formatierung an einen Controller.SlideImageFormat: ändert, wie Folien dargestellt werden, z. B. als SVG.PicturesCompression: steuert die Bild‑DPI und die Ausgabengröße.DeletePicturesCroppedAreas: behält zugeschnittene Bilddaten bei oder entfernt sie.SvgResponsiveLayout: lässt exportierten SVG‑Inhalt an den Container anpassen.ShowHiddenSlides: schließt versteckte Folien ein, wenn erforderlich.
Die folgenden Abschnitte zeigen die gebräuchlichsten Optionen einzeln, sodass Sie nur die für Ihren Arbeitsablauf benötigten kombinieren können.
Ausgewählte Folien nach HTML konvertieren
Die save‑Überladung, die Foliennummern akzeptiert, verwendet 1‑basierte Folienpositionen. Die nachstehende Schleife speichert jede Folie in einer separaten HTML‑Datei.
$presentation = new Presentation("presentation.pptx");
try {
$slideCount = java_values($presentation->getSlides()->size());
for ($slideIndex = 0; $slideIndex < $slideCount; $slideIndex++) {
$slideNumber = $slideIndex + 1;
$slideNumbers = array($slideNumber);
$htmlFileName = "slide-" . $slideNumber . ".html";
$presentation->save($htmlFileName, $slideNumbers, SaveFormat::Html);
}
} finally {
$presentation->dispose();
}
Verwenden Sie dieses Muster, wenn eine Website oder Anwendung für jede Folie eine HTML‑Seite benötigt. Wenn jede Folie dasselbe Layout haben soll, erstellen Sie eine HtmlOptions‑Instanz und übergeben sie bei jedem save‑Aufruf.
Responsive HTML erstellen
ResponsiveHtmlController liefert responsive HTML‑Ausgabe über HtmlFormatter. Verwenden Sie es, wenn die exportierte Seite besser an die Browser‑Breite angepasst werden soll.
$presentation = new Presentation("presentation.pptx");
try {
$controller = new ResponsiveHtmlController();
$formatter = java("com.aspose.slides.HtmlFormatter")->createCustomFormatter($controller);
$htmlOptions = new HtmlOptions();
$htmlOptions->setHtmlFormatter($formatter);
$presentation->save("presentation-responsive.html", SaveFormat::Html, $htmlOptions);
} finally {
$presentation->dispose();
}
Für ein SVG‑basiertes responsives Layout setzen Sie SvgResponsiveLayout auf HtmlOptions. Das ist nützlich, wenn der Folieninhalt als skalierbares SVG‑Markup exportiert wird.
$presentation = new Presentation("presentation.pptx");
try {
$htmlOptions = new HtmlOptions();
$htmlOptions->setSvgResponsiveLayout(true);
$presentation->save("presentation-svg-responsive.html", SaveFormat::Html, $htmlOptions);
} finally {
$presentation->dispose();
}
Rednernotizen und Kommentare einbinden
Verwenden Sie NotesCommentsLayoutingOptions über HtmlOptions.SlidesLayoutOptions, um Rednernotizen oder Kommentare einzubinden. Notizen und Kommentare sind standardmäßig ausgeblendet, sofern Sie ihre Positionen nicht festlegen.
Angenommen, die Quell‑Präsentation enthält Rednernotizen:

$presentation = new Presentation("presentation.pptx");
try {
$layoutOptions = new NotesCommentsLayoutingOptions();
$layoutOptions->setNotesPosition(NotesPositions::BottomFull);
$htmlOptions = new HtmlOptions();
$htmlOptions->setSlidesLayoutOptions($layoutOptions);
$presentation->save("presentation-with-notes.html", SaveFormat::Html, $htmlOptions);
} finally {
$presentation->dispose();
}
Der folgende Code exportiert den Folieninhalt mit den Rednernotizen unterhalb der Folie.
Das exportierte HTML enthält den Notizbereich:

Um Kommentare zu exportieren, setzen Sie CommentsPosition, z. B. auf CommentsPositions.Right oder CommentsPositions.Bottom. Wenn Sie nur Kommentare benötigen, lassen Sie NotesPosition weg. Wenn Sie sowohl Notizen als auch Kommentare benötigen, setzen Sie beide Eigenschaften.
Bildqualität und zugeschnittene Bereiche steuern
Der HTML‑Export kann Folienbilder komprimieren, um die Ausgabengröße zu reduzieren. Setzen Sie PicturesCompression auf einen Wert aus PicturesCompression, wenn Sie höhere Bildqualität benötigen.
$presentation = new Presentation("presentation.pptx");
try {
$htmlOptions = new HtmlOptions();
$htmlOptions->setPicturesCompression(PicturesCompression::Dpi150);
$presentation->save("presentation-dpi-150.html", SaveFormat::Html, $htmlOptions);
} finally {
$presentation->dispose();
}
Standardmäßig können zugeschnittene Bildbereiche aus dem Export entfernt werden. Behalten Sie zugeschnittene Daten nur bei, wenn Benutzer diese verborgenen Bildteile wiederherstellen oder inspizieren müssen. Das Behalten kann die HTML‑Größe erhöhen.
$presentation = new Presentation("presentation.pptx");
try {
$htmlOptions = new HtmlOptions();
$htmlOptions->setDeletePicturesCroppedAreas(false);
$presentation->save("presentation-with-cropped-areas.html", SaveFormat::Html, $htmlOptions);
} finally {
$presentation->dispose();
}
CSS hinzufügen
Für einfaches Styling übergeben Sie einen CSS‑String an HtmlFormatter über createDocumentFormatter. Dadurch wird das umgebende HTML‑Dokument geändert, während Aspose.Slides weiterhin den Folieninhalt rendert.
$presentation = new Presentation("presentation.pptx");
try {
$cssRules = "body { margin: 0; background: #f7f7f7; } .slide { margin: 24px auto; }";
$showSlideTitle = true;
$formatter = java("com.aspose.slides.HtmlFormatter")->createDocumentFormatter($cssRules, $showSlideTitle);
$htmlOptions = new HtmlOptions();
$htmlOptions->setHtmlFormatter($formatter);
$presentation->save("presentation-styled.html", SaveFormat::Html, $htmlOptions);
} finally {
$presentation->dispose();
}
Für einen benutzerdefinierten Dokument‑Header, eine verknüpfte CSS‑Datei oder benutzerdefiniertes Markup rund um Folien und Formen verwenden Sie einen eigenen Formatierungs‑Controller und übergeben ihn an HtmlFormatter mit createCustomFormatter.
Schriften einbetten
Wenn die Zielumgebung die Präsentationsschriften nicht installiert haben könnte, betten Sie die Schriften mit EmbedAllFontsHtmlController in das HTML ein. Das Einbetten verbessert die visuelle Treue, erhöht jedoch die Ausgabengröße.
$presentation = new Presentation("presentation.pptx");
try {
$arrayClass = new JavaClass("java.lang.reflect.Array");
$stringClass = new JavaClass("java.lang.String");
$fontNamesToExclude = $arrayClass->newInstance($stringClass, 1);
$arrayClass->set($fontNamesToExclude, 0, new Java("java.lang.String", "Calibri"));
$fontController = new EmbedAllFontsHtmlController(java_values($fontNamesToExclude));
$formatter = java("com.aspose.slides.HtmlFormatter")->createCustomFormatter($fontController);
$htmlOptions = new HtmlOptions();
$htmlOptions->setHtmlFormatter($formatter);
$presentation->save("presentation-embedded-fonts.html", SaveFormat::Html, $htmlOptions);
} finally {
$presentation->dispose();
}
Schriften ausschließen Sie nur, wenn Sie sicher sind, dass die Ziel‑Browser oder -Systeme sie bereits bereitstellen. Für Marken‑Schriften oder weniger verbreitete Schriften ist das Einbetten in der Regel sicherer.
Schriftdateien verlinken statt sie einzubetten
Um die HTML‑Dateigröße zu reduzieren, können Sie Schriftartdaten in separate WOFF‑Dateien schreiben und @font-face‑Regeln zum HTML hinzufügen. In PHP via Java wird dieses Szenario meist mit einer kleinen Java‑Hilfsklasse umgesetzt, die EmbedAllFontsHtmlController erweitert, Schriftbytes in ein Ausgabeverzeichnis schreibt und @font-face‑Regeln in das erzeugte HTML einfügt. Kompilieren Sie diese Hilfsklasse, fügen Sie sie dem Klassenpfad der PHP‑Java‑Bridge hinzu und instanziieren Sie sie anschließend aus PHP mit new Java(...).
Beim Erstellen einer solchen Hilfsklasse wählen Sie bewusst zwei Pfade:
- Den Ausgabepfad im Dateisystem, in dem die erzeugten Schriftdateien geschrieben werden.
- Den URL‑Pfad, den der Browser aus dem HTML‑Dokument verwendet, um diese Schriftdateien zu laden.
Ressourcen extern speichern
Eigenständiges HTML lässt sich leicht verschieben, aber eingebettete Base64‑Ressourcen können die Datei groß machen. Wenn Ihre Anwendung externe Bilddateien benötigt, stellen Sie einen benutzerdefinierten Link/Embed‑Controller dem HtmlOptions‑Konstruktor zur Verfügung.
Wenn Sie Ressourcen auslagern, wählen Sie bewusst zwei Pfade:
- Den Ausgabepfad im Dateisystem, in dem Ihre Anwendung erzeugte Bilder, Schriften, Audio‑ oder Videodateien schreibt.
- Den URL‑Pfad, den der Browser aus dem HTML‑Dokument verwendet, um diese Dateien zu laden.
Halten Sie diese Pfade konsistent mit Ihrem Bereitstellungslayout, damit das erzeugte HTML seine externen Ressourcen laden kann, nachdem es auf einen Web‑Server oder ein anderes Verzeichnis verschoben wurde.
Mediendateien exportieren
VideoPlayerHtmlController exportiert Video‑ und Audiodateien und erzeugt HTML, das sie im Browser abspielen kann. Sein Konstruktor akzeptiert:
path: das Ausgabeverzeichnis, das von dem erzeugten HTML und den Mediendateien verwendet wird.fileName: der zu erzeugende HTML‑Dateiname.baseUri: das absolute URI‑Präfix, das in den HTML‑Links zu Mediendateien verwendet wird.
Wenn die HTML‑Datei html-output/presentation.html lautet, sollte path auf html-output zeigen und baseUri aus Sicht des Browsers auf dasselbe Verzeichnis zeigen. Für die lokale Vorschau können Sie aus dem Ausgabeverzeichnis eine file:///‑URI erstellen. Für eine bereitgestellte Anwendung verwenden Sie die absolute URL des veröffentlichten Ausgabeverzeichnisses.
$outputDirectory = getcwd() . DIRECTORY_SEPARATOR . "html-output";
if (!is_dir($outputDirectory)) {
mkdir($outputDirectory, 0777, true);
}
$htmlFileName = "presentation.html";
$outputDirectoryPath = realpath($outputDirectory);
$outputDirectoryPath = str_replace("\\", "/", $outputDirectoryPath);
$outputBaseUri = "file:///" . ltrim($outputDirectoryPath, "/") . "/";
$presentation = new Presentation();
$videoStream = null;
try {
$videoFilePath = getcwd() . DIRECTORY_SEPARATOR . "intro.mp4";
$videoStream = new Java("java.io.FileInputStream", $videoFilePath);
$video = $presentation->getVideos()->addVideo($videoStream, LoadingStreamBehavior::ReadStreamAndRelease);
$slide = $presentation->getSlides()->get_Item(0);
$slide->getShapes()->addVideoFrame(20, 20, 480, 270, $video);
$controller = new VideoPlayerHtmlController($outputDirectory, $htmlFileName, $outputBaseUri);
$formatter = java("com.aspose.slides.HtmlFormatter")->createCustomFormatter($controller);
$svgOptions = new SVGOptions($controller);
$slideImageFormat = SlideImageFormat::svg($svgOptions);
$htmlOptions = new HtmlOptions($controller);
$htmlOptions->setHtmlFormatter($formatter);
$htmlOptions->setSlideImageFormat($slideImageFormat);
$htmlFilePath = $outputDirectory . DIRECTORY_SEPARATOR . $htmlFileName;
$presentation->save($htmlFilePath, SaveFormat::Html, $htmlOptions);
} finally {
if ($videoStream !== null) {
$videoStream->close();
}
$presentation->dispose();
}
Verwenden Sie Ausgabeverzeichnisse, die pro Exportauftrag eindeutig sind, insbesondere in Server‑Anwendungen. Gemeinsame Ausgabepfade können dazu führen, dass Dateien verschiedener Konvertierungen einander überschreiben.
Leistung und Ressourcenverwaltung
HTML‑Konvertierung ist ein Rendering‑Vorgang, sodass Verarbeitungszeit und Speicherverbrauch von der Folienzahl, Bildauflösung, Schriften, Effekten, Diagrammen und eingebetteten Medien abhängen. Höhere PicturesCompression‑DPI‑Werte, eingebettete Schriften, SVG‑Ausgabe und das Beibehalten zugeschnittener Bildbereiche können die Treue erhöhen, vergrößern jedoch in der Regel die Ausgabedatei.
Für Batch‑Konvertierung:
- Jede Presentation‑Instanz sofort freigeben.
- Separate Ausgabeverzeichnisse für unterschiedliche Aufträge verwenden.
- Gemeinsame Schriften nicht einbetten, es sei denn, die Treue erfordert es.
- Bild‑DPI reduzieren, wenn das HTML für Vorschaubilder oder Thumbnails gedacht ist.
- Die Quell‑Präsentation, das erzeugte HTML und die externen Ressourcen bis zum finalen Bereitstellungspfad zusammenhalten.
FAQ
Werden Hyperlinks im HTML‑Ausgabe erhalten?
Ja. Präsentations‑Hyperlinks werden nach HTML exportiert und bleiben anklickbar, solange die Ziel‑URL gültig ist.
Kann ich Präsentationen parallel nach HTML konvertieren?
Ja, aber teilen Sie keine einzelne Presentation‑Instanz über Threads hinweg. Verarbeiten Sie verschiedene Dateien mit separaten Präsentations‑Instanzen, separaten Streams und separaten Ausgabeverzeichnissen.
Ist ein Presentation‑Objekt thread‑sicher?
Nein. Eine einzelne Presentation‑Instanz sollte in einem Thread geladen, geändert, gespeichert und freigegeben werden. Für parallele Arbeiten erstellen Sie pro Thread oder Prozess eine unabhängige Instanz.
Warum ist die erzeugte HTML‑Datei groß?
Der Standard‑Export kann Ressourcen direkt in das HTML einbetten. Eingebettete Schriften, hoch‑DPI‑Bilder, Medien, SVG‑Inhalt und das Beibehalten zugeschnittener Bildbereiche vergrößern ebenfalls die Datei. Verwenden Sie externe Ressourcen, schließen Sie gemeine Schriften vom Einbetten aus und reduzieren Sie PicturesCompression, wenn eine kleinere Ausgabe wichtiger ist als maximale Treue.
Wie soll ich baseUri für den Medien‑Export wählen?
Wählen Sie baseUri aus der Sicht des Browsers und übergeben Sie es als absolute URI. Für die lokale Vorschau können Sie es aus dem Ausgabeverzeichnis mit einer Java‑Datei‑URI ableiten. Für die Bereitstellung verwenden Sie die absolute URL des veröffentlichten Medienverzeichnisses. Der Dateisystem‑path und der Browser‑baseUri müssen nicht identisch sein, sie müssen jedoch dieselbe Ressourcen‑Position beschreiben.
Kann ich versteckte Folien einbinden?
Ja. Setzen Sie ShowHiddenSlides auf true bei HtmlOptions, wenn versteckte Folien exportiert werden müssen.