Com desar presentacions en C++

Com desar presentacions en C++

Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx format utilitzant prs.save(path, SaveFormat::PPTX). Aquesta guia cobreix el patró correcte de desament, desar a una ruta diferent i errors comuns relacionats amb el desament.

Guia pas a pas

Pas 1: Compilar i enllaçar la 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 .

Pas 2: Obre o crea una presentació

Utilitzeu l’assignació a la pila perquè el destructor netegi automàticament. Crida save() abans que l’objecte surti del seu àmbit.

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

Pas 3: Desa després de totes les modificacions

Col·loqueu el save() crida després que totes les modificacions s’hagin completat, però abans que el Presentation surti del seu àmbit.

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

Pas 4: Desa a una ruta diferent

Passa una ruta de sortida diferent per crear un fitxer nou sense modificar l’original:

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

El template.pptx fitxer no es modifica; customized.pptx es crea (o es sobreescriu si ja existeix).


Pas 5: Verifica la sortida

Després del desament, comprova que el fitxer existeix:

#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 desament compatible

FormatValor d’enumeracióCompatible
PPTX (Office Open XML)SaveFormat::PPTX
PDFN/ANo
HTMLN/ANo
SVGN/ANo
PNG / JPEGN/ANo
ODP (OpenDocument)N/ANo

Només es suporta PPTX. Intentar desar en qualsevol altre format llençarà una excepció.


Problemes comuns i solucions

Error de permís denegat en escriure

El fitxer de sortida està obert en una altra aplicació (p. ex., PowerPoint té el fitxer obert). Tanca el fitxer en les altres aplicacions abans de desar.

El fitxer es crea però apareix buit o corrupte

Assegura prs.save() es crida abans de Presentation L’objecte «<SEG_2»> és destruït. Després de la destrucció, l’estat intern es allibera i les crides posteriors fallaran o produiran una sortida invàlida.

Excepció en desar

Això ocorre quan s’intenta desar en un format diferent de PPTX, o quan s’utilitza una característica no compatible (com ara gràfics o animacions) durant el desament.


Preguntes freqüents

Puc desar al mateix fitxer que vaig obrir?

Sí. Desar al mateix camí sobrescriu el fitxer original:

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

Puc desar en una memòria intermèdia en lloc d’un fitxer?

Guardar directament a un std::vector<uint8_t> o std::ostream no és compatible amb l’API actual. Deseu en un fitxer temporal i llegiu els bytes:

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

El desament conserva el contingut que no he modificat?

Sí. Les parts XML desconegudes del fitxer original es conserven literalment. La biblioteca només serialitza les parts del model de document que entén i passa sense modificar qualsevol XML que no reconeix.


Vegeu també

 Català