Ouvrir des présentations en Java

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 en récupérer les informations, 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, créez une instance de la classe Présentation et transmettez le chemin du fichier à son constructeur.

L’exemple Java 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.
Presentation presentation = new Presentation("Sample.pptx");
try {
    // Afficher le nombre total de diapositives dans la présentation.
    System.out.println(presentation.getSlides().size());
} finally {
    presentation.dispose();
}

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

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

LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("YOUR_PASSWORD");

Presentation presentation = new Presentation("Sample.pptx", loadOptions);
try {
    // Effectuer des opérations sur la présentation déchiffrée.
} finally {
    presentation.dispose();
}

Ouvrir de grandes présentations

Aspose.Slides propose des options—en particulier la méthode getBlobManagementOptions de la classe LoadOptions—pour vous aider à charger de grandes présentations.

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

final String filePath = "LargePresentation.pptx";

LoadOptions loadOptions = new LoadOptions();
// Choisissez le comportement KeepLocked — le fichier de présentation restera verrouillé pendant la durée de vie
// 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.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked);
loadOptions.getBlobManagementOptions().setTemporaryFilesAllowed(true);
loadOptions.getBlobManagementOptions().setMaxBlobsBytesInMemory(10 * 1024 * 1024); // 10 Mo

Presentation presentation = new Presentation(filePath, loadOptions);
try {
    // 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.getSlides().get_Item(0).setName("Large presentation");

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

    // Ne faites pas cela ! Une exception d'E/S sera levée parce que le fichier est verrouillé jusqu'à ce que l'objet présentation soit disposé.
    //Files.delete(Paths.get(filePath));
} finally {
    presentation.dispose();
}

// Il est correct de le faire ici. Le fichier source n'est plus verrouillé par l'objet présentation.
Files.delete(Paths.get(filePath));

Contrôler les ressources externes

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

LoadOptions loadOptions = new LoadOptions();
loadOptions.setResourceLoadingCallback(new ImageLoadingHandler());

Presentation presentation = new Presentation("Sample.pptx", loadOptions);
class ImageLoadingHandler implements IResourceLoadingCallback {
    public int resourceLoading(IResourceLoadingArgs args) {
        if (args.getOriginalUri().endsWith(".jpg")) {
            try {
                // Charger une image de substitution.
                byte[] imageData = Files.readAllBytes(new File("aspose-logo.jpg").toPath());
                args.setData(imageData);
                return ResourceLoadingAction.UserProvided;
            } catch (RuntimeException ex) {
                return ResourceLoadingAction.Skip;
            }  catch (IOException ex) {
                ex.printStackTrace();
            }
        } else if (args.getOriginalUri().endsWith(".png")) {
            // Définir une URL de substitution.
            args.setUri("http://www.google.com/images/logos/ps_logo2.png");
            return ResourceLoadingAction.Default;
        }
        // Ignorer toutes les autres images.
        return ResourceLoadingAction.Skip;
    }
}

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.setDeleteEmbeddedBinaryObjects, 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 Java suivant montre comment charger une présentation sans aucun contenu binaire intégré :

LoadOptions loadOptions = new LoadOptions();
loadOptions.setDeleteEmbeddedBinaryObjects(true);

Presentation presentation = new Presentation("malware.ppt", loadOptions);
try {
    // Effectuer des opérations sur la présentation.
} finally {
    presentation.dispose();
}

FAQ

Comment savoir si un fichier est corrompu et ne peut pas être ouvert ?

Vous recevrez une exception de validation d’analyse/format lors du chargement. Ces erreurs mentionnent souvent une structure ZIP invalide ou des enregistrements PowerPoint cassés.

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

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

Qu’en est-il des médias intégrés (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 sont accessibles dans votre environnement ; sinon le rendu/export peut omettre les médias.