Otevírání prezentací v PHP
Úvod
Aspose.Slides for PHP via Java může načíst prezentace PowerPoint a OpenDocument ze souborů a streamů. Po načtení prezentace můžete prozkoumat její strukturu, upravovat snímky, spravovat zdroje a uložit ji v původním nebo jiném podporovaném formátu.
Chování načítání lze přizpůsobit pomocí třídy LoadOptions. Například můžete zadat otevírací heslo, uchovávat velké binární objekty mimo paměť haldy Java, řídit externí zdroje nebo vynechat vložená binární data.
Otevření prezentací
Po načtení souboru nebo streamu můžete zjistit jeho původní formát prezentace, abyste si vybrali, jak vaší aplikaci s ním zacházet.
Pro otevření existující prezentace předáte její cestu k souboru do konstruktoru Presentation. Po použití prezentaci uvolněte, aby byly souborové handly, dočasná data a další prostředky rychle uvolněny.
Následující příklad v PHP ukazuje, jak otevřít prezentaci a získat počet snímků:
use aspose\slides\Presentation;
$presentation = new Presentation("sample.pptx");
try {
echo("Slide count: " . java_values($presentation->getSlides()->size()) . "\n");
} finally {
$presentation->dispose();
}
Otevření heslem chráněných prezentací
Otevírací heslo šifruje obsah prezentace. Pro načtení celé prezentace předáte správné heslo metodě LoadOptions::setPassword a poskytnete tyto možnosti konstruktoru Presentation. Načítání selže, když heslo chybí nebo je nesprávné.
use aspose\slides\LoadOptions;
use aspose\slides\Presentation;
$loadOptions = new LoadOptions();
$loadOptions->setPassword("open_password");
$presentation = new Presentation("encrypted-presentation.pptx", $loadOptions);
try {
echo("Slide count: " . java_values($presentation->getSlides()->size()) . "\n");
} finally {
$presentation->dispose();
}
Pro detekci hesla, validaci a šifrovací pracovní toky viz Password-Protect Presentations. Pokud byla šifrovaná prezentace úmyslně uložena s veřejnými vlastnostmi dokumentu, lze tyto vlastnosti přečíst bez hesla; viz Manage Presentation Properties.
Otevření velkých prezentací
LoadOptions::getBlobManagementOptions vrací možnosti, které řídí, jak Aspose.Slides zachází s binárními velkými objekty, jako jsou obrázky, audio a video. Můžete uchovat zdrojový soubor uzamčený, povolit dočasné soubory a omezit množství BLOB dat uchovávaných v paměti.
Následující kód v PHP demonstruje načtení velké prezentace (například 2 GB):
use aspose\slides\LoadOptions;
use aspose\slides\Presentation;
use aspose\slides\PresentationLockingBehavior;
use aspose\slides\SaveFormat;
$filePath = "large-presentation.pptx";
$loadOptions = new LoadOptions();
$loadOptions->getBlobManagementOptions()->setPresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
$loadOptions->getBlobManagementOptions()->setTemporaryFilesAllowed(true);
$loadOptions->getBlobManagementOptions()->setMaxBlobsBytesInMemory(10 * 1024 * 1024);
$presentation = new Presentation($filePath, $loadOptions);
try {
$presentation->getSlides()->get_Item(0)->setName("Large presentation");
$presentation->save("large-presentation-copy.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Note
S PresentationLockingBehavior::KeepLocked zůstává zdrojový soubor uzamčený, dokud není instance prezentace uvolněna. Nepřesouvejte, nepřepisujte ani neodstraňujte zdrojový soubor, dokud je tato instance aktivní.
Aspose.Slides může během načítání kopírovat obsah vstupního streamu. U velkých prezentací je proto cesta k souboru obecně efektivnější než stream. Další možnosti úložiště a správy paměti naleznete v Manage BLOBs.
Řízení externích zdrojů
LoadOptions::setResourceLoadingCallback přijímá implementaci rozhraní Java IResourceLoadingCallback prostřednictvím PHP/Java Bridge. Callback může poskytnout náhradní data, přesměrovat zdroj, použít výchozí načítač nebo zdroj přeskočit. To je užitečné, když prezentace obsahují externí obrázky, které musí být řešeny podle specifických bezpečnostních nebo úložných pravidel aplikace.
use aspose\slides\LoadOptions;
use aspose\slides\Presentation;
use aspose\slides\ResourceLoadingAction;
class ImageLoadingHandler {
function resourceLoading($args) {
$originalUri = strtolower(java_values($args->getOriginalUri()));
$approvedImagePath = "approved-image.jpg";
$isJpeg = substr($originalUri, -4) === ".jpg";
if (!$isJpeg || !file_exists($approvedImagePath)) {
return ResourceLoadingAction::Skip;
}
$imageData = file_get_contents($approvedImagePath);
if ($imageData === false) {
echo("The approved replacement image could not be read.\n");
return ResourceLoadingAction::Skip;
}
$args->setData(java_values($imageData));
return ResourceLoadingAction::UserProvided;
}
}
$loadingHandler = java_closure(new ImageLoadingHandler(), null, java("com.aspose.slides.IResourceLoadingCallback"));
$loadOptions = new LoadOptions();
$loadOptions->setResourceLoadingCallback($loadingHandler);
$presentation = new Presentation("presentation-with-external-images.pptx", $loadOptions);
try {
echo("Slide count: " . java_values($presentation->getSlides()->size()) . "\n");
} finally {
$presentation->dispose();
}
Načtení prezentací bez vložených binárních objektů
Prezentace může obsahovat vložená binární data, která aplikace nepotřebuje nebo nechce uchovávat. Příklady zahrnují:
- VBA projekty, dostupné přes Presentation::getVbaProject;
- vložená OLE data, dostupná přes OleEmbeddedDataInfo::getEmbeddedFileData;
- data ovládacích prvků ActiveX, dostupná přes Control::getActiveXControlBinary.
Nastavte LoadOptions::setDeleteEmbeddedBinaryObjects na true, aby se během načítání tato binární data odstranila. Uložte načtenou prezentaci, aby byl sanitovaný výsledek zachován.
Tato možnost snižuje riziko nežádoucích vložených payloadů, ale nejedná se o kompletní systém pro detekci malware či sanitaci obsahu.
use aspose\slides\LoadOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$loadOptions = new LoadOptions();
$loadOptions->setDeleteEmbeddedBinaryObjects(true);
$presentation = new Presentation("presentation-with-embedded-data.pptx", $loadOptions);
try {
$presentation->save("presentation-without-embedded-data.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Často kladené otázky
Jak zjistím, že je soubor poškozený a nelze jej otevřít?
Aspose.Slides během načítání vyhodí výjimku při parsování nebo formátu. Tento selhání ošetřete odděleně od chyby nesprávného hesla, aby aplikace mohla přesně oznámit příčinu.
Co se stane, když chybí požadovaná písma?
Prezentace se může i přesto načíst, ale při vykreslování a exportu mohou být písma nahrazena. Můžete nastavit substituci písem nebo poskytnout vlastní písma, aby byl výstup předvídatelnější.
Načítá načtení prezentace také její vložená média?
Vložený audio a video jsou dostupné prostřednictvím objektového modelu prezentace. Externí zdroje jsou řešeny podle nastaveného chování načítání zdrojů a mohou být nedostupné, pokud nelze jejich umístění přistupovat.