Kuinka tallentaa esityksiä C++:lla

Kuinka tallentaa esityksiä C++:lla

Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx formaattia käyttäen prs.save(path, SaveFormat::PPTX). Tämä opas kattaa oikean tallennusmallin, tallentamisen eri polkuun ja yleiset tallennukseen liittyvät virheet.

Vaiheittainen opas

Vaihe 1: Rakenna ja linkitä kirjasto

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 .

Vaihe 2: Avaa tai luo esitys

Käytä pinoallokointia, jotta destruktori puhdistaa automaattisesti. Kutsu save() ennen kuin objekti poistuu näkyvyysalueesta.

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

Vaihe 3: Tallenna kaikkien muutosten jälkeen

Sijoita save() kutsu sen jälkeen, kun kaikki muutokset on tehty, mutta ennen kuin Presentation poistuu näkyvyysalueesta.

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

Vaihe 4: Tallenna eri polkuun

Anna eri tulostuspolku luodaksesi uusi tiedosto muuttamatta alkuperäistä:

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

Tämä template.pptx tiedostoa ei muuteta; customized.pptx luodaan (tai ylikirjoitetaan, jos se on jo olemassa).


Vaihe 5: Vahvista tulos

Tallennuksen jälkeen tarkista, että tiedosto on olemassa:

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

Tuettu tallennusmuoto

FormaattiEnum-arvoTuettu
PPTX (Office Open XML)SaveFormat::PPTXKyllä
PDFN/AEi
HTMLN/AEi
SVGN/AEi
PNG / JPEGN/AEi
ODP (OpenDocument)N/AEi

Vain PPTX on tuettu. Yrittäessä tallentaa muussa formaatissa heitetään poikkeus.


Yleisiä ongelmia ja korjauksia

Käyttöoikeusvirhe kirjoitettaessa

Tulostustiedosto on avoinna toisessa sovelluksessa (esim. PowerPoint on avannut tiedoston). Sulje tiedosto muissa sovelluksissa ennen tallentamista.

Tiedosto on luotu, mutta se näyttää tyhjältä tai vioittuneelta

Varmista prs.save() kutsutaan ennen Presentation objekti on tuhottu. Tuhonnan jälkeen sisäinen tila vapautetaan ja myöhemmät kutsut epäonnistuvat tai tuottavat virheellistä tulostetta.

Poikkeus tallennettaessa

Tämä tapahtuu, kun yritetään tallentaa muotoon, joka ei ole PPTX, tai kun tallennuksen aikana käytetään tukematonta ominaisuutta (kuten kaavioita tai animaatioita).


Usein kysytyt kysymykset

Voinko tallentaa samaan tiedostoon, jonka avasin?

Kyllä. Tallentaminen samaan polkuun korvaa alkuperäisen tiedoston:

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

Voinko tallentaa muistipuskuriin tiedoston sijaan?

Tallentaminen suoraan std::vector<uint8_t> tai std::ostream ei ole tuettu nykyisessä API:ssa. Tallenna väliaikaistiedostoon ja lue tavut:

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

Säilyttääkö tallennus sisällön, jota en ole muokannut?

Kyllä. Alkuperäisen tiedoston tuntemattomat XML-osat säilytetään tarkalleen sellaisina kuin ne ovat. Kirjasto sarjoittaa vain ne dokumenttimallin osat, jotka se ymmärtää, ja ohjaa läpi kaikki XML, jota se ei tunnista.


Katso myös

 Suomi