Открытие презентаций в Python через Java
Введение
Aspose.Slides for Python via Java может загружать презентации PowerPoint и OpenDocument из файлов и потоков. После загрузки презентации вы можете исследовать её структуру, редактировать слайды, управлять ресурсами и сохранять её в исходном или другом поддерживаемом формате.
Поведение загрузки можно настроить с помощью класса LoadOptions. Например, вы можете задать пароль открытия, хранить большие двоичные объекты вне кучи Java, управлять внешними ресурсами или исключить встроенные двоичные данные.
Открытие презентаций
После загрузки файла или потока вы можете определить его исходный формат презентации, чтобы выбрать способ обработки его вашим приложением.
Чтобы открыть существующую презентацию, передайте путь к её файлу конструктору Presentation. После использования освобождайте объект презентации, чтобы файловые дескрипторы, временные данные и другие ресурсы были быстро освобождены.
Следующий пример на Python показывает, как открыть презентацию и получить количество её слайдов:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation("sample.pptx")
try:
print("Slide count:", presentation.getSlides().size())
finally:
presentation.dispose()
Открытие презентаций, защищённых паролем
Пароль открытия шифрует содержимое презентации. Чтобы загрузить полную презентацию, передайте правильный пароль в LoadOptions.setPassword и предоставьте параметры конструктору Presentation. Загрузка завершается ошибкой, если пароль отсутствует или неверен.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation
load_options = LoadOptions()
load_options.setPassword("open_password")
presentation = Presentation("encrypted-presentation.pptx", load_options)
try:
print("Slide count:", presentation.getSlides().size())
finally:
presentation.dispose()
Для обнаружения пароля, его проверки и процессов шифрования см. раздел Password-Protect Presentations. Если зашифрованная презентация была намеренно сохранена с публичными свойствами документа, эти свойства можно прочитать без пароля; см. Manage Presentation Properties.
Открытие больших презентаций
LoadOptions.getBlobManagementOptions возвращает параметры, которые управляют тем, как Aspose.Slides обрабатывает большие двоичные объекты, такие как изображения, аудио и видео. Вы можете удерживать исходный файл заблокированным, разрешать временные файлы и ограничивать объём BLOB‑данных, сохраняемых в памяти.
Следующий код на Python демонстрирует загрузку большой презентации (например, 2 ГБ):
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation, PresentationLockingBehavior, SaveFormat
file_path = "large-presentation.pptx"
load_options = LoadOptions()
load_options.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked)
load_options.getBlobManagementOptions().setTemporaryFilesAllowed(True)
load_options.getBlobManagementOptions().setMaxBlobsBytesInMemory(10 * 1024 * 1024)
presentation = Presentation(file_path, load_options)
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 принимает JPype‑прокси, реализующий интерфейс обратного вызова загрузки ресурсов Java. Обратный вызов может предоставить заменяющие данные, перенаправить ресурс, использовать загрузчик по умолчанию или пропустить ресурс. Это полезно, когда презентации содержат внешние изображения, которые необходимо разрешать в соответствии с правилами безопасности или хранения, специфичными для приложения.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from pathlib import Path
from asposeslides.api import LoadOptions, Presentation, ResourceLoadingAction
class ImageLoadingHandler:
def resourceLoading(self, resource_loading_arguments):
is_jpeg = str(resource_loading_arguments.getOriginalUri()).lower().endswith(".jpg")
approved_image_path = Path("approved-image.jpg")
if not is_jpeg or not approved_image_path.exists():
return ResourceLoadingAction.Skip
try:
image_data = approved_image_path.read_bytes()
java_image_data = jpype.JArray(jpype.JByte)(image_data)
resource_loading_arguments.setData(java_image_data)
return ResourceLoadingAction.UserProvided
except OSError:
print("The approved replacement image could not be read.")
return ResourceLoadingAction.Skip
load_options = LoadOptions()
image_loading_handler = ImageLoadingHandler()
callback = jpype.JProxy("com.aspose.slides.IResourceLoadingCallback", inst=image_loading_handler)
load_options.setResourceLoadingCallback(callback)
presentation = Presentation("presentation-with-external-images.pptx", load_options)
try:
print("Slide count:", presentation.getSlides().size())
finally:
presentation.dispose()
Загрузка презентаций без встроенных двоичных объектов
Презентация может содержать встроенные двоичные данные, которые приложению не нужны или которые не требуется сохранять. Примеры:
- проекты VBA, доступные через Presentation.getVbaProject;
- встроенные OLE‑данные, доступные через OleEmbeddedDataInfo.getEmbeddedFileData;
- данные ActiveX‑контролей, доступные через Control.getActiveXControlBinary.
Установите LoadOptions.setDeleteEmbeddedBinaryObjects в True, чтобы удалить эти двоичные данные при загрузке. Сохраните загруженную презентацию, чтобы зафиксировать очищенный результат.
Эта опция снижает риск наличия нежелательных встроенных компонентов, но не является полноценной системой обнаружения вредоносного ПО или очистки содержимого.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadOptions, Presentation, SaveFormat
load_options = LoadOptions()
load_options.setDeleteEmbeddedBinaryObjects(True)
presentation = Presentation("presentation-with-embedded-data.pptx", load_options)
try:
presentation.save("presentation-without-embedded-data.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Часто задаваемые вопросы
Как определить, что файл повреждён и его нельзя открыть?
Aspose.Slides бросает исключение парсинга или формата во время загрузки. Обрабатывайте эту ошибку отдельно от ошибки некорректного пароля, чтобы приложение могло точно сообщить о причине.
Что происходит, если требуемые шрифты отсутствуют?
Презентацию всё равно можно загрузить, но при рендеринге и экспорте шрифты могут быть заменены. Вы можете настроить замену шрифтов или предоставить пользовательские шрифты, чтобы сделать вывод более предсказуемым.
Загружает ли загрузка презентации её встроенные медиа?
Встроенные аудио и видео становятся доступными через объектную модель презентации. Внешние ресурсы разрешаются в соответствии с настроенным поведением загрузки ресурсов и могут быть недоступны, если их местоположения недоступны.