Cum să încărcați prezentări în C++

Cum să încărcați prezentări în C++

Aspose.Slides FOSS for C++ vă permite să deschideți orice fișier .pptx, să inspectați conținutul său și fie să îl salvați înapoi în PPTX, fie să extrageți date din el. Acest ghid acoperă deschiderea unui fișier, iterarea diapozitivelor, citirea textului formei și salvarea round‑trip.

Ghid pas cu pas

Pasul 1: Construiește și leagă biblioteca

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 .

Pasul 2: Deschide o prezentare existentă

Transmite calea fișierului către constructorul Presentation. Destructorul se ocupă de curățare.

#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("input.pptx");
    std::cout << "Slide count: " << prs.slides().size() << "\n";
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Părțile XML necunoscute din fișierul sursă sunt păstrate literalmente: biblioteca nu elimină niciodată conținutul pe care nu îl înțelege încă.


Pasul 3: Inspectaţi diapozitivele

Iterați prin toate diapozitivele și afișați numărul de forme:

#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("deck.pptx");
    for (size_t i = 0; i < prs.slides().size(); ++i) {
        auto& slide = prs.slides()[i];
        std::cout << "Slide " << i << ": "
                  << slide.shapes().size() << " shapes\n";
    }
    return 0;
}

Pasul 4: Citește textul formei

Iterați peste forme și citiți textul din formele care au un TextFrame:

#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("deck.pptx");
    for (size_t i = 0; i < prs.slides().size(); ++i) {
        auto& slide = prs.slides()[i];
        for (size_t j = 0; j < slide.shapes().size(); ++j) {
            auto& shape = slide.shapes()[j];
            if (shape.has_text_frame()) {
                auto text = shape.text_frame()->text();
                if (!text.empty()) {
                    std::cout << "  Shape text: " << text << "\n";
                }
            }
        }
    }
    return 0;
}

Pasul 5: Citește proprietățile documentului

Accesați proprietățile de bază ale documentului din prs.document_properties():

#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("deck.pptx");
    auto& props = prs.document_properties();
    std::cout << "Title:   " << props.title() << "\n";
    std::cout << "Author:  " << props.author() << "\n";
    std::cout << "Subject: " << props.subject() << "\n";
    return 0;
}

Pasul 6: Salvare round‑trip

După inspectarea sau modificarea prezentării, salvați-o înapoi în PPTX:

prs.save("output.pptx", asf::SaveFormat::PPTX);

Salvarea într-o cale diferită creează un fișier nou. Salvarea în aceeași cale suprascrie originalul.


Probleme comune și soluții

Fișierul nu a fost găsit sau nu poate fi deschis

Verificați că calea către fișierul .pptx este corectă în raport cu directorul de lucru. Utilizați std::filesystem::path pentru construcția robustă a căii:

#include <filesystem>
auto path = std::filesystem::path(__FILE__).parent_path() / "assets" / "deck.pptx";
asf::Presentation prs(path.string());

Excepție: formatul fișierului nu este acceptat

Biblioteca acceptă doar .pptx (Office Open XML). Fișierele vechi .ppt (PowerPoint binar 97-2003) nu sunt acceptate.

Forma nu are text_frame

Unele forme (Connectors, PictureFrames, GroupShapes) nu au un cadru de text. Protejați cu shape.has_text_frame() înainte de a accesa textul.


Întrebări frecvente

Încărcarea păstrează tot conținutul original?

Da. Părțile XML necunoscute sunt păstrate literalmente la salvarea în buclă. Biblioteca serializează doar părțile modelului de document pe care le înțelege și trece prin orice XML pe care nu îl recunoaște.

Pot încărca un PPTX protejat prin parolă?

Prezentările protejate prin parolă (criptate) nu sunt acceptate în această ediție.

Pot să extrag imagini încorporate?

Accesați colecția de imagini: prs.images() returnează ImageCollection. Fiecare imagine are o metodă width(), height() și binary_data() pentru a citi datele brute ale imaginii.

Este suportată încărcarea dintr-un buffer în memorie?

Încărcarea dintr-un std::vector<uint8_t> sau std::istream nu este expusă în API-ul curent. Scrieți octeții într-un fișier temporar mai întâi, apoi transmiteți calea către constructorul Presentation.


Vezi și

 Română