Получить и обновить информацию о презентации в Python через Java
Обзор
Aspose.Slides может определить формат презентации и прочитать её метаданные без создания полной объектной модели презентации. Это удобно, когда нужно классифицировать файлы, сформировать инвентарь или проверить свойства перед тем, как решать, загружать и обрабатывать содержимое презентации.
Примеры требуют Aspose.Slides for Python via Java и совместимую среду выполнения Java. Каждый пример запускает JVM, если она ещё не запущена. Предоставьте существующие файлы презентаций по путям, используемым в примерах.
В этой статье демонстрируется лёгкая проверка через PresentationFactory и PresentationInfo, а также целевые обновления через DocumentProperties.
Проверка формата презентации
Если у вас уже загружена презентация, см. статью Determine the Original Presentation Format для обнаружения после загрузки и ограничений потоков устаревших форматов PPT, PPS и POT.
Используйте PresentationFactory.getPresentationInfo для проверки файла без создания экземпляра Presentation. Метод PresentationInfo.getLoadFormat сообщает обнаруженный формат, например PPTX, PPT или ODP.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadFormat, PresentationFactory
file_names = ["pres.pptx", "pres.ppt", "pres.odp"]
for file_name in file_names:
presentation_info = PresentationFactory.getInstance().getPresentationInfo(file_name)
load_format = presentation_info.getLoadFormat()
format_name = f"Other ({load_format})"
if load_format == LoadFormat.Pptx:
format_name = "PPTX"
elif load_format == LoadFormat.Ppt:
format_name = "PPT"
elif load_format == LoadFormat.Odp:
format_name = "ODP"
print(f"{file_name}: {format_name}")
Создание облегчённого инвентаря презентаций
При обработке большого количества файлов презентаций может потребоваться компактный инвентарь для проверки, индексации или системы управления документами. В этом случае используйте PresentationFactory.getPresentationInfo чтобы получить объект PresentationInfo, а затем вызовите PresentationInfo.readDocumentProperties для чтения метаданных документа. Такой подход не создаёт экземпляр Presentation и не требует обхода полной объектной модели презентации.
Расширенные свойства, предоставляемые DocumentProperties, дают следующие значения инвентаря:
| Метод | Значение |
|---|---|
| getSlides | Общее количество слайдов. |
| getHiddenSlides | Количество скрытых слайдов. |
| getNotes | Количество слайдов, содержащих заметки. |
| getParagraphs | Общее количество абзацев, если доступно. |
| getWords | Общее количество слов. |
| getMultimediaClips | Общее количество аудио‑ и видеоклипов. |
Следующий пример считывает эти значения без создания объекта Presentation и выводит компактный инвентарь. Он также комбинирует getHeadingPairs с getTitlesOfParts для отображения групп содержимого, таких как шрифты, темы и заголовки слайдов.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from pathlib import Path
from asposeslides.api import LoadFormat, PresentationFactory
file_path = "sample.pptx"
presentation_info = PresentationFactory.getInstance().getPresentationInfo(file_path)
document_properties = presentation_info.readDocumentProperties()
load_format = presentation_info.getLoadFormat()
format_name = f"Other ({load_format})"
if load_format == LoadFormat.Pptx:
format_name = "PPTX"
elif load_format == LoadFormat.Ppt:
format_name = "PPT"
elif load_format == LoadFormat.Odp:
format_name = "ODP"
print(f"File: {Path(file_path).name}")
print(f"Format: {format_name}")
print(f"Title: {document_properties.getTitle()}")
print(f"Author: {document_properties.getAuthor()}")
print("Statistics:")
print(f" Slides: {document_properties.getSlides()}")
print(f" Hidden slides: {document_properties.getHiddenSlides()}")
print(f" Slides with notes: {document_properties.getNotes()}")
print(f" Paragraphs: {document_properties.getParagraphs()}")
print(f" Words: {document_properties.getWords()}")
print(f" Multimedia clips: {document_properties.getMultimediaClips()}")
heading_pairs = document_properties.getHeadingPairs()
titles_of_parts = document_properties.getTitlesOfParts()
heading_pairs = heading_pairs if heading_pairs is not None else []
titles_of_parts = titles_of_parts if titles_of_parts is not None else []
part_index = 0
if len(heading_pairs) == 0 or len(titles_of_parts) == 0:
print("Content groups: not available")
else:
print("Content groups:")
for heading_pair in heading_pairs:
print(f" {heading_pair.getName()} ({heading_pair.getCount()})")
for part_offset in range(heading_pair.getCount()):
if part_index >= len(titles_of_parts):
break
print(f" - {titles_of_parts[part_index]}")
part_index += 1
if part_index < len(titles_of_parts):
print(" Other parts:")
while part_index < len(titles_of_parts):
print(f" - {titles_of_parts[part_index]}")
part_index += 1
Каждый HeadingPair предоставляет имя группы и количество элементов в этой группе. DocumentProperties.getTitlesOfParts возвращает плоский упорядоченный массив, поэтому нужно потреблять количество последовательных заголовков, указанное каждым HeadingPair.
Хранимые метаданные и ограничения форматов
Свойства инвентаря, возвращаемые PresentationInfo.readDocumentProperties, отражают метаданные, доступные в исходном документе. Aspose.Slides не загружает и не обходит объектную модель презентации для пересчёта этих значений при данном вызове. Отсутствующие свойства представлены значениями по умолчанию, а сохранённые значения могут быть устаревшими, если приложение, последним сохранившее файл, не обновило свойства документа.
- PPTX: Формат предоставляет расширенные свойства документа для подсчётов слайдов, заметок, скрытых слайдов, абзацев, слов и мультимедийных клипов, а также пары заголовков и названия частей. Доступность зависит от того, какие свойства записал создатель документа.
- PPT: Бинарный формат может хранить соответствующие свойства‑резюме документа. Если свойство отсутствует или не было обновлено производителем документа, Aspose.Slides возвращает его сохранённое или значение по умолчанию, а не вычисляет его из слайдов.
- ODP: Метаданные OpenDocument предоставляют общую статистику документа, такую как количество страниц, абзацев и слов, но эти значения не сопоставляются со всеми расширенными свойствами PowerPoint. Метаданные о скрытых слайдах, слайдах‑заметках, мультимедиа, парах заголовков и названиях частей могут быть недоступны, и свойства инвентаря могут возвращать значения по умолчанию. Не рассматривайте нулевое значение или пустой массив как окончательное доказательство отсутствия соответствующего содержимого.
Используйте лёгкий подход к метаданным для инвентарей и предварительных проверок. Загрузите презентацию и проверьте её живую объектную модель, когда результат должен отражать изменения в памяти или когда необходимо подтвердить фактическое содержимое презентации.
Обновление свойств презентации
Свойства, возвращаемые PresentationInfo.readDocumentProperties, также можно изменить без создания экземпляра Presentation. Примените изменения с помощью PresentationInfo.updateDocumentProperties, а затем запишите связанную презентацию через PresentationInfo.writeBindedPresentation.
Следующее изображение показывает исходные свойства документа PowerPoint презентации.

Следующий пример изменяет заголовок и время последнего сохранения и записывает результат в новый файл:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import PresentationFactory
from java.io import FileOutputStream
from java.util import Date
source_file = "sample.pptx"
output_file = "sample_with_updated_properties.pptx"
presentation_info = PresentationFactory.getInstance().getPresentationInfo(source_file)
document_properties = presentation_info.readDocumentProperties()
document_properties.setTitle("Quarterly sales report")
last_saved_time = Date()
document_properties.setLastSavedTime(last_saved_time)
presentation_info.updateDocumentProperties(document_properties)
output_stream = FileOutputStream(output_file)
try:
presentation_info.writeBindedPresentation(output_stream)
finally:
output_stream.close()
Следующее изображение показывает обновлённые свойства документа.

Полезные ссылки
Для связанных проверок безопасности и параметров защиты см. следующие статьи:
FAQ
Как проверить, встроены ли шрифты и какие именно?
Загрузите презентацию и используйте Presentation.getFontsManager. Вызовите FontsManager.getEmbeddedFonts, чтобы получить встроенные шрифты, и FontsManager.getFonts, чтобы получить шрифты, используемые в презентации. Сравните обоих результатов, чтобы найти шрифты, необходимые для отображения, но не встроенные.
Как быстро определить, есть ли в файле скрытые слайды и их количество?
Если хранимые метаданные документа достаточны, прочитайте DocumentProperties.getHiddenSlides через PresentationFactory.getPresentationInfo и PresentationInfo.readDocumentProperties. Это подходит для лёгкого инвентаря. Если презентация была изменена в памяти, хранимые метаданные могут быть отсутствовать или устареть, либо требуется проверить живые значения, пройдите через Presentation.getSlides и проверьте метод Slide.getHidden у каждого слайда.
Можно ли обнаружить, использованы ли пользовательские размеры и ориентация слайда, и отличаются ли они от значений по умолчанию?
Да. Загрузите презентацию и вызовите Presentation.getSlideSize. Используйте SlideSize.getType, SlideSize.getSize и SlideSize.getOrientation, чтобы сравнить текущие настройки с ожидаемыми предустановками и размерами.
Есть ли быстрый способ увидеть, ссылаются ли диаграммы на внешние источники данных?
Да. Найдите каждую Chart и вызовите ChartData.getDataSourceType. Для внешней книги вызовите ChartData.getExternalWorkbookPath. Тип источника данных и путь указывают на внешнюю ссылку, но проверка доступности цели требует отдельной проверки ресурсов.
Как оценить «тяжёлые» слайды, которые могут замедлять рендеринг или экспорт в PDF?
Нет единого свойства сложности. Пройдите через Presentation.getSlides и коллекцию BaseSlide.getShapes каждого слайда. Используйте количество фигур и наличие больших изображений, эффектов, анимаций или мультимедиа как сигналы отсева, и измерьте представительный рендеринг или экспорт, прежде чем считать слайд подтверждённым узким местом производительности.