Como Carregar Apresentações em C++
Aspose.Slides FOSS for C++ permite abrir qualquer arquivo .pptx, inspecionar seu conteúdo e salvar de volta em PPTX ou extrair 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 construtor Presentation. O destrutor lida com a 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 de origem 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 da Forma
Itere sobre as formas e leia o texto das 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;
}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: Salvar de ida e volta
Depois de inspecionar ou modificar a apresentação, salve-a novamente 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 Soluções
Arquivo não encontrado ou não pode ser aberto
Verifique se o caminho para o arquivo .pptx 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. Arquivos legados .ppt (PowerPoint binário 97-2003) não são suportados.
Shape não tem text_frame
Algumas formas (Connectors, PictureFrames, GroupShapes) não possuem um quadro de texto. Use a proteção shape.has_text_frame() antes de acessar o texto.
Perguntas Frequentes
O carregamento preserva todo o conteúdo original?
Sim. As partes XML desconhecidas são preservadas literalmente ao salvar em ida e volta. A biblioteca serializa apenas as partes do modelo de documento que entende e passa adiante 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 método width(), height() e binary_data() para ler os dados brutos da imagem.
É suportado o carregamento a partir de um buffer em memória?
Carregar a partir de um std::vector<uint8_t> ou std::istream não está exposto na API atual. Grave os bytes em um arquivo temporário primeiro, então passe o caminho para o construtor Presentation.