Abrir presentaciones en C++
Introducción
Aspose.Slides for C++ puede cargar presentaciones de PowerPoint y OpenDocument desde archivos y flujos. Después de cargar una presentación, puedes inspeccionar su estructura, editar diapositivas, gestionar recursos y guardarla en el formato original o en otro formato compatible.
El comportamiento de carga puede personalizarse mediante la clase LoadOptions. Por ejemplo, puedes proporcionar una contraseña de apertura, mantener los objetos binarios grandes fuera de la memoria, controlar los recursos externos u omitir los datos binarios incrustados.
Abrir presentaciones
Después de cargar un archivo o flujo, puedes determinar su formato de presentación original para elegir cómo tu aplicación lo procesa.
Para abrir una presentación existente, pasa su ruta de archivo al constructor de Presentation. Desecha la presentación tras su uso para que los manejadores de archivo, los datos temporales y otros recursos se liberen rápidamente.
El siguiente ejemplo en C++ muestra cómo abrir una presentación y obtener el número de diapositivas:
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <system/console.h>
using namespace Aspose::Slides;
using namespace System;
auto presentation = MakeObject<Presentation>(u"sample.pptx");
Console::WriteLine(u"Slide count: {0}", presentation->get_Slides()->get_Count());
presentation->Dispose();
Abrir presentaciones protegidas con contraseña
Una contraseña de apertura cifra el contenido de la presentación. Para cargar la presentación completa, pasa la contraseña correcta a LoadOptions::set_Password y pasa las opciones al constructor de Presentation. La carga falla cuando la contraseña falta o es incorrecta.
#include <DOM/ISlideCollection.h>
#include <DOM/LoadOptions.h>
#include <DOM/Presentation.h>
#include <system/console.h>
using namespace Aspose::Slides;
using namespace System;
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_Password(u"open_password");
auto presentation = MakeObject<Presentation>(u"encrypted-presentation.pptx", loadOptions);
Console::WriteLine(u"Slide count: {0}", presentation->get_Slides()->get_Count());
presentation->Dispose();
Para la detección, validación y flujos de trabajo de cifrado de contraseñas, consulta Presentaciones protegidas con contraseña. Si una presentación cifrada se guardó deliberadamente con propiedades de documento públicas, esas propiedades pueden leerse sin contraseña; consulta Gestionar propiedades de la presentación.
Abrir presentaciones grandes
LoadOptions::get_BlobManagementOptions controla cómo Aspose.Slides maneja objetos binarios grandes como imágenes, audio y vídeo. Puedes mantener el archivo fuente bloqueado, permitir archivos temporales y limitar la cantidad de datos BLOB retenidos en memoria.
El siguiente código en C++ muestra cómo cargar una presentación grande (por ejemplo, 2 GB):
#include <DOM/ISlide.h>
#include <DOM/LoadOptions.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <IBlobManagementOptions.h>
#include <PresentationLockingBehavior.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
const String filePath = u"large-presentation.pptx";
auto loadOptions = MakeObject<LoadOptions>();
auto blobOptions = loadOptions->get_BlobManagementOptions();
blobOptions->set_PresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
blobOptions->set_IsTemporaryFilesAllowed(true);
blobOptions->set_MaxBlobsBytesInMemory(10 * 1024 * 1024);
auto presentation = MakeObject<Presentation>(filePath, loadOptions);
presentation->get_Slide(0)->set_Name(u"Large presentation");
presentation->Save(u"large-presentation-copy.pptx", SaveFormat::Pptx);
presentation->Dispose();
Note
Con PresentationLockingBehavior::KeepLocked, el archivo fuente permanece bloqueado hasta que el objeto Presentation se deseche. No muevas, sobrescribas ni elimines el archivo fuente mientras ese objeto esté activo.
Aspose.Slides puede copiar el contenido de un flujo de entrada mientras lo carga. Para presentaciones grandes, una ruta de archivo es, por tanto, generalmente más eficiente que un flujo. Consulta Administrar BLOBs para opciones adicionales de almacenamiento y gestión de memoria.
Controlar recursos externos
LoadOptions::set_ResourceLoadingCallback acepta una implementación de IResourceLoadingCallback. La devolución de llamada puede suministrar datos de sustitución, redirigir un recurso, usar el cargador predeterminado o omitir el recurso. Esto es útil cuando las presentaciones contienen imágenes externas que deben resolverse según reglas de seguridad o almacenamiento específicas de la aplicación.
#include <DOM/ISlideCollection.h>
#include <DOM/LoadOptions.h>
#include <DOM/Presentation.h>
#include <IResourceLoadingArgs.h>
#include <IResourceLoadingCallback.h>
#include <ResourceLoadingAction.h>
#include <system/console.h>
#include <system/io/file.h>
#include <system/string_comparison.h>
using namespace Aspose::Slides;
using namespace System;
using namespace System::IO;
class ImageLoadingHandler : public IResourceLoadingCallback
{
public:
ResourceLoadingAction ResourceLoading(SharedPtr<IResourceLoadingArgs> args) override
{
auto isJpeg = args->get_OriginalUri().EndsWith(u".jpg", StringComparison::OrdinalIgnoreCase);
if (!isJpeg || !File::Exists(u"approved-image.jpg"))
{
return ResourceLoadingAction::Skip;
}
auto imageData = File::ReadAllBytes(u"approved-image.jpg");
args->SetData(imageData);
return ResourceLoadingAction::UserProvided;
}
};
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_ResourceLoadingCallback(MakeObject<ImageLoadingHandler>());
auto presentation = MakeObject<Presentation>(u"presentation-with-external-images.pptx", loadOptions);
Console::WriteLine(u"Slide count: {0}", presentation->get_Slides()->get_Count());
presentation->Dispose();
Cargar presentaciones sin objetos binarios incrustados
Una presentación puede contener datos binarios incrustados que una aplicación no necesita o no quiere retener. Ejemplos incluyen:
- Proyectos VBA, disponibles a través de IPresentation::get_VbaProject;
- Datos OLE incrustados, disponibles a través de IOleEmbeddedDataInfo::get_EmbeddedFileData;
- Datos de control ActiveX, disponibles a través de IControl::get_ActiveXControlBinary.
Pasa true a LoadOptions::set_DeleteEmbeddedBinaryObjects para eliminar estos datos binarios durante la carga. Guarda la presentación cargada para preservar el resultado sanitizado.
Esta opción reduce la exposición a cargas útiles incrustadas no deseadas, pero no constituye un sistema completo de detección de malware o de sanitización de contenido.
#include <DOM/LoadOptions.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_DeleteEmbeddedBinaryObjects(true);
auto presentation = MakeObject<Presentation>(u"presentation-with-embedded-data.pptx", loadOptions);
presentation->Save(u"presentation-without-embedded-data.pptx", SaveFormat::Pptx);
presentation->Dispose();
Preguntas frecuentes
¿Cómo puedo saber si un archivo está corrupto y no se puede abrir?
Aspose.Slides lanza una excepción de análisis o de formato durante la carga. Maneja ese fallo por separado del error de contraseña incorrecta para que la aplicación pueda informar con precisión de la causa.
¿Qué ocurre si faltan fuentes necesarias?
La presentación aún puede cargarse, pero la renderización y la exportación pueden sustituir fuentes. Puedes configurar la sustitución de fuentes o proporcionar fuentes personalizadas para que la salida sea más predecible.
¿La carga de una presentación también carga sus medios incrustados?
El audio y vídeo incrustados están disponibles a través del modelo de objetos de la presentación. Los recursos externos se resuelven según el comportamiento de carga de recursos configurado y pueden no estar disponibles si sus ubicaciones no pueden ser accedidas.