Kā saglabāt prezentācijas C++ valodā

Kā saglabāt prezentācijas C++ valodā

Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx formāts, izmantojot prs.save(path, SaveFormat::PPTX). Šis ceļvedis aptver pareizo saglabāšanas modeli, saglabāšanu citā ceļā un biežāk sastopamās ar saglabāšanu saistītās kļūdas.

Solī pa solim rokasgrāmata

1. solis: Veidot un sasaistīt bibliotēku

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 .

2. solis: Atveriet vai izveidojiet prezentāciju

Izmantojiet steka piešķiršanu, lai destruktors notīrītu automātiski. Izsauciet save() pirms objekts iziet no skopa.

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

3. solis: Saglabājiet pēc visām izmaiņām

Novietojiet save() izsaukumu pēc tam, kad visas izmaiņas ir pabeigtas, bet pirms Presentation iziet no skopa.

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

4. solis: Saglabājiet citā ceļā

Norādiet citu izvades ceļu, lai izveidotu jaunu failu, nemainot oriģinālu:

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

Šis template.pptx fails netiek modificēts; customized.pptx tiek izveidots (vai pārrakstīts, ja tas jau pastāv).


5. solis: Pārbaudiet rezultātu

Pēc saglabāšanas pārbaudiet, vai fails pastāv:

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

Atbalstītais saglabāšanas formāts

FormātsEnum vērtībaAtbalstīts
PPTX (Office Open XML)SaveFormat::PPTX
PDFN/A
HTMLN/A
SVGN/A
PNG / JPEGN/A
ODP (OpenDocument)N/A

Tiek atbalstīts tikai PPTX. Mēģinājums saglabāt citā formātā izraisīs izņēmumu.


Biežāk sastopamās problēmas un to risinājumi

Rakstīšanas atļaujas lieguma kļūda

Izvades fails ir atvērts citā lietotnē (piemēram, PowerPoint ir atvēris šo failu). Aizveriet failu citās lietotnēs pirms saglabāšanas.

Fails tiek izveidots, bet izskatās tukšs vai bojāts

Nodrošiniet prs.save() tiek izsaukts pirms Presentation objekts tiek iznīcināts. Pēc iznīcināšanas iekšējais stāvoklis tiek atbrīvots, un turpmākie izsaukumi neizdosies vai radīs nederīgu izvadi.

Izņēmums saglabājot

Tas notiek, mēģinot saglabāt citā formātā, kas nav PPTX, vai izmantojot neatbalstītu funkciju (piemēram, diagrammas vai animācijas) saglabāšanas laikā.


Biežāk uzdotie jautājumi

Vai varu saglabāt tajā pašā failā, ko atvēru?

Jā. Saglabājot tajā pašā ceļā, tiek pārrakstīts sākotnējais fails:

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

Vai varu saglabāt atmiņas buferī, nevis failā?

Saglabāšana tieši uz std::vector<uint8_t> vai std::ostream nav atbalstīts pašreizējā API. Saglabājiet pagaidu failā un nolasiet 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);

Vai saglabāšana saglabā saturu, ko neesmu modificējis?

Jā. Nezināmās XML daļas no sākotnējā faila tiek saglabātas precīzi kā ir. Bibliotēka serializē tikai tās dokumenta modeļa daļas, kuras saprot, un caurļauj jebkuru XML, ko neatpazīst.


Skatīt arī

 Latviešu