Открытие презентаций в PHP
Введение
Aspose.Slides for PHP via Java может загружать презентации PowerPoint и OpenDocument из файлов и потоков. После загрузки презентации вы можете изучать её структуру, редактировать слайды, управлять ресурсами и сохранять её в исходном или другом поддерживаемом формате.
Поведение загрузки можно настроить с помощью класса LoadOptions. Например, вы можете указать пароль открытия, хранить большие бинарные объекты за пределами памяти кучи Java, контролировать внешние ресурсы или исключать встроенные бинарные данные.
Открытие презентаций
После загрузки файла или потока вы можете определить исходный формат презентации, чтобы выбрать способ обработки его вашим приложением.
Чтобы открыть существующую презентацию, передайте её путь к файлу конструктору Presentation. Освободите презентацию после использования, чтобы файловые дескрипторы, временные данные и другие ресурсы были быстро освобождены.
Следующий пример на PHP показывает, как открыть презентацию и получить количество её слайдов:
use aspose\slides\Presentation;
$presentation = new Presentation("sample.pptx");
try {
echo("Slide count: " . java_values($presentation->getSlides()->size()) . "\n");
} finally {
$presentation->dispose();
}
Открытие защищённых паролем презентаций
Пароль открытия шифрует содержимое презентации. Чтобы загрузить полную презентацию, передайте правильный пароль в LoadOptions::setPassword и передайте параметры конструктору Presentation. Загрузка не удалась, если пароль отсутствует или неверен.
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();
}
Для обнаружения пароля, проверки и схем шифрования см. Защита презентаций паролем. Если зашифрованная презентация была намеренно сохранена с общедоступными свойствами документа, эти свойства можно прочитать без пароля; см. Управление свойствами презентации.
Открытие больших презентаций
LoadOptions::getBlobManagementOptions возвращает параметры, управляющие тем, как Aspose.Slides обрабатывает большие двоичные объекты, такие как изображения, аудио и видео. Вы можете удерживать исходный файл заблокированным, разрешать временные файлы и ограничивать объём данных BLOB, сохраняемых в памяти.
Следующий код на PHP демонстрирует загрузку большой презентации (например, 2 ГБ):
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
С PresentationLockingBehavior::KeepLocked исходный файл остается заблокированным до тех пор, пока экземпляр презентации не будет освобождён. Не перемещайте, не перезаписывайте и не удаляйте исходный файл, пока этот экземпляр жив.
Aspose.Slides может копировать содержимое входного потока при загрузке. Для больших презентаций путь к файлу, как правило, более эффективен, чем поток. См. Manage BLOBs для получения дополнительных вариантов хранения и управления памятью.
Управление внешними ресурсами
LoadOptions::setResourceLoadingCallback принимает реализацию Java-интерфейса IResourceLoadingCallback через PHP/Java Bridge. Обратный вызов может предоставить заменяющие данные, перенаправить ресурс, использовать загрузчик по умолчанию или пропустить ресурс. Это полезно, когда презентации содержат внешние изображения, которые необходимо разрешать в соответствии с правилами безопасности или хранения, специфичными для приложения.
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();
}
Загрузка презентаций без встроенных двоичных объектов
Презентация может содержать встроенные двоичные данные, которые приложение не нуждается или не хочет сохранять. Примеры включают:
- VBA‑проекты, доступные через Presentation::getVbaProject;
- встроенные OLE‑данные, доступные через OleEmbeddedDataInfo::getEmbeddedFileData;
- данные элементов управления ActiveX, доступные через Control::getActiveXControlBinary.
Установите LoadOptions::setDeleteEmbeddedBinaryObjects в true, чтобы удалить эти двоичные данные при загрузке. Сохраните загруженную презентацию, чтобы зафиксировать очищенный результат.
Эта опция снижает риск наличия нежелательных встроенных полезных нагрузок, но не является полноценной системой обнаружения вредоносного кода или очистки содержимого.
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();
}
Вопросы и ответы
Как понять, что файл повреждён и его нельзя открыть?
Aspose.Slides бросает исключение парсинга или формата при загрузке. Обрабатывайте эту ошибку отдельно от ошибки неверного пароля, чтобы приложение могло точно сообщить о причине.
Что происходит, если требуемые шрифты отсутствуют?
Презентацию всё ещё можно загрузить, но при рендеринге и экспорте могут использоваться заменяющие шрифты. Вы можете настроить замену шрифтов или предоставить пользовательские шрифты, чтобы сделать вывод более предсказуемым.
Загружает ли загрузка презентации также встроенные медиафайлы?
Встроенные аудио и видео становятся доступными через объектную модель презентации. Внешние ресурсы разрешаются в соответствии с настроенным поведением загрузки ресурсов и могут быть недоступны, если их расположения недоступны.