Ermitteln des Originalpräsentationsformats in Python via Java
Übersicht
Nach dem Laden einer Präsentation rufen Sie die Presentation.getSourceFormat Methode auf, um ihr ursprüngliches Format zu bestimmen. Verwenden Sie sie, wenn die nachfolgende Verarbeitung vom Format abhängt, aus dem die aktuelle Instanz geladen wurde.
Das Quellformat unterscheidet sich vom für eine Ausgabedatei gewählten SaveFormat. Das Speichern in ein anderes Format ändert nicht das Quellformat der vorhandenen Instanz.
Die Beispiele benötigen Aspose.Slides für Python via Java und eine kompatible Java‑Laufzeit. Jedes Beispiel startet die JVM, falls sie nicht bereits läuft.
Lesen des Quellformats einer Datei
Dieses Beispiel erfordert eine vorhandene sample.pptx Datei. Es lädt die Datei und wählt eine Anwendungs‑Verarbeitungspolicy mit Presentation.getSourceFormat, anstatt den Dateinamen zu verwenden. Ändern Sie den Eingabepfad, um andere Formate zu testen. Das Beispiel gibt die ausgewählte Policy aus; ersetzen Sie die Meldungen durch Ihre Anwendung‑Logik.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SourceFormat
presentation = Presentation("sample.pptx")
try:
source_format = presentation.getSourceFormat()
if source_format in (SourceFormat.Ppt, SourceFormat.Pps, SourceFormat.Pot):
print("Use the legacy PowerPoint processing policy.")
elif source_format == SourceFormat.Pptx:
print("Use the standard PPTX processing policy.")
else:
print(f"Use the general policy for source format {source_format}.")
finally:
presentation.dispose()
Erkennen der unterstützten Werte
Die SourceFormat Klasse definiert Ganzzahlkonstanten, die die folgenden Präsentationsformate unterscheiden. Die untenstehenden Erweiterungen sind konventionelle Erweiterungen, keine Rekonstruktion des ursprünglichen Dateinamens.
| SourceFormat‑Wert | Erweiterung | Format |
|---|---|---|
Ppt |
.ppt |
PowerPoint 97–2003‑Präsentation |
Pptx |
.pptx |
Office Open XML‑Präsentation |
Pptm |
.pptm |
Makro‑aktivierte Office Open XML‑Präsentation |
Pps |
.pps |
PowerPoint 97–2003‑Bildschirmpräsentation |
Ppsx |
.ppsx |
Office Open XML‑Bildschirmpräsentation |
Ppsm |
.ppsm |
Makro‑aktivierte Office Open XML‑Bildschirmpräsentation |
Pot |
.pot |
PowerPoint 97–2003‑Vorlage |
Potx |
.potx |
Office Open XML‑Vorlage |
Potm |
.potm |
Makro‑aktivierte Office Open XML‑Vorlage |
Odp |
.odp |
OpenDocument‑Präsentation |
Otp |
.otp |
OpenDocument‑Vorlage für Präsentationen |
Fodp |
.fodp |
Flat XML ODF‑Präsentation |
Xml |
.xml |
PowerPoint XML‑Präsentation |
Lesen des Quellformats aus einem Stream
Dieses Beispiel erfordert eine vorhandene sample.pps Datei. Das Lesen ihrer Bytes in einen Speicher‑Stream modelliert Eingaben, die ohne Dateinamen empfangen werden, z. B. ein Datenbankwert oder ein hochgeladenes Byte‑Array. Der Presentation Konstruktor erhält nur den Stream. Python liest die Dateibytes, und JPype konvertiert sie in ein Java‑Byte‑Array für den Java‑Speicher‑Stream.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from pathlib import Path
from asposeslides.api import Presentation
try:
data = Path("sample.pps").read_bytes()
java_bytes = jpype.JArray(jpype.JByte)(data)
stream = jpype.JClass("java.io.ByteArrayInputStream")(java_bytes)
try:
presentation = Presentation(stream)
try:
print(f"Source format: {presentation.getSourceFormat()}")
finally:
presentation.dispose()
finally:
stream.close()
except OSError as exception:
print(f"Cannot read the presentation: {exception}")
PPT, PPS und POT verwenden dasselbe zugrundeliegende Binärformat. Beim Laden über einen Dateipfad kann die Erweiterung helfen, eine Bildschirmpräsentation oder Vorlage zu unterscheiden. Ohne Dateinamen kann alter PPS‑ und POT‑Inhalt als SourceFormat.Ppt gemeldet werden; das obige PPS‑Beispiel gibt den ganzzahligen Wert von SourceFormat.Ppt aus.
Wenn Ihre Anwendung die Unterscheidung bewahren muss, behalten Sie den ursprünglichen Dateinamen oder Subtyp‑Metadaten separat. Eine Erweiterung ist ein nützlicher Hinweis für diese alten Subtypen, sollte aber nicht die einzige Grundlage für die Identifizierung beliebiger Präsentationsinhalte sein.
Vergleich der Erkennung vor und nach dem Laden
Verwenden Sie PresentationFactory.getPresentationInfo und PresentationInfo.getLoadFormat, wenn Sie eine Datei prüfen müssen, bevor Sie ihr komplettes Präsentations‑Objektmodell laden. Verwenden Sie Presentation.getSourceFormat, wenn die Instanz bereits existiert.
Dieses Beispiel erfordert sample.pptx und gibt die ganzzahligen Werte von LoadFormat.Pptx bzw. SourceFormat.Pptx aus. In der Produktion wählen Sie die für Ihre Verarbeitungsstufe geeignete API; eine bereits geladene Präsentation benötigt keine zweite Inspektion allein zum Erhalt ihres Quellformats.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, PresentationFactory
path = "sample.pptx"
information = PresentationFactory.getInstance().getPresentationInfo(path)
print(f"Before loading: {information.getLoadFormat()}")
presentation = Presentation(path)
try:
print(f"After loading: {presentation.getSourceFormat()}")
finally:
presentation.dispose()
Die Ergebnisse verwenden Konstanten aus unterschiedlichen Klassen: LoadFormat und SourceFormat. Vergleichen Sie deren numerische Werte nicht und gehen Sie nicht davon aus, dass jedes Format identische Erkennungsergebnisse liefert. PowerPoint XML kann vor dem Laden als LoadFormat.Unknown gemeldet werden und nach dem Laden als SourceFormat.Xml.
Quell‑ und Ausgabformate getrennt halten
Dieses Beispiel erfordert sample.pptx und schreibt converted.odp. Es gibt den ganzzahligen Wert von SourceFormat.Pptx sowohl vor als auch nach dem Speichern der ursprünglichen Instanz aus. Nur die neue Instanz, die aus der ODP‑Ausgabe geladen wird, meldet Odp.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("sample.pptx")
try:
print(f"Before saving: {presentation.getSourceFormat()}")
presentation.save("converted.odp", SaveFormat.Odp)
print(f"After saving: {presentation.getSourceFormat()}")
reopened = Presentation("converted.odp")
try:
print(f"Reopened output: {reopened.getSourceFormat()}")
finally:
reopened.dispose()
finally:
presentation.dispose()
Eine von Grund auf neu erstellte Präsentation mittels Presentation() meldet SourceFormat.Pptx. Sie hat keine Eingabedatei: Dies ist der Standardwert für eine neu erstellte Instanz, kein Hinweis darauf, dass eine PPTX‑Datei geladen wurde. Verfolgen Sie, ob Ihre Anwendung die Instanz erstellt oder geladen hat, falls diese Unterscheidung von Bedeutung ist.
Zuordnen eines Quellformats zu einer Erweiterung
Das folgende Beispiel erfordert sample.pptx. Es ordnet jedem derzeit unterstützten SourceFormat Wert eine konventionelle Erweiterung zu, ohne den Eingabedateinamen zu analysieren. Die Rückfalloption verhindert, dass stillschweigend einer nicht erkannten Wert eine Erweiterung zugeordnet wird.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SourceFormat
extensions = {
SourceFormat.Ppt: ".ppt",
SourceFormat.Pptx: ".pptx",
SourceFormat.Pptm: ".pptm",
SourceFormat.Pps: ".pps",
SourceFormat.Ppsx: ".ppsx",
SourceFormat.Ppsm: ".ppsm",
SourceFormat.Pot: ".pot",
SourceFormat.Potx: ".potx",
SourceFormat.Potm: ".potm",
SourceFormat.Odp: ".odp",
SourceFormat.Otp: ".otp",
SourceFormat.Fodp: ".fodp",
SourceFormat.Xml: ".xml",
}
presentation = Presentation("sample.pptx")
try:
extension = extensions.get(presentation.getSourceFormat())
print(extension if extension is not None else "No extension mapping is available.")
finally:
presentation.dispose()
Diese Zuordnung konvertiert keine Datei und stellt keinen verlorenen alten PPS/POT‑Subtyp, der beim Stream‑Laden verloren ging, wieder her. Für das eigentliche Speichern wählen Sie explizit ein SaveFormat, oder nutzen Sie die in Save Presentations in Their Original Format gezeigte Konvertierung.
Formate durch Speichern und erneutes Öffnen verifizieren
Dieses eigenständige Beispiel erstellt eine Präsentation und schreibt drei Dateien im Arbeitsverzeichnis, überschreibt vorhandene Dateien mit denselben Namen. Es öffnet jede Ausgabe sowohl über den Pfad als auch über einen Speicher‑Stream erneut. Für PPTX und ODP melden beide Wege das gespeicherte Format. Für PPS meldet das Laden per Pfad Pps, während das Laden derselben Bytes ohne Dateinamen Ppt meldet.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from pathlib import Path
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation()
try:
formats = [
(SaveFormat.Pptx, "pptx"),
(SaveFormat.Odp, "odp"),
(SaveFormat.Pps, "pps"),
]
for save_format, extension in formats:
path = f"roundtrip.{extension}"
presentation.save(path, save_format)
from_file = Presentation(path)
try:
data = Path(path).read_bytes()
java_bytes = jpype.JArray(jpype.JByte)(data)
stream = jpype.JClass("java.io.ByteArrayInputStream")(java_bytes)
try:
from_stream = Presentation(stream)
try:
print(f"{extension}: file={from_file.getSourceFormat()}, stream={from_stream.getSourceFormat()}")
finally:
from_stream.dispose()
finally:
stream.close()
finally:
from_file.dispose()
except OSError as exception:
print(f"Cannot read a saved presentation: {exception}")
finally:
presentation.dispose()
| Gespeichertes Format | SourceFormat aus einem Dateipfad | SourceFormat aus einem namenlosen Stream |
|---|---|---|
| PPT | Ppt |
Ppt |
| PPTX, PPTM | Pptx, Pptm respectively |
Wie beim Dateipfad |
| PPS | Pps |
Ppt |
| PPSX, PPSM | Ppsx, Ppsm respectively |
Wie beim Dateipfad |
| POT | Pot |
Ppt |
| POTX, POTM | Potx, Potm respectively |
Wie beim Dateipfad |
| ODP, OTP | Odp, Otp respectively |
Wie beim Dateipfad |
| FODP | Fodp |
Fodp |
| PowerPoint XML | Xml |
Xml |
PPS/POT‑Inhalte werden für namenlose Streams als Ppt identifiziert. Die Tabelle beschreibt die Formatidentifikation, nicht die Erhaltung aller Präsentations‑Features während der Konvertierung.
FAQ
Ändert das Speichern in ODP das Quellformat einer aus PPTX geladenen Präsentation?
Nein. Die vorhandene Instanz meldet weiterhin Pptx. Eine aus der gespeicherten ODP‑Datei geladene Instanz meldet Odp.
Kann ein Stream immer zwischen einer alten Präsentation, Bildschirmpräsentation und Vorlage unterscheiden?
Nein. PPT, PPS und POT teilen das Binärformat. Bewahren Sie Dateinamen oder Subtyp‑Metadaten getrennt auf, wenn diese Unterscheidung erforderlich ist.
Welche API soll ich verwenden, wenn die Präsentation bereits geladen ist?
Verwenden Sie Presentation.getSourceFormat. Nutzen Sie PresentationFactory.getPresentationInfo zur Inspektion vor dem Laden.