Jak uložit prezentace v C++

Jak uložit prezentace v C++

Aspose.Slides FOSS for C++ ukládá prezentace výhradně do formátu .pptx pomocí prs.save(path, SaveFormat::PPTX). Tento průvodce pokrývá 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: Sestavit a propojit 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 postaral o úklid. Zavolejte save() před tí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 volání save() po dokončení všech úprav, ale před tím, než Presentation vyjde z rozsahu.

#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

Zadejte jinou výstupní cestu pro vytvoření nového souboru bez úpravy původního:

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

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


Krok 5: Ověřte 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 jiných aplikacích před uložením.

Soubor je vytvořen, ale vypadá prázdně nebo poškozeně

Zajistěte, aby byla prs.save() zavolána před tím, než je objekt Presentation 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 tomuto 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í do stejné cesty 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í v aktuálním API podporováno. 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);

Ukládání zachová obsah, který jsem neupravil?

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


Viz také

 Čeština