Cum să salvați prezentări în C++

Cum să salvați prezentări în C++

Aspose.Slides FOSS pentru C++ salvează prezentările exclusiv în formatul .pptx utilizând prs.save(path, SaveFormat::PPTX). Acest ghid acoperă modelul corect de salvare, salvarea într-o altă cale și erorile comune legate de salvare.

Ghid pas cu pas

Pasul 1: Construiește și leagă biblioteca

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 .

Pasul 2: Deschide sau creează o prezentare

Folosiți alocarea pe stivă astfel încât destructorul să curețe automat. Apelați save() înainte ca obiectul să iasă din domeniu.

#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;
}

Pasul 3: Salvează după toate modificările

Plasați apelul save() după ce toate modificările sunt finalizate, dar înainte ca Presentation să iasă din domeniu.

#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;
}

Pasul 4: Salvează într-o altă cale

Furnizați o cale de ieșire diferită pentru a crea un fișier nou fără a modifica originalul:

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

Fișierul template.pptx nu este modificat; customized.pptx este creat (sau suprascris dacă există deja).


Pasul 5: Verificați ieșirea

După salvare, verificați dacă fișierul există:

#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 de salvare acceptat

FormatValoare EnumSuportat
PPTX (Office Open XML)SaveFormat::PPTXDa
PDFN/ANu
HTMLN/ANu
SVGN/ANu
PNG / JPEGN/ANu
ODP (OpenDocument)N/ANu

Doar PPTX este acceptat. Încercarea de a salva în orice alt format va genera o excepție.


Probleme comune și soluții

Eroare de permisiune refuzată la scriere

Fișierul de ieșire este deschis într-o altă aplicație (de exemplu, PowerPoint are fișierul deschis). Închideți fișierul în alte aplicații înainte de a salva.

Fișierul este creat, dar pare gol sau corupt.

Asigurați-vă că prs.save() este apelat înainte ca obiectul Presentation să fie distrus. După distrugere, starea internă este eliberată și apelurile ulterioare vor eșua sau vor produce rezultate invalide.

Excepție la salvare

Acest lucru se întâmplă când se încearcă un format de salvare diferit de PPTX sau când se utilizează o funcționalitate neacceptată (cum ar fi graficele sau animațiile) în timpul salvării.


Întrebări frecvente

Pot să salvez în același fișier pe care l-am deschis?

Da. Salvarea în aceeași cale suprascrie fișierul original:

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

Pot să salvez într-un buffer de memorie în loc de un fișier?

Salvarea directă într-un std::vector<uint8_t> sau std::ostream nu este suportată în API-ul curent. Salvați într-un fișier temporar și citiți octeții:

#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);

Salvarea păstrează conținutul pe care nu l-am modificat?

Da. Părțile XML necunoscute din fișierul original sunt păstrate exact așa. Biblioteca serializează doar părțile modelului de document pe care le înțelege și trece prin orice XML pe care nu îl recunoaște.


Vezi și

 Română