Enregistrer les présentations en Python via Java

Vue d’ensemble

Après avoir créé une présentation ou ouvrir une présentation existante, utilisez la méthode Presentation.save pour enregistrer le résultat. Aspose.Slides for Python via Java peut enregistrer une présentation dans un fichier ou un flux aux formats PowerPoint, OpenDocument, PDF et autres. Les sections suivantes couvrent les opérations d’enregistrement standard et les options disponibles pour la sortie PPTX.

Enregistrer les présentations dans des fichiers

Pour enregistrer une présentation dans un fichier, transmettez le chemin de sortie et une valeur SaveFormat à la méthode Presentation.save. La valeur du format détermine le type de fichier créé par Aspose.Slides.

L’exemple suivant crée une présentation et l’enregistre au format PPTX :

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    # Ajoutez ou modifiez le contenu de la présentation ici.

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

Enregistrer les présentations dans leur format d’origine

Dans une application de traitement par lots, le format d’entrée peut ne pas être connu à l’avance. Après avoir chargé un fichier, lisez son format d’origine à l’aide de la méthode Presentation.getSourceFormat. Transmettez la valeur SourceFormat obtenue à SlideUtil.toSaveFormat pour obtenir la valeur correspondante de SaveFormat, puis utilisez Presentation.save pour écrire la présentation modifiée.

L’exemple complet suivant traite chaque fichier d’un répertoire d’entrée, met à jour son titre et l’enregistre dans un répertoire de sortie dans le même format que celui d’origine :

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 mappe PPT, PPTX, ODP, PPTM, PPSX, PPSM, POTX, POTM, PPS, POT, OTP, FODP et PowerPoint XML vers leurs formats d’enregistrement de présentation correspondants. Il ne mappe que les formats source de présentation ; il ne sert pas à sélectionner des formats d’exportation tels que PDF, HTML, TIFF ou images. Transmettre une valeur SourceFormat non prise en charge ou invalide entraîne une IllegalArgumentException.

Les fichiers PPT, PPS et POT hérités utilisent le même conteneur binaire. Lorsqu’une telle présentation est chargée depuis un flux sans extension de fichier, un fichier PPS ou POT peut donc être identifié comme PPT. Si la préservation de ces sous‑types hérités est requise, conservez le nom de fichier ou les métadonnées de format d’origine séparément et utilisez‑les lors du choix du nom et du format de sortie.

Enregistrer les présentations dans des flux

Pour écrire une présentation sans dépendre d’un chemin de fichier final, transmettez un flux ouvrable en écriture et une valeur SaveFormat à la méthode Presentation.save. Cette approche est utile lorsque la sortie doit être renvoyée depuis un service web, stockée dans une base de données ou traitée en mémoire.

L’exemple suivant enregistre une nouvelle présentation dans un flux de fichier :

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()

Enregistrer les présentations avec un type de vue prédéfini

Vous pouvez spécifier la vue dans laquelle PowerPoint ouvre initialement une présentation enregistrée. Utilisez la méthode ViewProperties.setLastView avec une valeur ViewType avant l’enregistrement.

L’exemple suivant configure la vue Maîtres des diapositives comme vue initiale :

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()

Enregistrer les présentations au format Office Open XML strict

Pour créer un fichier PPTX conforme au profil Strict d’Office Open XML, créez une instance PptxOptions et utilisez sa méthode setConformance avec Conformance.Iso29500_2008_Strict. Transmettez ensuite les options à la méthode Presentation.save.

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()

Enregistrer les présentations au format Office Open XML en mode Zip64

Une archive ZIP standard limite la taille compressée et non compressée de chaque entrée, la taille totale de l’archive et le nombre d’entrées. Comme un fichier PPTX est une archive ZIP, une présentation très volumineuse peut dépasser ces limites. Les extensions ZIP64 augmentent les limites de taille et de nombre d’entrées applicables.

Utilisez la méthode PptxOptions.setZip64Mode pour contrôler si Aspose.Slides écrit les extensions ZIP64 :

  • IfNecessary utilise ZIP64 uniquement lorsque la présentation dépasse les limites standard de ZIP. C’est le mode par défaut.
  • Never désactive les extensions ZIP64.
  • Always écrit toujours les extensions ZIP64.

L’exemple suivant active toujours les extensions ZIP64 pour la présentation de sortie :

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()

Enregistrer les présentations au format Office Open XML avec niveaux de compression

Pour la sortie PPTX, vous pouvez équilibrer la vitesse d’enregistrement et la taille du fichier en utilisant la méthode PptxOptions.setCompressionLevel. La classe CompressionLevel propose ces valeurs :

  • None stocke les données sans compression.
  • Level1 offre la compression la plus rapide et le résultat compressé le plus volumineux.
  • Level2 à Level5 favorisent progressivement une sortie plus petite au détriment de la vitesse d’enregistrement.
  • Level6 équilibre vitesse d’enregistrement et taille du fichier. C’est le niveau par défaut.
  • Level7 et Level8 favorisent davantage une sortie plus petite au détriment de la vitesse.
  • Level9 offre la compression la plus forte et requiert le plus de temps de traitement.

L’exemple suivant enregistre une présentation sans compression :

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()

L’exemple suivant utilise le niveau de compression maximal :

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()

Enregistrer les présentations sans rafraîchir la vignette

Lorsqu’une présentation est enregistrée au format PPTX, la méthode PptxOptions.setRefreshThumbnail contrôle la vignette du document :

  • True régénère la vignette pendant l’opération d’enregistrement. C’est la valeur par défaut.
  • False préserve la vignette existante. Si la présentation n’a pas de vignette, Aspose.Slides n’en génère pas.

L’exemple suivant enregistre une présentation sans rafraîchir sa vignette :

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()

Rapporter la progression de l’enregistrement en pourcentage

Pour suivre une opération d’enregistrement, enregistrez un gestionnaire de progression Python via jpype.JProxy et transmettez‑le à la méthode SaveOptions.setProgressCallback. Aspose.Slides appellera alors la méthode reporting du gestionnaire avec les valeurs de progression pendant l’exportation.

L’exemple suivant rapporte la progression d’une exportation PDF dans la 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

Aspose.Slides prend‑il en charge l’enregistrement incrémental ou le « fast save » ?

Non. Chaque opération d’enregistrement écrit un fichier complet plutôt que de ne mettre à jour que les parties modifiées.

Plusieurs threads peuvent‑ils enregistrer la même instance de Presentation ?

Non. Une instance de Presentation n’est pas thread‑safe (/slides/fr/python-java/multithreading/). Accédez et enregistrez chaque instance depuis un seul thread à la fois.

Que se passe‑t‑il avec les hyperliens et les fichiers liés externement lors de l’enregistrement d’une présentation ?

Les hyperliens restent dans la présentation. Aspose.Slides ne copie pas les fichiers liés externement, de sorte que la présentation enregistrée doit toujours pouvoir accéder à leurs emplacements.

Puis‑je enregistrer les métadonnées du document telles que l’auteur, le titre, l’entreprise et la date de création ?

Oui. Définissez les propriétés du document appropriées avant l’enregistrement, et Aspose.Slides les écrit dans le fichier de sortie.