Открытие презентаций на Android
Введение
Aspose.Slides for Android via Java может загружать презентации PowerPoint и OpenDocument из файлов и потоков. После загрузки презентации вы можете просматривать её структуру, редактировать слайды, управлять ресурсами и сохранять её в исходном или другом поддерживаемом формате.
Поведение загрузки можно настроить с помощью класса LoadOptions. Например, вы можете задать пароль открытия, держать крупные двоичные объекты вне памяти кучи Java, контролировать внешние ресурсы или исключить встроенные двоичные данные.
Открытие презентаций
После загрузки файла или потока вы можете определить исходный формат презентации, чтобы выбрать способ обработки в вашем приложении.
Чтобы открыть существующую презентацию, передайте её путь к файлу в конструктор Presentation. Освобождайте объект презентации после использования, чтобы дескрипторы файлов, временные данные и другие ресурсы сразу же освободились.
Следующий пример на Java показывает, как открыть презентацию и получить количество слайдов:
import com.aspose.slides.Presentation;
Presentation presentation = new Presentation("sample.pptx");
try {
System.out.println("Slide count: " + presentation.getSlides().size());
} finally {
presentation.dispose();
}
Открытие презентаций, защищённых паролем
Пароль открытия шифрует содержимое презентации. Чтобы загрузить полную презентацию, передайте правильный пароль в LoadOptions.setPassword и укажите параметры в конструкторе Presentation. Загрузка завершается ошибкой, если пароль отсутствует или неверен.
import com.aspose.slides.LoadOptions;
import com.aspose.slides.Presentation;
LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("open_password");
Presentation presentation = new Presentation("encrypted-presentation.pptx", loadOptions);
try {
System.out.println("Slide count: " + presentation.getSlides().size());
} finally {
presentation.dispose();
}
Для обнаружения пароля, его проверки и процессов шифрования см. Password-Protect Presentations. Если зашифрованная презентация была специально сохранена с публичными свойствами документа, эти свойства можно прочитать без пароля; см. Manage Presentation Properties.
Открытие больших презентаций
LoadOptions.getBlobManagementOptions возвращает параметры, управляющие тем, как Aspose.Slides обрабатывает большие двоичные объекты, такие как изображения, аудио и видео. Вы можете удерживать исходный файл заблокированным, разрешать временные файлы и ограничивать объём BLOB‑данных, сохраняемых в памяти.
Следующий код на Java демонстрирует загрузку большой презентации (например, 2 ГБ):
import com.aspose.slides.LoadOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.PresentationLockingBehavior;
import com.aspose.slides.SaveFormat;
final String filePath = "large-presentation.pptx";
LoadOptions loadOptions = new LoadOptions();
loadOptions.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked);
loadOptions.getBlobManagementOptions().setTemporaryFilesAllowed(true);
loadOptions.getBlobManagementOptions().setMaxBlobsBytesInMemory(10 * 1024 * 1024);
Presentation 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 принимает реализацию IResourceLoadingCallback. Обратный вызов может предоставить заменяющие данные, перенаправить ресурс, использовать загрузчик по умолчанию или пропустить ресурс. Это полезно, когда презентации содержат внешние изображения, которые необходимо разрешать в соответствии с правилами безопасности или хранения, специфичными для приложения.
import com.aspose.slides.IResourceLoadingArgs;
import com.aspose.slides.IResourceLoadingCallback;
import com.aspose.slides.LoadOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.ResourceLoadingAction;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Locale;
class ImageLoadingHandler implements IResourceLoadingCallback {
public int resourceLoading(IResourceLoadingArgs args) {
boolean isJpeg = args.getOriginalUri().toLowerCase(Locale.ROOT).endsWith(".jpg");
Path approvedImagePath = Paths.get("approved-image.jpg");
if (!isJpeg || !Files.exists(approvedImagePath)) {
return ResourceLoadingAction.Skip;
}
try {
byte[] imageData = Files.readAllBytes(approvedImagePath);
args.setData(imageData);
return ResourceLoadingAction.UserProvided;
} catch (IOException exception) {
System.err.println("The approved replacement image could not be read.");
return ResourceLoadingAction.Skip;
}
}
}
LoadOptions loadOptions = new LoadOptions();
loadOptions.setResourceLoadingCallback(new ImageLoadingHandler());
Presentation presentation = new Presentation("presentation-with-external-images.pptx", loadOptions);
try {
System.out.println("Slide count: " + presentation.getSlides().size());
} finally {
presentation.dispose();
}
Загрузка презентаций без встроенных двоичных объектов
Презентация может содержать встроенные двоичные данные, которые приложение не нуждается или не хочет сохранять. Примеры:
- проекты VBA, доступные через IPresentation.getVbaProject;
- встроенные OLE‑данные, доступные через IOleEmbeddedDataInfo.getEmbeddedFileData;
- данные ActiveX‑элементов, доступные через IControl.getActiveXControlBinary.
Установите LoadOptions.setDeleteEmbeddedBinaryObjects в true, чтобы удалить эти двоичные данные при загрузке. Сохраните загруженную презентацию, чтобы зафиксировать очищенный результат.
Этот параметр уменьшает риск наличия нежелательных встроенных полезных нагрузок, но не является полноценной системой обнаружения вредоносного кода или контент‑санитайзером.
import com.aspose.slides.LoadOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
LoadOptions loadOptions = new LoadOptions();
loadOptions.setDeleteEmbeddedBinaryObjects(true);
Presentation presentation = new Presentation("presentation-with-embedded-data.pptx", loadOptions);
try {
presentation.save("presentation-without-embedded-data.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
FAQ
Как определить, что файл повреждён и его нельзя открыть?
Aspose.Slides генерирует исключение парсинга или формата во время загрузки. Обрабатывайте эту ошибку отдельно от ошибки неправильного пароля, чтобы приложение могло точно сообщить о причине.
Что происходит, если требуемые шрифты отсутствуют?
Презентацию всё равно можно загрузить, но при рендеринге и экспорте могут использоваться заменяющие шрифты. Вы можете configure font substitution или provide custom fonts, чтобы сделать вывод более предсказуемым.
Загружается ли вместе с презентацией её встроенное медиа?
Встроенные аудио и видео становятся доступными через объектную модель презентации. Внешние ресурсы разрешаются в соответствии с настроенным поведением загрузки ресурсов и могут быть недоступны, если их местоположение недоступно.