Como carregar apresentações em C++

Como carregar apresentações em C++

Aspose.Slides FOSS for C++ lets you open any .pptx Este guia abriria um arquivo, iteraria slides, leria texto de forma e redirecionaria a salvação.

Guia passo a passo

Passo 1: Criar e ligar 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 .

Passo 2: Abra uma apresentação existente

Passe o caminho do ficheiro para a página de acesso . Presentation O destruidor trata 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;
}

As partes XML desconhecidas no arquivo de origem são preservadas literalmente: a biblioteca nunca remove conteúdo que ainda não entende.


Passo 3: Inspecionar as slides

Iterar sobre todos os slides e imprimir o seu número 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;
}

Passo 4: Ler texto de forma

Iterar sobre formas e ler texto de formas que têm 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;
}

Passo 5: Leia as propriedades do documento

Acesso a propriedades do documento principal 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;
}

Passo 6: Salvar de ida e volta

Após inspecionar ou modificar a apresentação, salve-a de volta para o PPTX:

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

Salvar para um caminho diferente cria um novo arquivo. Salvando para o mesmo caminho sobrepõe-se ao original.


Problemas comuns e soluções

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

Verifique se o caminho para a .pptx O arquivo é correto em relação ao diretório de trabalho. Use std::filesystem::path para construção de trilhos robustos:

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

Exceção: O formato de ficheiro não é suportado .

A biblioteca apoia a .pptx (Office Open XML) apenas. Legado .ppt (powerpoint 97-2003) não são suportados.

Shape não tem text_frame

Algumas formas (Conectores, PictureFrames, GroupShapes) não têm um quadro de texto. shape.has_text_frame() antes de aceder ao texto.


Perguntas Frequentes

O carregamento preserva todo o conteúdo original?

Sim. Partes XML desconhecidas são preservadas literalmente na salvação de ida e volta. A biblioteca só serializa as partes do modelo de documento que entende, e passa por qualquer XML que não reconhece.

Posso carregar um PPTX protegido por senha?

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

Posso extrair imagens embutidas?

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

É suportado o carregamento a partir de um buffer em memória?

Carregamento a partir de um std::vector<uint8_t> ou a) std::istream escrever os bytes para um arquivo temporário primeiro, em seguida, passar o caminho para a API atual. Presentation Construtor.


Ver também:

 Português