Comment enregistrer des présentations en C++

Comment enregistrer des présentations en C++

Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx format utilisant prs.save(path, SaveFormat::PPTX). Ce guide couvre le modèle d’enregistrement correct, l’enregistrement vers un chemin différent, et les erreurs courantes liées à l’enregistrement.

Guide étape par étape

Étape 1 : Compiler et lier la bibliothèque

git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .

Étape 2 : Ouvrir ou créer une présentation

Utilisez l’allocation sur la pile afin que le destructeur nettoie automatiquement. Appelez save() avant que l’objet ne sorte de la portée.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    // Create new
    {
        asf::Presentation prs;
        prs.save("new.pptx", asf::SaveFormat::PPTX);
    }

    // Open existing
    {
        asf::Presentation prs("input.pptx");
        prs.save("output.pptx", asf::SaveFormat::PPTX);
    }

    return 0;
}

Étape 3 : Enregistrer après toutes les modifications

Placez le save() appel après que toutes les modifications soient terminées, mais avant que le Presentation ne sorte de la portée.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    auto& shape = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 300, 100);
    shape.text_frame()->set_text("Hello, World!");
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Étape 4 : Enregistrer vers un chemin différent

Fournissez un chemin de sortie différent pour créer un nouveau fichier sans modifier l’original :

asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);

Le template.pptx fichier n’est pas modifié ; customized.pptx est créé (ou écrasé s’il existe déjà).


Étape 5 : Vérifier la sortie

Après l’enregistrement, vérifiez que le fichier existe :

#include <filesystem>
#include <iostream>

auto output = std::filesystem::path("output.pptx");
std::cout << "Saved: " << std::filesystem::exists(output)
          << ", size: " << std::filesystem::file_size(output) << " bytes\n";

Format d’enregistrement pris en charge

FormatValeur d’énumérationPris en charge
PPTX (Office Open XML)SaveFormat::PPTXOui
PDFN/ANon
HTMLN/ANon
SVGN/ANon
PNG / JPEGN/ANon
ODP (OpenDocument)N/ANon

Seul le format PPTX est pris en charge. Tenter d’enregistrer dans un autre format déclenchera une exception.


Problèmes courants et solutions

Erreur d’accès refusé lors de l’écriture

Le fichier de sortie est ouvert dans une autre application (par ex., PowerPoint a le fichier ouvert). Fermez le fichier dans les autres applications avant d’enregistrer.

Le fichier est créé mais apparaît vide ou corrompu

Assurer prs.save() est appelé avant le Presentation l’objet est détruit. Après la destruction, l’état interne est libéré et les appels ultérieurs échoueront ou produiront une sortie invalide.

Exception lors de l’enregistrement

Cela se produit lorsqu’on tente d’enregistrer dans un format autre que PPTX, ou lorsqu’une fonctionnalité non prise en charge (comme les graphiques ou les animations) est utilisée lors de l’enregistrement.


Foire aux questions

Puis‑je enregistrer dans le même fichier que celui que j’ai ouvert ?

Oui. Enregistrer sur le même chemin écrase le fichier original :

asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original

Puis‑je enregistrer dans un tampon mémoire au lieu d’un fichier ?

Enregistrement directement vers un std::vector<uint8_t> ou std::ostream n’est pas pris en charge dans l’API actuelle. Enregistrez dans un fichier temporaire et lisez les octets :

#include <filesystem>
#include <fstream>
#include <vector>

auto tmp = std::filesystem::temp_directory_path() / "temp.pptx";
prs.save(tmp.string(), asf::SaveFormat::PPTX);

std::ifstream in(tmp, std::ios::binary);
std::vector<uint8_t> bytes((std::istreambuf_iterator<char>(in)),
                            std::istreambuf_iterator<char>());
std::filesystem::remove(tmp);

L’enregistrement préserve‑t‑il le contenu que je n’ai pas modifié ?

Oui. Les parties XML inconnues du fichier original sont conservées mot pour mot. La bibliothèque ne sérialise que les parties du modèle de document qu’elle comprend, et transmet telles quelles tout XML qu’elle ne reconnaît pas.


Voir aussi

 Français