Kaip išsaugoti pristatymus C++

Kaip išsaugoti pristatymus C++

Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx formatas naudojant prs.save(path, SaveFormat::PPTX). Ši vadovas apima teisingą išsaugojimo šabloną, išsaugojimą į kitą kelią ir dažnas su išsaugojimu susijusias klaidas.

Žingsnis po žingsnio vadovas

Step 1: Sukompiliuokite ir susiekite biblioteką

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 .

Žingsnis 2: Atidaryti arba sukurti pristatymą

Naudokite steko paskirstymą, kad destruktorius išvalytų automatiškai. Iškvieskite save() prieš objektas išeis iš apimties.

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

Žingsnis 3: Išsaugoti po visų modifikacijų

Įdėkite save() kvietimą po to, kai visi pakeitimai baigti, bet prieš Presentation išeis iš apimties.

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

Žingsnis 4: Išsaugoti į kitą kelią

Pateikite kitą išvesties kelią, kad sukurtumėte naują failą nekeičiant originalo:

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

Šis template.pptx failas nėra modifikuojamas; customized.pptx yra sukurtas (arba perrašytas, jei jau egzistuoja).


Žingsnis 5: Patikrinkite išvestį

Po išsaugojimo patikrinkite, ar failas egzistuoja:

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

Palaikomas išsaugojimo formatas

FormatasEnum reikšmėPalaikoma
PPTX (Office Open XML)SaveFormat::PPTXTaip
PDFN/ANe
HTMLN/ANe
SVGN/ANe
PNG / JPEGN/ANe
ODP (OpenDocument)N/ANe

Palaikomas tik PPTX. Bandymas išsaugoti kitu formatu sukels išimtį.


Dažnos problemos ir sprendimai

Rašymo leidimo atmesto klaida

Išvesties failas atvertas kitoje programoje (pvz., PowerPoint turi atvertą failą). Prieš išsaugojant uždarykite failą kitose programose.

Failas sukurtas, bet atrodo tuščias arba sugadintas

Užtikrinkite prs.save() kviečiamas prieš Presentation objektas sunaikinamas. Po sunaikinimo vidinė būsena atlaisvinama ir vėlesni kvietimai nepavyks arba sukurs neteisingą išvestį.

Išimtis išsaugant

Tai įvyksta, kai bandoma išsaugoti kitokiu formatu nei PPTX arba kai išsaugojimo metu naudojama nepalaikoma funkcija (pvz., diagramos ar animacijos).


Dažnai užduodami klausimai

Ar galiu išsaugoti į tą patį failą, kurį atidariau?

Taip. Išsaugant į tą patį kelią originalus failas perrašomas:

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

Ar galiu išsaugoti į atminties buferį vietoj failo?

Išsaugoti tiesiogiai į std::vector<uint8_t> arba std::ostream šiuo metu API nepalaikoma. Išsaugokite į laikinąjį failą ir perskaitykite baitus:

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

Ar išsaugojimas išsaugo turinį, kurio nekeitiau?

Taip. Nežinomos XML dalys iš originalaus failo išsaugomos nepakitusiomis. Biblioteka serializuoja tik tas dokumento modelio dalis, kurias supranta, o visas nežinomą XML perduoda nepakitusią.


Žr. taip pat

 Lietuvių