Открытие презентаций на Android

Обзор

Помимо создания презентаций PowerPoint с нуля, Aspose.Slides также позволяет открывать существующие презентации. После загрузки презентации вы можете получать информацию о ней, редактировать содержимое слайдов, добавлять новые слайды, удалять существующие и многое другое.

Открытие презентаций

Чтобы открыть существующую презентацию, создайте экземпляр класса Presentation и передайте путь к файлу в его конструктор.

Следующий пример на Java показывает, как открыть презентацию и получить количество слайдов:

// Создайте объект класса Presentation и передайте путь к файлу в его конструктор.
Presentation presentation = new Presentation("Sample.pptx");
try {
    // Выведите общее количество слайдов в презентации.
    System.out.println(presentation.getSlides().size());
} finally {
    presentation.dispose();
}

Открытие защищённых паролем презентаций

Когда необходимо открыть презентацию, защищённую паролем, передайте пароль через метод setPassword класса LoadOptions для расшифровки и загрузки. Следующий код на Java демонстрирует эту операцию:

LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("YOUR_PASSWORD");

Presentation presentation = new Presentation("Sample.pptx", loadOptions);
try {
    // Выполняйте операции с расшифрованной презентацией.
} finally {
    presentation.dispose();
}

Открытие больших презентаций

Aspose.Slides предоставляет параметры — в частности метод getBlobManagementOptions класса LoadOptions — которые помогают загружать большие презентации.

Следующий код на Java демонстрирует загрузку большой презентации (например, 2 ГБ):

final String filePath = "LargePresentation.pptx";

LoadOptions loadOptions = new LoadOptions();
// Выберите поведение KeepLocked — файл презентации останется заблокированным в течение
// экземпляра Presentation, но его не требуется загружать в память или копировать во временный файл.
loadOptions.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked);
loadOptions.getBlobManagementOptions().setTemporaryFilesAllowed(true);
loadOptions.getBlobManagementOptions().setMaxBlobsBytesInMemory(10 * 1024 * 1024); // 10 MB

Presentation presentation = new Presentation(filePath, loadOptions);
try {
    // Большая презентация загружена и может использоваться, при этом потребление памяти остается низким.

    // Внесите изменения в презентацию.
    presentation.getSlides().get_Item(0).setName("Large presentation");

    // Сохраните презентацию в другой файл. Потребление памяти остаётся низким во время этой операции.
    presentation.save("LargePresentation-copy.pptx", SaveFormat.Pptx);

    // Не делайте этого! Будет выброшено исключение ввода-вывода, потому что файл заблокирован до тех пор, пока объект презентации не будет освобождён.
    //Files.delete(Paths.get(filePath));
} finally {
    presentation.dispose();
}

// Можно выполнить это здесь. Исходный файл больше не заблокирован объектом презентации.
Files.delete(Paths.get(filePath));

Управление внешними ресурсами

Aspose.Slides предоставляет интерфейс IResourceLoadingCallback, который позволяет управлять внешними ресурсами. Следующий код на Java показывает, как использовать интерфейс IResourceLoadingCallback:

LoadOptions loadOptions = new LoadOptions();
loadOptions.setResourceLoadingCallback(new ImageLoadingHandler());

Presentation presentation = new Presentation("Sample.pptx", loadOptions);
class ImageLoadingHandler implements IResourceLoadingCallback {
    public int resourceLoading(IResourceLoadingArgs args) {
        if (args.getOriginalUri().endsWith(".jpg")) {
            try {
                // Загрузить заменяющее изображение.
                byte[] imageData = getImageBytes("aspose-logo.jpg"); // Используйте любой метод для получения байтов
                args.setData(imageData);
                return ResourceLoadingAction.UserProvided;
            } catch (RuntimeException ex) {
                return ResourceLoadingAction.Skip;
            }  catch (IOException ex) {
                ex.printStackTrace();
            }
        } else if (args.getOriginalUri().endsWith(".png")) {
            // Установить заменяющий URL.
            args.setUri("http://www.google.com/images/logos/ps_logo2.png");
            return ResourceLoadingAction.Default;
        }
        // Пропустить все остальные изображения.
        return ResourceLoadingAction.Skip;
    }
}

Загрузка презентаций без встроенных бинарных объектов

Презентация PowerPoint может содержать следующие типы встроенных бинарных объектов:

С помощью метода ILoadOptions.setDeleteEmbeddedBinaryObjects вы можете загрузить презентацию без каких-либо встроенных бинарных объектов.

Этот метод полезен для удаления потенциально вредоносного бинарного контента. Следующий код на Java демонстрирует, как загрузить презентацию без встроенного бинарного контента:

LoadOptions loadOptions = new LoadOptions();
loadOptions.setDeleteEmbeddedBinaryObjects(true);

Presentation presentation = new Presentation("malware.ppt", loadOptions);
try {
    // Выполните операции над презентацией.
} finally {
    presentation.dispose();
}

FAQ

Как понять, что файл повреждён и его нельзя открыть?

Во время загрузки возникнет исключение парсинга/валидации формата. Такие ошибки часто указывают на недопустимую структуру ZIP‑файла или повреждённые записи PowerPoint.

Что происходит, если при открытии отсутствуют требуемые шрифты?

Файл откроется, но при последующем rendering/export могут быть заменены шрифты. Configure font substitutions или add the required fonts в среде выполнения.

Что происходит с встроенными медиа (видео/аудио) при открытии?

Они становятся доступными как ресурсы презентации. Если медиа ссылки указаны во внешних путях, убедитесь, что эти пути доступны в вашей среде; иначе при rendering/export медиа могут быть пропущены.