Presentaties opslaan in Python via Java

Overzicht

Nadat u een presentatie maakt of open een bestaande , gebruikt u de Presentation.save‑methode om het resultaat weg te schrijven. Aspose.Slides for Python via Java kan een presentatie opslaan naar een bestand of stream in PowerPoint, OpenDocument, PDF en andere formaten. De volgende secties behandelen de standaard opslaan‑bewerkingen en de beschikbare opties voor PPTX‑output.

Presentaties opslaan naar bestanden

Om een presentatie op te slaan naar een bestand, geeft u het uitvoerpad en een SaveFormat‑waarde door aan de Presentation.save‑methode. De formaatwaarde bepaalt het type bestand dat Aspose.Slides maakt.

Het volgende voorbeeld maakt een presentatie en slaat deze op als een PPTX‑bestand:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    # Voeg hier presentatie-inhoud toe of wijzig deze.

    presentation.save("Output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Presentaties opslaan in hun oorspronkelijke formaat

Voor voorbeelden van bestand‑ en streamdetectie, het gedrag van nieuw aangemaakte presentaties en het onderscheid tussen bron‑ en uitvoerformaten, zie Determine the Original Presentation Format.

In een batchverwerkingsapplicatie is het invoerformaat mogelijk niet van tevoren bekend. Na het laden van een bestand, lees het oorspronkelijke formaat uit de Presentation.getSourceFormat‑methode. Geef de verkregen SourceFormat‑waarde door aan SlideUtil.toSaveFormat om de bijbehorende SaveFormat‑waarde te verkrijgen, en gebruik vervolgens Presentation.save om de gewijzigde presentatie weg te schrijven.

Het volgende volledige voorbeeld verwerkt elk bestand in een invoermap, werkt de titel bij en slaat het op in een uitvoermap in het formaat waaruit het werd geladen:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SlideUtil
from pathlib import Path

IllegalArgumentException = jpype.JClass("java.lang.IllegalArgumentException")
input_directory = Path("Input")
output_directory = Path("Output")

try:
    output_directory.mkdir(parents=True, exist_ok=True)
except OSError:
    print("Cannot create the output directory.")

if input_directory.is_dir() and output_directory.is_dir():
    for input_file in input_directory.iterdir():
        if input_file.is_file():
            try:
                presentation = Presentation(str(input_file))
                try:
                    save_format = SlideUtil.toSaveFormat(presentation.getSourceFormat())
                    presentation.getDocumentProperties().setTitle("Processed by the batch application")

                    output_file = output_directory / input_file.name
                    presentation.save(str(output_file), save_format)
                finally:
                    presentation.dispose()
            except IllegalArgumentException as exception:
                print(f"Cannot map the source format of '{input_file}': {exception}")
            except Exception as exception:
                print(f"Cannot process '{input_file}': {exception}")

SlideUtil.toSaveFormat zet PPT, PPTX, ODP, PPTM, PPSX, PPSM, POTX, POTM, PPS, POT, OTP, FODP en PowerPoint‑XML om naar hun overeenkomstige presentatie‑opslaan‑formaten. Het zet alleen presentatie‑bronformaten om; het is niet bedoeld om exportformaten zoals PDF, HTML, TIFF of afbeeldingen te selecteren. Het doorgeven van een niet‑ondersteunde of ongeldige SourceFormat‑waarde leidt tot een IllegalArgumentException.

Legacy‑PPT, PPS en POT‑bestanden gebruiken dezelfde binaire container. Wanneer zo’n presentatie uit een stream zonder bestandsnaam wordt geladen, kan een PPS‑ of POT‑bestand dus worden herkend als PPT. Als het behouden van deze legacy‑subtypes vereist is, bewaar dan de oorspronkelijke bestandsnaam of format‑metadata apart en gebruik deze bij het kiezen van de uitvoer‑bestandsnaam en -formaat.

Presentaties opslaan naar streams

Om een presentatie weg te schrijven zonder te rekenen op een definitief bestandspad, geeft u een schrijfbare stream en een SaveFormat‑waarde door aan de Presentation.save‑methode. Deze aanpak is bruikbaar wanneer de uitvoer moet worden geretourneerd vanuit een webservice, opgeslagen in een database of in het geheugen verwerkt.

Het volgende voorbeeld slaat een nieuwe presentatie op naar een bestands‑stream:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

FileOutputStream = jpype.JClass("java.io.FileOutputStream")

presentation = Presentation()
try:
    output_stream = FileOutputStream("Output.pptx")
    try:
        presentation.save(output_stream, SaveFormat.Pptx)
    finally:
        output_stream.close()
finally:
    presentation.dispose()

Presentaties opslaan met een vooraf gedefinieerd weergavetype

U kunt het weergavetype specificeren waarin PowerPoint een opgeslagen presentatie in eerste instantie opent. Gebruik de ViewProperties.setLastView‑methode met een ViewType‑waarde vóór het opslaan.

Het volgende voorbeeld stelt de Slide Master‑weergave in als startweergave:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat, ViewType

presentation = Presentation()
try:
    presentation.getViewProperties().setLastView(ViewType.SlideMasterView)
    presentation.save("SlideMasterView.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Presentaties opslaan in het Strict Office Open XML‑formaat

Om een PPTX‑bestand te maken dat voldoet aan het Strict‑profiel van Office Open XML, maakt u een PptxOptions‑instantie aan en gebruikt u de setConformance‑methode met Conformance.Iso29500_2008_Strict. Geef vervolgens de opties door aan de Presentation.save‑methode.

import jpype
import asposeslides

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

from asposeslides.api import Conformance, PptxOptions, Presentation, SaveFormat

options = PptxOptions()
options.setConformance(Conformance.Iso29500_2008_Strict)

presentation = Presentation()
try:
    presentation.save("StrictOfficeOpenXml.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

Presentaties opslaan in Office Open XML‑formaat in Zip64‑modus

Een standaard ZIP‑archief beperkt de gecomprimeerde en ongecomprimeerde grootte van elke invoer, de totale archiefgrootte en het aantal invoeren. Omdat een PPTX‑bestand een ZIP‑archief is, kan een zeer grote presentatie deze limieten overschrijden. ZIP64‑extensies verhogen de toepasselijke grootte‑ en invoeraantal‑limieten.

Gebruik de PptxOptions.setZip64Mode‑methode om te bepalen of Aspose.Slides ZIP64‑extensies schrijft:

  • IfNecessary gebruikt ZIP64 alleen wanneer de presentatie de standaard ZIP‑limieten overschrijdt. Dit is de standaardmodus.
  • Never schakelt ZIP64‑extensies uit.
  • Always schrijft altijd ZIP64‑extensies.

Het volgende voorbeeld schakelt ZIP64‑extensies altijd in voor de uitvoer‑presentatie:

import jpype
import asposeslides

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

from asposeslides.api import PptxOptions, Presentation, SaveFormat, Zip64Mode

presentation = Presentation("Sample.pptx")
try:
    options = PptxOptions()
    options.setZip64Mode(Zip64Mode.Always)

    presentation.save("OutputZip64.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

Presentaties opslaan in Office Open XML‑formaat met compressieniveaus

Voor PPTX‑output kunt u de opslaan‑snelheid afwegen tegen de bestandsgrootte door de PptxOptions.setCompressionLevel‑methode te gebruiken. De CompressionLevel‑klasse biedt de volgende waarden:

  • None slaat gegevens op zonder compressie.
  • Level1 biedt de snelste compressie en de grootste gecomprimeerde output.
  • Level2 tot en met Level5 geven steeds de voorkeur aan een kleinere output boven opslaan‑snelheid.
  • Level6 balanceert opslaan‑snelheid en bestandsgrootte. Dit is het standaardniveau.
  • Level7 en Level8 geven nog meer de voorkeur aan een kleinere output boven opslaan‑snelheid.
  • Level9 biedt de sterkste compressie en vereist de meeste verwerkingstijd.

Het volgende voorbeeld slaat een presentatie op zonder compressie:

import jpype
import asposeslides

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

from asposeslides.api import CompressionLevel, PptxOptions, Presentation, SaveFormat

presentation = Presentation("Sample.pptx")
try:
    options = PptxOptions()
    options.setCompressionLevel(CompressionLevel.None_)

    presentation.save("OutputNoCompression.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

Het volgende voorbeeld gebruikt het maximale compressieniveau:

import jpype
import asposeslides

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

from asposeslides.api import CompressionLevel, PptxOptions, Presentation, SaveFormat

presentation = Presentation("Sample.pptx")
try:
    options = PptxOptions()
    options.setCompressionLevel(CompressionLevel.Level9)

    presentation.save("OutputMaximumCompression.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

Presentaties opslaan zonder de miniatuur te vernieuwen

Wanneer een presentatie wordt opgeslagen als PPTX, regelt de PptxOptions.setRefreshThumbnail‑methode de document‑miniatuur:

  • True genereert de miniatuur opnieuw tijdens de opslaan‑operatie. Dit is de standaardwaarde.
  • False behoudt de bestaande miniatuur. Als de presentatie geen miniatuur heeft, genereert Aspose.Slides er geen.

Het volgende voorbeeld slaat een presentatie op zonder de miniatuur te vernieuwen:

import jpype
import asposeslides

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

from asposeslides.api import PptxOptions, Presentation, SaveFormat

presentation = Presentation("Sample.pptx")
try:
    options = PptxOptions()
    options.setRefreshThumbnail(False)

    presentation.save("Output.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

Opslaan‑voortgang rapporteren als percentage

Om de voortgang van een opslaan‑operatie te monitoren, registreert u een Python‑voortgangshandler via jpype.JProxy en geeft u deze door aan de SaveOptions.setProgressCallback‑methode. Aspose.Slides roept vervolgens de handler‑methode reporting aan met voortgangswaarden tijdens de export.

Het volgende voorbeeld rapporteert de voortgang van een PDF‑export naar de console:

import jpype
import asposeslides

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

from asposeslides.api import PdfOptions, Presentation, SaveFormat


class ExportProgressHandler:
    def reporting(self, progress_value):
        progress = int(progress_value)
        print(f"{progress}% of the file has been converted.")


handler = ExportProgressHandler()
callback = jpype.JProxy("com.aspose.slides.IProgressCallback", inst=handler)
options = PdfOptions()
options.setProgressCallback(callback)

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

FAQ

Ondersteunt Aspose.Slides incrementeel of “fast save”?

Nee. Elke opslaan‑operatie schrijft een volledig nieuw uitvoerbestand in plaats van alleen de gewijzigde delen bij te werken.

Kunnen meerdere threads dezelfde Presentation‑instantie opslaan?

Nee. Een Presentation‑instantie is niet thread‑safe (/slides/nl/python-java/multithreading/). Toegang en opslaan dient per instantie slechts door één thread tegelijk te gebeuren.

Wat gebeurt er met hyperlinks en extern gelinkte bestanden wanneer ik een presentatie opsla?

Hyperlinks blijven in de presentatie. Aspose.Slides kopieert geen extern gelinkte bestanden, dus de opgeslagen presentatie moet nog steeds toegang hebben tot hun locaties.

Kan ik document‑metadata zoals auteur, titel, bedrijf en aanmaakdatum opslaan?

Ja. Stel de geschikte document properties in vóór het opslaan, en Aspose.Slides schrijft ze naar het uitvoerbestand.