Otevření prezentací v PHP
Ú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, upravit obsah snímků, přidat nové snímky, odebrat existující a další.
Otevření prezentací
Chcete-li otevřít existující prezentaci, vytvořte instanci třídy Presentation a jako argument předávejte cestu k souboru.
Následující příklad v PHP ukazuje, jak otevřít prezentaci a získat počet snímků:
// Vytvořte instanci třídy Presentation a předávejte cestu k souboru do jejího konstruktoru.
$presentation = new Presentation("Sample.pptx");
try {
// Zobrazte celkový počet snímků v prezentaci.
echo($presentation->getSlides()->size());
} finally {
$presentation->dispose();
}
Otevření prezentací chráněných heslem
Když potřebujete otevřít prezentaci chráněnou heslem, předejte heslo metodou setPassword třídy LoadOptions. Tím prezentaci dešifrujete a načtete. Následující kód v PHP demonstruje tuto operaci:
$loadOptions = new LoadOptions();
$loadOptions->setPassword("YOUR_PASSWORD");
$presentation = new Presentation("Sample.pptx", $loadOptions);
try {
// Proveďte operace na dešifrované prezentaci.
} finally {
$presentation->dispose();
}
Otevření velkých prezentací
Aspose.Slides poskytuje možnosti — zejména metodu getBlobManagementOptions ve třídě LoadOptions — které vám pomohou načíst velké prezentace.
Následující kód v PHP ukazuje načtení velké prezentace (například 2 GB):
$filePath = "LargePresentation.pptx";
$loadOptions = new LoadOptions();
// Vyberte chování KeepLocked — soubor prezentace zůstane uzamčen po celou dobu
// instance Presentation, ale není nutné ji načítat do paměti ani kopírovat do dočasného souboru.
$loadOptions->getBlobManagementOptions()->setPresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
$loadOptions->getBlobManagementOptions()->setTemporaryFilesAllowed(true);
$loadOptions->getBlobManagementOptions()->setMaxBlobsBytesInMemory(10 * 1024 * 1024); // 10 MB
$presentation = new Presentation($filePath, $loadOptions);
try {
// 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->getSlides()->get_Item(0)->setName("Very large presentation");
// Uložte prezentaci do jiného souboru. Spotřeba paměti zůstává nízká během této operace.
$presentation->save("LargePresentation-copy.pptx", SaveFormat::Pptx);
// Nedo dělejte to! Bude vyvolána I/O výjimka, protože soubor je uzamčen, dokud není objekt prezentace uvolněn.
//unlink($filePath);
} finally {
$presentation->dispose();
}
// Je v pořádku to udělat zde. Zdrojový soubor již není uzamčen objektem prezentace.
unlink($filePath);
Info
Pro obejití některých omezení při práci se streamy může Aspose.Slides kopírovat obsah streamu. Načtení velké prezentace ze streamu způsobí kopí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 streamu.
Při vytváření prezentace, která obsahuje velké objekty (video, audio, obrázky ve vysokém 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 PHP ukazuje, jak použít rozhraní IResourceLoadingCallback:
class ImageLoadingHandler {
function resourceLoading($args) {
if (java_values($args->getOriginalUri()->endsWith(".jpg"))) {
// Načíst náhradní obrázek.
$bytes = file_get_contents("aspose-logo.jpg");
$javaByteArray = java_values($bytes);
$args->setData($javaByteArray);
return ResourceLoadingAction::UserProvided;
} else if (java_values($args->getOriginalUri()->endsWith(".png"))) {
// Nastavit náhradní URL.
$args->setUri("http://www.google.com/images/logos/ps_logo2.png");
return ResourceLoadingAction::Default;
}
// Přeskočit všechny ostatní obrázky.
return ResourceLoadingAction::Skip;
}
}
$loadingHandler = java_closure(new ImageLoadingHandler(), null, java("com.aspose.slides.IResourceLoadingCallback"));
$loadOptions = new LoadOptions();
$loadOptions->setResourceLoadingCallback($loadingHandler);
$presentation = new Presentation("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ů:
- VBA projekt (přístupný přes Presentation.getVbaProject);
- Data vložená v OLE objektu (přístupná přes OleEmbeddedDataInfo.getEmbeddedFileData);
- Binární data ovládacího prvku ActiveX (přístupná přes Control.getActiveXControlBinary).
Pomocí metody LoadOptions.setDeleteEmbeddedBinaryObjects 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 PHP demonstruje, jak načíst prezentaci bez jakéhokoli vloženého binárního obsahu:
$loadOptions = new LoadOptions();
$loadOptions->setDeleteEmbeddedBinaryObjects(true);
$presentation = new Presentation("malware.ppt", $loadOptions);
try {
// Proveďte operace na prezentaci.
} finally {
$presentation->dispose();
}
Často kladené otázky
Jak zjistí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. Takové chyby často uvádějí neplatnou strukturu ZIP nebo poškozené záznamy PowerPointu.
Co se stane, pokud při otevírání chybí požadovaná písma?
Soubor se otevře, ale později může při renderování/exportu dojít k náhradě písem. Nakonfigurujte náhrady písem nebo přidejte požadovaná písma do běhového prostředí.
Jak je to s vloženými médii (video/audio) při otevírání?
Stanou se dostupnými jako zdroje prezentace. Pokud jsou média odkazována přes externí cesty, zajistěte, aby tyto cesty byly přístupné ve vašem prostředí; jinak může renderování/export média vynechat.