Otevření prezentací v C++
Úvod
Kromě vytváření prezentací PowerPoint od nuly umožňuje Aspose.Slides také otevírat existující prezentace. Po načtení prezentace můžete získat o ní informace, upravovat obsah snímků, přidávat nové snímky, odstraňovat existující a další.
Otevření prezentací
Pro otevření existující prezentace vytvořte instanci třídy Presentation a předávejte cestu k souboru do jejího konstruktoru.
Následující příklad v C++ ukazuje, jak otevřít prezentaci a získat její počet snímků:
// Vytvořte instanci třídy Presentation a předávejte cestu k souboru jejímu konstruktoru.
auto presentation = MakeObject<Presentation>(u"Sample.pptx");
// Vytiskněte celkový počet snímků v prezentaci.
Console::WriteLine(presentation->get_Slides()->get_Count());
presentation->Dispose();
Otevření prezentací chráněných heslem
Když potřebujete otevřít prezentaci chráněnou heslem, předávejte heslo metodě set_Password třídy LoadOptions, která ji dešifruje a načte. Následující kód v C++ demonstruje tuto operaci:
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_Password(u"YOUR_PASSWORD");
auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);
// Proveďte operace na dešifrované prezentaci.
presentation->Dispose();
Otevření velkých prezentací
Aspose.Slides poskytuje možnosti—zejména metodu get_BlobManagementOptions ve třídě LoadOptions—které vám pomohou načíst velké prezentace.
Následující kód v C++ ukazuje načtení velké prezentace (například 2 GB):
auto filePath = u"LargePresentation.pptx";
auto loadOptions = MakeObject<LoadOptions>();
// Zvolte chování KeepLocked — soubor prezentace zůstane zamčený po celou dobu
// instance Presentation, ale není nutné jej načítat do paměti ani kopírovat do dočasného souboru.
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);
// Velká prezentace byla načtena a může být použita, přičemž spotřeba paměti zůstává nízká.
// Proveďte změny v prezentaci.
presentation->get_Slide(0)->set_Name(u"Large presentation");
// Uložte prezentaci do jiného souboru. Spotřeba paměti zůstává během této operace nízká.
presentation->Save(u"LargePresentation-copy.pptx", SaveFormat::Pptx);
// Nedělejte to! Bude vyhozena výjimka I/O, protože soubor je zamčený, dokud není objekt prezentace uvolněn.
File::Delete(filePath);
presentation->Dispose();
// Je v pořádku to provést zde. Zdrojový soubor již není zamčený objektem prezentace.
File::Delete(filePath);
Info
Aby se obešly některé omezení při práci s proudy, může Aspose.Slides zkopírovat obsah proudu. Načtení velké prezentace z proudu způsobí zkopírování prezentace a může zpomalit načítání. Proto, když potřebujete načíst velkou prezentaci, důrazně doporučujeme použít cestu k souboru prezentace místo proudu.
Při vytváření prezentace, která obsahuje velké objekty (video, audio, obrázky vysokého rozlišení atd.), můžete použít BLOB management ke snížení spotřeby paměti.
Řízení externích zdrojů
Aspose.Slides poskytuje rozhraní IResourceLoadingCallback, které vám umožňuje spravovat externí zdroje. Následující kód v C++ ukazuje, jak použít rozhraní IResourceLoadingCallback:
class ImageLoadingHandler : public IResourceLoadingCallback
{
public:
ResourceLoadingAction ResourceLoading(SharedPtr<IResourceLoadingArgs> args) override
{
if (args->get_OriginalUri().EndsWith(u".jpg"))
{
try
{
// Načíst náhradní obrázek.
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"))
{
// Nastavit náhradní URL.
args->set_Uri(u"http://www.google.com/images/logos/ps_logo2.png");
return ResourceLoadingAction::Default;
}
// Přeskočit všechny ostatní obrázky.
return ResourceLoadingAction::Skip;
}
};
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_ResourceLoadingCallback(MakeObject<ImageLoadingHandler>());
auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);
Načtení prezentací bez vložených binárních objektů
Prezentace PowerPoint může obsahovat následující typy vložených binárních objektů:
- Projekt VBA (přístupný přes IPresentation::get_VbaProject);
- Vložená data OLE objektu (přístupná přes IOleEmbeddedDataInfo::get_EmbeddedFileData);
- Binární data ActiveX ovládacího prvku (přístupná přes IControl::get_ActiveXControlBinary).
Pomocí metody ILoadOptions::set_DeleteEmbeddedBinaryObjects můžete načíst prezentaci bez jakýchkoli vložených binárních objektů.
Tato metoda je užitečná pro odstranění potenciálně škodlivého binárního obsahu. Následující kód v C++ ukazuje, jak načíst prezentaci bez jakéhokoli vloženého binárního obsahu:
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_DeleteEmbeddedBinaryObjects(true);
auto presentation = MakeObject<Presentation>(u"malware.ppt", loadOptions);
// Perform operations on the presentation.
presentation->Dispose();
Často kladené otázky
Jak poznám, že soubor je poškozený a nelze jej otevřít?
Během načítání získáte výjimku při parsování/validaci formátu. Tyto chyby často uvádějí neplatnou strukturu ZIP nebo poškozené záznamy PowerPointu.
Co se stane, pokud při otevření chybí požadované fonty?
Soubor se otevře, ale při následném renderování/exportu mohou být fonty nahrazeny. Nastavte náhrady fontů nebo přidejte požadované fonty do runtime prostředí.
Co se stane s vloženými médii (video/audio) při otevření?
Stanou se dostupnými jako zdroje prezentace. Pokud jsou média odkazována externími cestami, ujistěte se, že jsou tyto cesty přístupné ve vašem prostředí; jinak může renderování/export média vynechat.