Ouvrir des présentations en C++

Vue d’ensemble

Au‑delà de la création de présentations PowerPoint à partir de zéro, Aspose.Slides vous permet également d’ouvrir des présentations existantes. Après le chargement d’une présentation, vous pouvez récupérer des informations à son sujet, modifier le contenu des diapositives, ajouter de nouvelles diapositives, supprimer celles existantes, et plus encore.

Ouvrir des présentations

Pour ouvrir une présentation existante, instanciez la classe Presentation et transmettez le chemin du fichier à son constructeur.

L’exemple C++ suivant montre comment ouvrir une présentation et obtenir le nombre de diapositives :

// Instancier la classe Presentation et passer un chemin de fichier à son constructeur.
auto presentation = MakeObject<Presentation>(u"Sample.pptx");

// Afficher le nombre total de diapositives dans la présentation.
Console::WriteLine(presentation->get_Slides()->get_Count());

presentation->Dispose();

Ouvrir des présentations protégées par mot de passe

Lorsque vous devez ouvrir une présentation protégée par mot de passe, transmettez le mot de passe via la méthode set_Password de la classe LoadOptions pour la déchiffrer et la charger. Le code C++ suivant illustre cette opération :

auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_Password(u"YOUR_PASSWORD");

auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);
    
// Effectuer des opérations sur la présentation décryptée.

presentation->Dispose();

Ouvrir de grandes présentations

Aspose.Slides propose des options — notamment la méthode get_BlobManagementOptions dans la classe LoadOptions — pour vous aider à charger de grandes présentations.

Le code C++ suivant montre comment charger une grande présentation (par exemple, 2 Go) :

auto filePath = u"LargePresentation.pptx";

auto loadOptions = MakeObject<LoadOptions>();
// Choisissez le comportement KeepLocked - le fichier de présentation restera verrouillé pendant toute la durée de
// l'instance Presentation, mais il n'est pas nécessaire de le charger en mémoire ou de le copier dans un fichier temporaire.
loadOptions->get_BlobManagementOptions()->set_PresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
loadOptions->get_BlobManagementOptions()->set_IsTemporaryFilesAllowed(true);
loadOptions->get_BlobManagementOptions()->set_MaxBlobsBytesInMemory(10 * 1024 * 1024); // 10 Mo

auto presentation = MakeObject<Presentation>(filePath, loadOptions);

// La grande présentation a été chargée et peut être utilisée, tout en maintenant une faible consommation de mémoire.

// Apportez des modifications à la présentation.
presentation->get_Slide(0)->set_Name(u"Large presentation");

// Enregistrez la présentation dans un autre fichier. La consommation de mémoire reste faible pendant cette opération.
presentation->Save(u"LargePresentation-copy.pptx", SaveFormat::Pptx);

// Ne faites pas cela ! Une exception d'E/S sera levée car le fichier est verrouillé jusqu'à ce que l'objet Presentation soit libéré.
File::Delete(filePath);

presentation->Dispose();

// Il est correct de le faire ici. Le fichier source n'est plus verrouillé par l'objet Presentation.
File::Delete(filePath);

Contrôler les ressources externes

Aspose.Slides fournit l’interface IResourceLoadingCallback qui vous permet de gérer les ressources externes. Le code C++ suivant montre comment utiliser l’interface IResourceLoadingCallback :

class ImageLoadingHandler : public IResourceLoadingCallback
{
public:
    ResourceLoadingAction ResourceLoading(SharedPtr<IResourceLoadingArgs> args) override
    {
        if (args->get_OriginalUri().EndsWith(u".jpg"))
        {
            try
            {
                // Charger une image de substitution.
                auto imageData = File::ReadAllBytes(u"aspose-logo.jpg");
                args->SetData(imageData);
                return ResourceLoadingAction::UserProvided;
            }
            catch (Exception&)
            {
                return ResourceLoadingAction::Skip;
            }
        }
        else if (args->get_OriginalUri().EndsWith(u".png"))
        {
            // Définir une URL de substitution.
            args->set_Uri(u"http://www.google.com/images/logos/ps_logo2.png");
            return ResourceLoadingAction::Default;
        }

        // Ignorer toutes les autres images.
        return ResourceLoadingAction::Skip;
    }
};
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_ResourceLoadingCallback(MakeObject<ImageLoadingHandler>());

auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);

Charger des présentations sans objets binaires intégrés

Une présentation PowerPoint peut contenir les types d’objets binaires intégrés suivants :

En utilisant la méthode ILoadOptions::set_DeleteEmbeddedBinaryObjects, vous pouvez charger une présentation sans aucun objet binaire intégré.

Cette méthode est utile pour supprimer le contenu binaire potentiellement malveillant. Le code C++ suivant montre comment charger une présentation sans aucun contenu binaire intégré :

auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_DeleteEmbeddedBinaryObjects(true);

auto presentation = MakeObject<Presentation>(u"malware.ppt", loadOptions);

// Effectuer des opérations sur la présentation.

presentation->Dispose();

FAQ

Comment puis‑je savoir qu’un fichier est corrompu et ne peut pas être ouvert ?

Vous obtiendrez une exception de validation de parsing/format lors du chargement. Ces erreurs mentionnent souvent une structure ZIP invalide ou des enregistrements PowerPoint endommagés.

Que se passe‑t‑il si des polices requises sont manquantes lors de l’ouverture ?

Le fichier s’ouvrira, mais le rendu/export pourra substituer les polices. Configurez les substitutions de polices ou ajoutez les polices requises à l’environnement d’exécution.

Qu’en est‑il du média intégré (vidéo/audio) lors de l’ouverture ?

Ils deviennent disponibles en tant que ressources de la présentation. Si les médias sont référencés via des chemins externes, assurez‑vous que ces chemins soient accessibles dans votre environnement ; sinon le rendu/export pourra les ignorer.