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.