Aprire presentazioni in PHP
Introduzione
Aspose.Slides for PHP via Java può caricare presentazioni PowerPoint e OpenDocument da file e stream. Dopo che una presentazione è stata caricata, è possibile ispezionarne la struttura, modificare le diapositive, gestire le risorse e salvarla nel formato originale o in un altro formato supportato.
Il comportamento di caricamento può essere personalizzato attraverso la classe LoadOptions. Ad esempio, è possibile fornire una password di apertura, mantenere grandi oggetti binari al di fuori della memoria heap di Java, controllare le risorse esterne o omettere i dati binari incorporati.
Aprire le presentazioni
Dopo aver caricato un file o uno stream, è possibile determinare il suo formato di presentazione originale per scegliere come l’applicazione lo elabora.
Per aprire una presentazione esistente, passare il percorso del file al costruttore Presentation. Disporre della presentazione dopo l’uso in modo che i handle dei file, i dati temporanei e le altre risorse vengano rilasciati prontamente.
Il seguente esempio PHP mostra come aprire una presentazione e ottenere il conteggio delle diapositive:
use aspose\slides\Presentation;
$presentation = new Presentation("sample.pptx");
try {
echo("Slide count: " . java_values($presentation->getSlides()->size()) . "\n");
} finally {
$presentation->dispose();
}
Aprire presentazioni protette da password
Una password di apertura cripta il contenuto della presentazione. Per caricare l’intera presentazione, passare la password corretta a LoadOptions::setPassword e fornire le opzioni al costruttore Presentation. Il caricamento fallisce quando la password è mancante o errata.
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();
}
Per il rilevamento, la convalida e i flussi di lavoro di crittografia delle password, vedere Password-Protect Presentations. Se una presentazione crittografata è stata deliberatamente salvata con proprietà del documento pubbliche, tali proprietà possono essere lette senza password; vedere Manage Presentation Properties.
Aprire presentazioni di grandi dimensioni
LoadOptions::getBlobManagementOptions restituisce le opzioni che controllano come Aspose.Slides gestisce gli oggetti binari di grandi dimensioni come immagini, audio e video. È possibile mantenere il file sorgente bloccato, consentire file temporanei e limitare la quantità di dati BLOB mantenuti in memoria.
Il seguente codice PHP dimostra il caricamento di una presentazione di grandi dimensioni (ad esempio, 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
Con PresentationLockingBehavior::KeepLocked, il file sorgente rimane bloccato fino a quando l’istanza della presentazione non viene eliminata. Non spostare, sovrascrivere o eliminare il file sorgente mentre quell’istanza è attiva.
Aspose.Slides può copiare il contenuto di uno stream di input durante il caricamento. Per presentazioni di grandi dimensioni, un percorso file è generalmente più efficiente di uno stream. Vedere Manage BLOBs per ulteriori opzioni di archiviazione e gestione della memoria.
Controllare le risorse esterne
LoadOptions::setResourceLoadingCallback accetta un’implementazione dell’interfaccia Java IResourceLoadingCallback tramite PHP/Java Bridge. Il callback può fornire dati di sostituzione, reindirizzare una risorsa, usare il loader predefinito o saltare la risorsa. Questo è utile quando le presentazioni contengono immagini esterne che devono essere risolte secondo regole di sicurezza o di archiviazione specifiche dell’applicazione.
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();
}
Caricare presentazioni senza oggetti binari incorporati
Una presentazione può contenere dati binari incorporati che un’applicazione non ha bisogno o non vuole conservare. Esempi includono:
- progetti VBA, disponibili tramite Presentation::getVbaProject;
- dati OLE incorporati, disponibili tramite OleEmbeddedDataInfo::getEmbeddedFileData;
- dati di controllo ActiveX, disponibili tramite Control::getActiveXControlBinary.
Impostare LoadOptions::setDeleteEmbeddedBinaryObjects su true per rimuovere questi dati binari durante il caricamento. Salvare la presentazione caricata per mantenere il risultato sanificato.
Questa opzione riduce l’esposizione a payload incorporati indesiderati, ma non è un sistema completo di rilevamento malware o di sanificazione dei contenuti.
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();
}
FAQ
Come posso capire se un file è corrotto e non può essere aperto?
Aspose.Slides genera un’eccezione di parsing o di formato durante il caricamento. Gestire quel fallimento separatamente da un errore di password errata in modo che l’applicazione possa segnalare la causa con precisione.
Cosa succede se i font richiesti mancano?
La presentazione può comunque caricarsi, ma la resa e l’esportazione potrebbero sostituire i font. È possibile configure font substitution o provide custom fonts per rendere l’output più prevedibile.
Il caricamento di una presentazione carica anche i media incorporati?
L’audio e il video incorporati diventano disponibili attraverso il modello a oggetti della presentazione. Le risorse esterne sono risolte secondo il comportamento di caricamento delle risorse configurato e potrebbero non essere disponibili se le loro posizioni non possono essere raggiunte.