Präsentationen in Python via Java öffnen
Einführung
Aspose.Slides for Python via Java kann PowerPoint- und OpenDocument‑Präsentationen aus Dateien und Streams laden. Nachdem eine Präsentation geladen wurde, können Sie ihre Struktur untersuchen, Folien bearbeiten, Ressourcen verwalten und sie im Original‑ oder einem anderen unterstützten Format speichern.
Das Ladeverhalten kann über die Klasse LoadOptions angepasst werden. Beispielsweise können Sie ein Öffnungskennwort angeben, große Binärobjekte außerhalb des Java‑Heap‑Speichers behalten, externe Ressourcen steuern oder eingebettete Binärdaten weglassen.
Präsentationen öffnen
Nach dem Laden einer Datei oder eines Streams können Sie determine its original presentation format bestimmen, um zu wählen, wie Ihre Anwendung sie verarbeitet.
Um eine vorhandene Präsentation zu öffnen, übergeben Sie ihren Dateipfad dem Presentation‑Konstruktor. Entsorgen Sie die Präsentation nach der Verwendung, damit Dateihandler, temporäre Daten und andere Ressourcen umgehend freigegeben werden.
Das folgende Python‑Beispiel zeigt, wie Sie eine Präsentation öffnen und die Folienanzahl ermitteln:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation("sample.pptx")
try:
print("Slide count:", presentation.getSlides().size())
finally:
presentation.dispose()
Passwortgeschützte Präsentationen öffnen
Ein Öffnungskennwort verschlüsselt den Inhalt einer Präsentation. Um die komplette Präsentation zu laden, übergeben Sie das richtige Kennwort an LoadOptions.setPassword und stellen die Optionen dem Presentation‑Konstruktor bereit. Das Laden schlägt fehl, wenn das Kennwort fehlt oder falsch ist.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation
load_options = LoadOptions()
load_options.setPassword("open_password")
presentation = Presentation("encrypted-presentation.pptx", load_options)
try:
print("Slide count:", presentation.getSlides().size())
finally:
presentation.dispose()
Für Kennworterkennung, Validierung und Verschlüsselungs‑Workflows siehe Password-Protect Presentations. Wenn eine verschlüsselte Präsentation absichtlich mit öffentlichen Dokumenteigenschaften gespeichert wurde, können diese Eigenschaften ohne Kennwort gelesen werden; siehe Manage Presentation Properties.
Große Präsentationen öffnen
LoadOptions.getBlobManagementOptions liefert Optionen, die steuern, wie Aspose.Slides große binäre Objekte wie Bilder, Audio und Video behandelt. Sie können die Quelldatei gesperrt halten, temporäre Dateien zulassen und die Menge an im Speicher behaltenem BLOB‑Daten begrenzen.
Das folgende Python‑Code‑Beispiel demonstriert das Laden einer großen Präsentation (zum Beispiel 2 GB):
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation, PresentationLockingBehavior, SaveFormat
file_path = "large-presentation.pptx"
load_options = LoadOptions()
load_options.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked)
load_options.getBlobManagementOptions().setTemporaryFilesAllowed(True)
load_options.getBlobManagementOptions().setMaxBlobsBytesInMemory(10 * 1024 * 1024)
presentation = Presentation(file_path, load_options)
try:
presentation.getSlides().get_Item(0).setName("Large presentation")
presentation.save("large-presentation-copy.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Note
Mit PresentationLockingBehavior.KeepLocked bleibt die Quelldatei gesperrt, bis die Präsentationsinstanz entsorgt wird. Verschieben, überschreiben oder löschen Sie die Quelldatei nicht, solange diese Instanz lebt.
Aspose.Slides kann beim Laden den Inhalt eines Eingabestreams kopieren. Für große Präsentationen ist ein Dateipfad daher in der Regel effizienter als ein Stream. Siehe Manage BLOBs für zusätzliche Speicher‑ und Speicherverwaltungs‑Optionen.
Externe Ressourcen steuern
LoadOptions.setResourceLoadingCallback akzeptiert einen JPype‑Proxy, der das Java‑Resource‑Loading‑Callback‑Interface implementiert. Der Callback kann Ersatzdaten bereitstellen, eine Ressource umleiten, den Standard‑Lader verwenden oder die Ressource überspringen. Das ist nützlich, wenn Präsentationen externe Bilder enthalten, die gemäß anwendungsspezifischen Sicherheits‑ oder Speicherregeln aufgelöst werden müssen.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from pathlib import Path
from asposeslides.api import LoadOptions, Presentation, ResourceLoadingAction
class ImageLoadingHandler:
def resourceLoading(self, resource_loading_arguments):
is_jpeg = str(resource_loading_arguments.getOriginalUri()).lower().endswith(".jpg")
approved_image_path = Path("approved-image.jpg")
if not is_jpeg or not approved_image_path.exists():
return ResourceLoadingAction.Skip
try:
image_data = approved_image_path.read_bytes()
java_image_data = jpype.JArray(jpype.JByte)(image_data)
resource_loading_arguments.setData(java_image_data)
return ResourceLoadingAction.UserProvided
except OSError:
print("The approved replacement image could not be read.")
return ResourceLoadingAction.Skip
load_options = LoadOptions()
image_loading_handler = ImageLoadingHandler()
callback = jpype.JProxy("com.aspose.slides.IResourceLoadingCallback", inst=image_loading_handler)
load_options.setResourceLoadingCallback(callback)
presentation = Presentation("presentation-with-external-images.pptx", load_options)
try:
print("Slide count:", presentation.getSlides().size())
finally:
presentation.dispose()
Präsentationen ohne eingebettete Binärobjekte laden
Eine Präsentation kann eingebettete Binärdaten enthalten, die eine Anwendung nicht benötigt oder nicht behalten möchte. Beispiele sind:
- VBA‑Projekte, verfügbar über Presentation.getVbaProject;
- eingebettete OLE‑Daten, verfügbar über OleEmbeddedDataInfo.getEmbeddedFileData;
- ActiveX‑Steuerungsdaten, verfügbar über Control.getActiveXControlBinary.
Setzen Sie LoadOptions.setDeleteEmbeddedBinaryObjects auf True, um diese Binärdaten beim Laden zu entfernen. Speichern Sie die geladene Präsentation, um das bereinigte Ergebnis zu erhalten.
Diese Option reduziert die Exposition gegenüber unerwünschten eingebetteten Payloads, ist jedoch kein vollständiges Malware‑Erkennungs‑ oder Inhalts‑Sanitisierungssystem.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation, SaveFormat
load_options = LoadOptions()
load_options.setDeleteEmbeddedBinaryObjects(True)
presentation = Presentation("presentation-with-embedded-data.pptx", load_options)
try:
presentation.save("presentation-without-embedded-data.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
FAQ
Wie kann ich feststellen, dass eine Datei beschädigt ist und nicht geöffnet werden kann?
Aspose.Slides wirft beim Laden eine Parsing‑ oder Format‑Ausnahme. Behandeln Sie diesen Fehler getrennt von einem falschen‑Kennwort‑Fehler, damit die Anwendung die Ursache genau melden kann.
Was passiert, wenn benötigte Schriftarten fehlen?
Die Präsentation kann weiterhin geladen werden, aber Rendering und Export können Schriftarten ersetzen. Sie können configure font substitution oder provide custom fonts konfigurieren, um die Ausgabe vorhersehbarer zu machen.
Lädt das Laden einer Präsentation auch ihre eingebetteten Medien?
Eingebettete Audio‑ und Videodaten werden über das Präsentations‑Objektmodell verfügbar. Externe Ressourcen werden gemäß dem konfigurierten Resource‑Loading‑Verhalten aufgelöst und können nicht verfügbar sein, wenn deren Speicherorte nicht erreichbar sind.