Como Carregar Apresentações em C++

Como Carregar Apresentações em C++

Aspose.Slides FOSS for C++ lets you open any .pptx arquivo, inspecione seu conteúdo e ou salve‑o novamente como PPTX ou extraia dados dele. Este guia cobre a abertura de um arquivo, a iteração de slides, a leitura de texto de formas e o ciclo completo de salvamento.

Guia passo a passo

Etapa 1: Compilar e Vincular a 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 .

Etapa 2: Abrir uma Apresentação Existente

Passe o caminho do arquivo para o Presentation construtor. O destrutor cuida da limpeza.

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

Partes XML desconhecidas no arquivo fonte são preservadas literalmente: a biblioteca nunca remove conteúdo que ainda não entende.


Etapa 3: Inspecionar Slides

Itere sobre todos os slides e imprima a contagem de formas:

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

Etapa 4: Ler Texto das Formas

Itere sobre as formas e leia o texto das formas que possuem um 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;
}

Etapa 5: Ler Propriedades do Documento

Acesse as propriedades principais do documento a partir de 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;
}

Etapa 6: Salvamento de Ida e Volta

Depois de inspecionar ou modificar a apresentação, salve-a de volta em PPTX:

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

Salvar em um caminho diferente cria um novo arquivo. Salvar no mesmo caminho sobrescreve o original.


Problemas comuns e correções

Arquivo não encontrado ou não pode ser aberto

Verifique se o caminho para o .pptx arquivo está correto em relação ao diretório de trabalho. Use std::filesystem::path para construção robusta de caminhos:

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

Exceção: Formato de arquivo não é suportado

A biblioteca suporta .pptx (Office Open XML) apenas. Legado .ppt (binary PowerPoint 97-2003) arquivos não são suportados.

Shape não tem text_frame

Algumas formas (Connectors, PictureFrames, GroupShapes) não possuem um quadro de texto. Proteja com shape.has_text_frame() antes de acessar o texto.


Perguntas Frequentes

O carregamento preserva todo o conteúdo original?

Sim. Partes XML desconhecidas são preservadas literalmente ao salvar em ida e volta. A biblioteca apenas serializa as partes do modelo de documento que entende e encaminha qualquer XML que não reconhece.

Posso carregar um PPTX protegido por senha?

Apresentações protegidas por senha (criptografadas) não são suportadas nesta edição.

Posso extrair imagens incorporadas?

Acesse a coleção de imagens: prs.images() retorna o ImageCollection. Cada imagem tem um width(), height(), e binary_data() método para ler os dados brutos da imagem.

O carregamento a partir de um buffer em memória é suportado?

Carregando de um std::vector<uint8_t> ou std::istream não está exposto na API atual. Escreva os bytes em um arquivo temporário primeiro, então passe o caminho para o Presentation construtor.


Veja também

 Português