Como salvar apresentações em C++

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

FormatoValor da EnumSuportado
PPTX (Office Open XML)SaveFormat::PPTXSim
PDFN/ANão
HTMLN/ANão
SVGN/ANão
PNG / JPEGN/ANão
ODP (OpenDocument)N/ANã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.


Veja também

 Português