Abrir Apresentações em C++

Introdução

Além de criar apresentações PowerPoint do zero, o Aspose.Slides também permite abrir apresentações existentes. Após carregar uma apresentação, você pode recuperar informações sobre ela, editar o conteúdo dos slides, adicionar novos slides, remover os existentes e muito mais.

Abrir Apresentações

Para abrir uma apresentação existente, instancie a classe Presentation e passe o caminho do arquivo ao seu construtor.

O exemplo C++ a seguir mostra como abrir uma apresentação e obter sua contagem de slides:

// Instancie a classe Presentation e passe um caminho de arquivo ao seu construtor.
auto presentation = MakeObject<Presentation>(u"Sample.pptx");

// Imprima o número total de slides na apresentação.
Console::WriteLine(presentation->get_Slides()->get_Count());

presentation->Dispose();

Abrir Apresentações Protegidas por Senha

Quando for necessário abrir uma apresentação protegida por senha, passe a senha através do método set_Password da classe LoadOptions para descriptografá‑la e carregá‑la. O código C++ a seguir demonstra essa operação:

auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_Password(u"YOUR_PASSWORD");

auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);
    
// Execute operações na apresentação descriptografada.

presentation->Dispose();

Abrir Apresentações Grandes

O Aspose.Slides oferece opções — particularmente o método get_BlobManagementOptions na classe LoadOptions — para ajudar a carregar apresentações grandes.

O código C++ a seguir demonstra o carregamento de uma apresentação grande (por exemplo, 2 GB):

auto filePath = u"LargePresentation.pptx";

auto loadOptions = MakeObject<LoadOptions>();
// Escolha o comportamento KeepLocked — o arquivo de apresentação permanecerá bloqueado durante a vida útil de
// a instância Presentation, mas não precisa ser carregado na memória ou copiado para um arquivo temporário.
loadOptions->get_BlobManagementOptions()->set_PresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
loadOptions->get_BlobManagementOptions()->set_IsTemporaryFilesAllowed(true);
loadOptions->get_BlobManagementOptions()->set_MaxBlobsBytesInMemory(10 * 1024 * 1024); // 10 MB

auto presentation = MakeObject<Presentation>(filePath, loadOptions);

// A grande apresentação foi carregada e pode ser usada, enquanto o consumo de memória permanece baixo.

// Faça alterações na apresentação.
presentation->get_Slide(0)->set_Name(u"Large presentation");

// Salve a apresentação em outro arquivo. O consumo de memória permanece baixo durante esta operação.
presentation->Save(u"LargePresentation-copy.pptx", SaveFormat::Pptx);

// Não faça isso! Uma exceção de I/O será lançada porque o arquivo está bloqueado até que o objeto Presentation seja descartado.
File::Delete(filePath);

presentation->Dispose();

// É seguro fazer isso aqui. O arquivo fonte não está mais bloqueado pelo objeto Presentation.
File::Delete(filePath);

Controlar Recursos Externos

O Aspose.Slides fornece a interface IResourceLoadingCallback que permite gerenciar recursos externos. O código C++ a seguir mostra como usar a interface IResourceLoadingCallback:

class ImageLoadingHandler : public IResourceLoadingCallback
{
public:
    ResourceLoadingAction ResourceLoading(SharedPtr<IResourceLoadingArgs> args) override
    {
        if (args->get_OriginalUri().EndsWith(u".jpg"))
        {
            try
            {
                // Carregue uma imagem substituta.
                auto imageData = File::ReadAllBytes(u"aspose-logo.jpg");
                args->SetData(imageData);
                return ResourceLoadingAction::UserProvided;
            }
            catch (Exception&)
            {
                return ResourceLoadingAction::Skip;
            }
        }
        else if (args->get_OriginalUri().EndsWith(u".png"))
        {
            // Defina um URL substituto.
            args->set_Uri(u"http://www.google.com/images/logos/ps_logo2.png");
            return ResourceLoadingAction::Default;
        }

        // Ignorar todas as outras imagens.
        return ResourceLoadingAction::Skip;
    }
};
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_ResourceLoadingCallback(MakeObject<ImageLoadingHandler>());

auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);

Carregar Apresentações sem Objetos Binários Incorporados

Uma apresentação PowerPoint pode conter os seguintes tipos de objetos binários incorporados:

Usando o método ILoadOptions::set_DeleteEmbeddedBinaryObjects, você pode carregar uma apresentação sem nenhum objeto binário incorporado.

Esse método é útil para remover conteúdo binário potencialmente malicioso. O código C++ a seguir demonstra como carregar uma apresentação sem nenhum conteúdo binário incorporado:

auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_DeleteEmbeddedBinaryObjects(true);

auto presentation = MakeObject<Presentation>(u"malware.ppt", loadOptions);

// Perform operations on the presentation.

presentation->Dispose();

Perguntas Frequentes

Como posso saber que um arquivo está corrompido e não pode ser aberto?

Você receberá uma exceção de validação/análise de formato durante o carregamento. Esses erros geralmente mencionam uma estrutura ZIP inválida ou registros do PowerPoint corrompidos.

O que acontece se fontes necessárias estiverem ausentes ao abrir?

O arquivo será aberto, mas posteriormente a renderização/exportação pode substituir as fontes. Configure substituições de fontes ou adicione as fontes necessárias ao ambiente de tempo de execução.

E quanto a mídia incorporada (vídeo/áudio) ao abrir?

Eles se tornam disponíveis como recursos da apresentação. Se a mídia for referenciada por caminhos externos, certifique‑se de que esses caminhos estejam acessíveis no seu ambiente; caso contrário, a renderização/exportação pode omitir a mídia.