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.