Jak ukládat prezentace v C++

Jak ukládat prezentace v C++

Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx formát pomocí prs.save(path, SaveFormat::PPTX). Tento průvodce popisuje správný vzor ukládání, ukládání do jiné cesty a běžné chyby související s ukládáním.

Průvodce krok za krokem

Krok 1: Sestavte a propojte knihovnu

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 .

Krok 2: Otevřít nebo vytvořit prezentaci

Použijte alokaci na zásobníku, aby se destruktor automaticky postarál o úklid. Zavolejte save() předtím, než objekt opustí rozsah.

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

Krok 3: Uložit po všech úpravách

Umístěte save() volání po dokončení všech úprav, ale před Presentation opustí rozsah.

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

Krok 4: Uložit do jiné cesty

Předávejte jinou výstupní cestu pro vytvoření nového souboru bez úpravy originálu:

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

Ten template.pptx soubor není upraven; customized.pptx je vytvořen (nebo přepsán, pokud již existuje).


Krok 5: Ověřit výstup

Po uložení zkontrolujte, zda soubor existuje:

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

Podporovaný formát ukládání

FormátHodnota výčtuPodporováno
PPTX (Office Open XML)SaveFormat::PPTXAno
PDFN/ANe
HTMLN/ANe
SVGN/ANe
PNG / JPEGN/ANe
ODP (OpenDocument)N/ANe

Podporován je pouze PPTX. Pokus o uložení v jiném formátu vyvolá výjimku.


Časté problémy a opravy

Chyba odmítnutí oprávnění při zápisu

Výstupní soubor je otevřen v jiné aplikaci (např. PowerPoint má soubor otevřený). Zavřete soubor v ostatních aplikacích před uložením.

Soubor je vytvořen, ale zdá se prázdný nebo poškozený

Zajistěte prs.save() je voláno před Presentation objekt je zničen. Po zničení je interní stav uvolněn a následná volání selžou nebo vytvoří neplatný výstup.

Výjimka při ukládání

K tomu dochází při pokusu o uložení ve formátu jiném než PPTX nebo při použití nepodporované funkce (například grafů nebo animací) během ukládání.


Často kladené otázky

Mohu uložit do stejného souboru, který jsem otevřel?

Ano. Uložení na stejnou cestu přepíše původní soubor:

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

Mohu uložit do paměťového bufferu místo souboru?

Ukládání přímo do std::vector<uint8_t> nebo std::ostream není podporováno v aktuálním API. Uložte do dočasného souboru a přečtěte bajty:

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

Zachová ukládání obsah, který jsem neupravil?

Ano. Neznámé XML části z původního souboru jsou zachovány doslovně. Knihovna serializuje pouze ty části modelu dokumentu, které rozumí, a předává jakékoli XML, které nepozná.


Viz také

 Čeština