Sådan gemmer du præsentationer i C++

Sådan gemmer du præsentationer i C++

Aspose.Slides FOSS for C++ gemmer præsentationer udelukkende i .pptx‑format ved hjælp af prs.save(path, SaveFormat::PPTX). Denne vejledning dækker det korrekte gemmemønster, gemning til en anden sti og almindelige fejl relateret til gemning.

Trin-for-trin guide

Trin 1: Byg og link biblioteket

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 .

Trin 2: Åbn eller opret en præsentation

Brug stakallokering, så destruktøren rydder op automatisk. Kald save() før objektet går ud af scope.

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

Trin 3: Gem efter alle ændringer

Placér save()‑kaldet efter at alle ændringer er fuldført, men før Presentation går ud af scope.

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

Trin 4: Gem til en anden sti

Angiv en anden outputsti for at oprette en ny fil uden at ændre den oprindelige:

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

Filen template.pptx ændres ikke; customized.pptx oprettes (eller overskrives, hvis den allerede findes).


Trin 5: Verificer outputtet

Efter gemningen, tjek om filen findes:

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

Understøttet gemmeformat

FormatEnum-værdiUnderstøttet
PPTX (Office Open XML)SaveFormat::PPTXJa
PDFN/ANej
HTMLN/ANej
SVGN/ANej
PNG / JPEGN/ANej
ODP (OpenDocument)N/ANej

Kun PPTX understøttes. Forsøg på at gemme i et andet format vil kaste en undtagelse.


Almindelige problemer og løsninger

Fejl: Tilladelse nægtet ved skrivning

Outputfilen er åben i et andet program (f.eks. har PowerPoint filen åben). Luk filen i andre programmer, før du gemmer.

Filen oprettes, men fremstår som tom eller beskadiget

Sørg for, at prs.save() kaldes, før Presentation-objektet destrueres. Efter destruktion frigives den interne tilstand, og efterfølgende kald vil fejle eller producere ugyldigt output.

Undtagelse ved lagring

Dette opstår, når du forsøger at gemme i et andet format end PPTX, eller når du bruger en ikke‑understøttet funktion (såsom diagrammer eller animationer) under gemning.


Ofte stillede spørgsmål

Kan jeg gemme til den samme fil, jeg åbnede?

Ja. Gemning til den samme sti overskriver den oprindelige fil:

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

Kan jeg gemme til en hukommelsesbuffer i stedet for en fil?

At gemme direkte til en std::vector<uint8_t> eller std::ostream understøttes ikke i den nuværende API. Gem til en midlertidig fil og læs 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);

Bevarer gemning indhold, som jeg ikke har ændret?

Ja. Ukendte XML-dele fra den oprindelige fil bevares ordret. Biblioteket serialiserer kun de dele af dokumentmodellen, som det forstår, og sender enhver XML, den ikke genkender, videre.


Se også

 Dansk