Como salvar apresentações em C++
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx formato usando prs.save(path, SaveFormat::PPTX). Este guia cobre o padrão correto de salvamento, salvar em um caminho diferente e erros comuns relacionados ao 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 ou Criar uma Apresentação
Use alocação na pilha para que o destrutor limpe automaticamente. Chame save() antes que o objeto saia do escopo.
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
// Create new
{
asf::Presentation prs;
prs.save("new.pptx", asf::SaveFormat::PPTX);
}
// Open existing
{
asf::Presentation prs("input.pptx");
prs.save("output.pptx", asf::SaveFormat::PPTX);
}
return 0;
}Etapa 3: Salvar Após Todas as Modificações
Coloque o save() chamada após todas as modificações serem concluídas, mas antes do Presentation sair do escopo.
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
auto& shape = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 50, 300, 100);
shape.text_frame()->set_text("Hello, World!");
prs.save("output.pptx", asf::SaveFormat::PPTX);
return 0;
}Etapa 4: Salvar em um Caminho Diferente
Passe um caminho de saída diferente para criar um novo arquivo sem modificar o original:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);O template.pptx arquivo não é modificado; customized.pptx é criado (ou sobrescrito se já existir).
Etapa 5: Verificar a Saída
Após o salvamento, verifique se o arquivo existe:
#include <filesystem>
#include <iostream>
auto output = std::filesystem::path("output.pptx");
std::cout << "Saved: " << std::filesystem::exists(output)
<< ", size: " << std::filesystem::file_size(output) << " bytes\n";Formato de Salvamento Suportado
| Formato | Valor da Enum | Suportado |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Sim |
| N/A | Não | |
| HTML | N/A | Não |
| SVG | N/A | Não |
| PNG / JPEG | N/A | Não |
| ODP (OpenDocument) | N/A | Não |
Apenas PPTX é suportado. Tentar salvar em qualquer outro formato lançará uma exceção.
Problemas comuns e correções
Erro de permissão negada ao gravar
O arquivo de saída está aberto em outro aplicativo (por exemplo, o PowerPoint tem o arquivo aberto). Feche o arquivo em outros aplicativos antes de salvar.
O arquivo é criado, mas aparece vazio ou corrompido
Garantir prs.save() é chamado antes do Presentation objeto é destruído. Após a destruição, o estado interno é liberado e chamadas subsequentes falharão ou produzirão saída inválida.
Exceção ao salvar
Isso ocorre ao tentar salvar em um formato diferente de PPTX, ou ao usar um recurso não suportado (como gráficos ou animações) durante a gravação.
Perguntas Frequentes
Posso salvar no mesmo arquivo que abri?
Sim. Salvar no mesmo caminho sobrescreve o arquivo original:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Posso salvar em um buffer de memória em vez de um arquivo?
Salvar diretamente para um std::vector<uint8_t> ou std::ostream não é suportado na API atual. Salve em um arquivo temporário e leia os bytes:
#include <filesystem>
#include <fstream>
#include <vector>
auto tmp = std::filesystem::temp_directory_path() / "temp.pptx";
prs.save(tmp.string(), asf::SaveFormat::PPTX);
std::ifstream in(tmp, std::ios::binary);
std::vector<uint8_t> bytes((std::istreambuf_iterator<char>(in)),
std::istreambuf_iterator<char>());
std::filesystem::remove(tmp);A gravação preserva o conteúdo que eu não modifiquei?
Sim. Partes XML desconhecidas do arquivo original são preservadas literalmente. A biblioteca apenas serializa as partes do modelo de documento que entende e encaminha qualquer XML que não reconhece.