Verwalten von Präsentations‑BLOBs in Python via Java für effiziente Speichernutzung

Überblick

Aspose.Slides bietet eine BLOB‑basierte Verarbeitung großer Binärdaten in Präsentationen, um den Speicherverbrauch bei großen Bildern, Audios, Videos und Präsentationsdateien zu reduzieren.

Dieser Artikel zeigt, wie man die BLOB‑Verarbeitung verwendet, um große Medien zu einer Präsentation hinzuzufügen, große Medien aus einer Präsentation zu exportieren und große Präsentationen effizienter zu laden. Außerdem wird erklärt, wie temporäre Dateien während der Verarbeitung verwendet werden können und wie man den Ordner ändert, in dem sie gespeichert werden.

Über BLOB

Ein BLOB (Binary Large Object) ist in der Regel ein großes Element (Foto, Präsentation, Dokument oder Medium), das in binären Formaten gespeichert wird.

Aspose.Slides for Python via Java ermöglicht die Verwendung von BLOBs für Objekte auf eine Weise, die den Speicherverbrauch bei großen Dateien reduziert.

BLOBs zur Reduzierung des Speicherverbrauchs verwenden

Eine große Datei über BLOBs zu einer Präsentation hinzufügen

Aspose.Slides for Python via Java ermöglicht das Hinzufügen großer Dateien (in diesem Fall einer großen Videodatei) über einen BLOB‑basierten Prozess, um den Speicherverbrauch zu reduzieren.

Dieser Python‑Code zeigt, wie man eine große Videodatei über den BLOB‑Prozess zu einer Präsentation hinzufügt:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import LoadingStreamBehavior, Presentation, SaveFormat
from java.io import FileInputStream

path_to_very_large_video = "veryLargeVideo.avi"

# Erstelle eine neue Präsentation, zu der das Video hinzugefügt wird.
presentation = Presentation()
try:
    file_stream = FileInputStream(path_to_very_large_video)
    try:
        # Halte den Stream gesperrt, da wir nicht beabsichtigen, auf die Videodatei zuzugreifen.
        video = presentation.getVideos().addVideo(file_stream, LoadingStreamBehavior.KeepLocked)
        presentation.getSlides().get_Item(0).getShapes().addVideoFrame(0, 0, 480, 270, video)

        # Speichere die Präsentation, während der Speicherverbrauch niedrig bleibt.
        presentation.save("presentationWithLargeVideo.pptx", SaveFormat.Pptx)
    finally:
        file_stream.close()
finally:
    presentation.dispose()

Eine große Datei aus einer Präsentation über BLOBs exportieren

Aspose.Slides for Python via Java ermöglicht den Export großer Dateien (z. B. einer Audio‑ oder Videodatei) über einen BLOB‑basierten Prozess aus Präsentationen. Beispielsweise kann es erforderlich sein, eine große Mediendatei aus einer Präsentation zu extrahieren, ohne dass die Datei in den Arbeitsspeicher des Computers geladen wird. Durch den Export über den BLOB‑Prozess bleibt der Speicherverbrauch gering.

Dieser Python‑Code demonstriert den beschriebenen Vorgang:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import LoadOptions, Presentation, PresentationLockingBehavior

huge_presentation_file = "LargeVideoFileTest.pptx"

load_options = LoadOptions()
# Sperre die Quelldatei, anstatt sie in den Speicher zu laden.
load_options.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked)

presentation = Presentation(huge_presentation_file, load_options)
try:
    # Übertrage Videodaten über einen Puffer, um den Speicherverbrauch niedrig zu halten.
    buffer = jpype.JArray(jpype.JByte)(8 * 1024)

    for index in range(presentation.getVideos().size()):
        video = presentation.getVideos().get_Item(index)

        # Verwende den Stream, anstatt das gesamte Video in ein Byte-Array zu laden.
        video_stream = video.getStream()
        try:
            with open(f"video{index}.avi", "wb") as output_stream:
                bytes_read = video_stream.read(buffer, 0, len(buffer))
                while bytes_read > 0:
                    chunk = bytes(buffer[:bytes_read])
                    output_stream.write(chunk)
                    bytes_read = video_stream.read(buffer, 0, len(buffer))
        finally:
            video_stream.close()
    # Bei Bedarf dieselben Schritte auf Audiodateien anwenden.
finally:
    presentation.dispose()

Ein Bild als BLOB zu einer Präsentation hinzufügen

Mit Methoden der Klasse ImageCollection können Sie ein großes Bild als Stream hinzufügen, sodass es als BLOB behandelt wird.

Dieser Python‑Code zeigt, wie man ein großes Bild über den BLOB‑Prozess hinzufügt:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import LoadingStreamBehavior, Presentation, SaveFormat, ShapeType
from java.io import FileInputStream

path_to_large_image = "large_image.jpg"

# Eine neue Präsentation erstellen, zu der das Bild hinzugefügt wird.
presentation = Presentation()
try:
    file_stream = FileInputStream(path_to_large_image)
    try:
        # Den Stream gesperrt lassen, da wir nicht beabsichtigen, auf die Bilddatei zuzugreifen.
        image = presentation.getImages().addImage(file_stream, LoadingStreamBehavior.KeepLocked)
        presentation.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 0, 0, 300, 200, image)

        # Die Präsentation speichern, während der Speicherverbrauch niedrig gehalten wird.
        presentation.save("presentationWithLargeImage.pptx", SaveFormat.Pptx)
    finally:
        file_stream.close()
finally:
    presentation.dispose()

Speicher und große Präsentationen

In der Regel benötigen Computer zum Laden einer großen Präsentation viel temporären Speicher. Der gesamte Inhalt der Präsentation wird in den Speicher geladen und die Datei (aus der die Präsentation geladen wurde) wird nicht mehr verwendet.

Betrachten Sie eine große PowerPoint‑Präsentation (large.pptx), die eine 1,5 GB‑Videodatei enthält. Die Standardmethode zum Laden der Präsentation wird in diesem Python‑Code beschrieben:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation("large.pptx")
try:
    presentation.save("large.pdf", SaveFormat.Pdf)
finally:
    presentation.dispose()

Diese Methode verbraucht jedoch etwa 1,6 GB temporären Speicher.

Eine große Präsentation als BLOB laden

Durch die Verwendung der BLOB‑Verarbeitung können Sie eine große Präsentation mit wenig Speicher laden. Dieser Python‑Code zeigt, wie man BLOB‑Verarbeitung nutzt, um eine große Präsentationsdatei (large.pptx) zu laden:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import LoadOptions, Presentation, PresentationLockingBehavior, SaveFormat

load_options = LoadOptions()
load_options.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked)
load_options.getBlobManagementOptions().setTemporaryFilesAllowed(True)

presentation = Presentation("large.pptx", load_options)
try:
    presentation.save("large.pdf", SaveFormat.Pdf)
finally:
    presentation.dispose()

Den Ordner für temporäre Dateien ändern

Wenn der BLOB‑Prozess verwendet wird, erstellt Ihr Computer temporäre Dateien im Standardordner für temporäre Dateien. Wenn Sie die temporären Dateien in einem anderen Ordner speichern möchten, können Sie die Einstellungen für den Speicher mit BlobManagementOptions.setTempFilesRootPath ändern:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import LoadOptions, PresentationLockingBehavior

load_options = LoadOptions()
load_options.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked)
load_options.getBlobManagementOptions().setTemporaryFilesAllowed(True)
load_options.getBlobManagementOptions().setTempFilesRootPath("temp")

Präsentationsobjekte freigeben, um Speicher zu entlasten

Beim Verarbeiten großer Präsentationen sollte die Presentation-Instanz ordnungsgemäß freigegeben werden, damit der von ihr belegte Speicher freigegeben wird. Rufen Sie nach der Verwendung der Präsentation Presentation.dispose auf, um nicht verwaltete Ressourcen freizugeben.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation("large.pptx")
try:
    # ...die Präsentation verarbeiten...
    presentation.save("large.pdf", SaveFormat.Pdf)
finally:
    # Ressourcen explizit freigeben.
    presentation.dispose()

FAQ

Welche Daten in einer Aspose.Slides‑Präsentation werden als BLOB behandelt und von BLOB‑Optionen gesteuert?

Große Binärobjekte wie Bilder, Audio und Video werden als BLOBs behandelt. Auch die gesamte Präsentationsdatei nutzt BLOB‑Verarbeitung, wenn sie geladen oder gespeichert wird. Diese Objekte unterliegen BLOB‑Richtlinien, die Ihnen erlauben, den Speicherverbrauch zu steuern und bei Bedarf auf temporäre Dateien auszulagern.

Wo konfiguriere ich BLOB‑Verarbeitungsregeln beim Laden einer Präsentation?

Verwenden Sie LoadOptions zusammen mit BlobManagementOptions. Dort setzen Sie das Speicherlimit für BLOBs, erlauben oder verbieten temporäre Dateien, wählen den Stammordner für temporäre Dateien und bestimmen das Verhalten der Quellen‑Sperrung.

Beeinflussen BLOB‑Einstellungen die Leistung und wie balanciere ich Geschwindigkeit vs. Speicher?

Ja. Das Halten von BLOBs im Speicher maximiert die Geschwindigkeit, erhöht jedoch den RAM‑Verbrauch; ein niedrigeres Speicherlimit verlagert mehr Arbeit auf temporäre Dateien, reduziert den RAM‑Verbrauch, verursacht aber zusätzlichen I/O‑Aufwand. Verwenden Sie die Methode setMaxBlobsBytesInMemory, um das optimale Gleichgewicht für Ihren Anwendungsfall zu finden.

Helfen BLOB‑Optionen beim Öffnen extrem großer Präsentationen (z. B. Gigabyte‑Größe)?

Ja. BlobManagementOptions ist für solche Szenarien konzipiert: Das Aktivieren temporärer Dateien und die Nutzung von Quellen‑Sperren können den Spitzen‑RAM‑Verbrauch erheblich senken und die Verarbeitung sehr großer Decks stabilisieren.

Kann ich BLOB‑Richtlinien beim Laden aus Streams anstelle von Dateien verwenden?

Ja. Die gleichen Regeln gelten für Streams: Die Präsentationsinstanz kann den Eingabestream besitzen und sperren (abhängig vom gewählten Sperrmodus), und temporäre Dateien werden verwendet, wenn sie erlaubt sind, sodass der Speicherverbrauch während der Verarbeitung vorhersehbar bleibt.