Come caricare presentazioni in C++

Come caricare presentazioni in C++

Aspose.Slides FOSS for C++ lets you open any .pptx file, ispeziona il suo contenuto e salva nuovamente in PPTX o estrai i dati da esso. Questa guida copre l’apertura di un file, l’iterazione delle diapositive, la lettura del testo delle forme e il round‑tripping del salvataggio.

Guida passo-passo

Passo 1: Compilare e collegare la libreria

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 .

Passo 2: Apri una presentazione esistente

Passa il percorso del file al Presentation costruttore. Il distruttore gestisce la pulizia.

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

Le parti XML sconosciute nel file di origine vengono preservate alla lettera: la libreria non rimuove mai contenuti che non comprende ancora.


Passo 3: Ispeziona le diapositive

Itera su tutte le diapositive e stampa il loro conteggio di 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;
}

Passo 4: Leggi il testo delle forme

Itera sulle forme e leggi il testo dalle forme che hanno 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;
}

Passo 5: Leggi le proprietà del documento

Accedi alle proprietà principali del documento da 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;
}

Passo 6: Salvataggio round‑trip

Dopo aver ispezionato o modificato la presentazione, salvala nuovamente in PPTX:

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

Salvare in un percorso diverso crea un nuovo file. Salvare nello stesso percorso sovrascrive l’originale.


Problemi comuni e soluzioni

File non trovato o impossibile aprire

Verifica che il percorso verso il .pptx file sia corretto rispetto alla directory di lavoro. Usa std::filesystem::path per una costruzione robusta del percorso:

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

Eccezione: il formato file non è supportato

La libreria supporta .pptx (Office Open XML) solo. Legacy .ppt (binary PowerPoint 97-2003) i file non sono supportati.

Shape non ha text_frame

Alcune forme (Connectors, PictureFrames, GroupShapes) non hanno un frame di testo. Proteggi con shape.has_text_frame() prima di accedere al testo.


Domande frequenti

Il caricamento preserva tutto il contenuto originale?

Sì. Le parti XML sconosciute sono preservate alla lettera durante il salvataggio round-trip. La libreria serializza solo le parti del modello di documento che comprende e passa attraverso qualsiasi XML non riconosciuto.

Posso caricare un PPTX protetto da password?

Le presentazioni protette da password (cifrati) non sono supportate in questa edizione.

Posso estrarre le immagini incorporate?

Accedi alla collezione di immagini: prs.images() restituisce il ImageCollection. Ogni immagine ha un width(), height(), e binary_data() metodo per leggere i dati dell’immagine grezzi.

Il caricamento da un buffer in memoria è supportato?

Caricamento da un std::vector<uint8_t> o std::istream non è esposto nell’API corrente. Scrivi i byte in un file temporaneo prima, quindi passa il percorso al Presentation costruttore.


Vedi anche

 Italiano