Получение и обновление информации о презентации на Python

Обзор

Aspose.Slides может определить формат презентации и прочитать её метаданные без создания полной модели объекта презентации. Это полезно, когда нужно классифицировать файлы, создать инвентарь или проверить свойства перед решением о загрузке и обработке содержимого презентации.

В этой статье демонстрируется легковесный осмотр с помощью PresentationFactory и PresentationInfo, а также целевые обновления через DocumentProperties.

Проверка формата презентации

Если у вас уже загружена презентация, смотрите Determine the Original Presentation Format для определения после загрузки и ограничений устаревших потоков PPT, PPS и POT.

Используйте PresentationFactory.get_presentation_info для осмотра файла без создания экземпляра Presentation. Свойство PresentationInfo.load_format сообщает определённый формат, например PPTX, PPT или ODP.

import aspose.slides as slides

file_names = ["pres.pptx", "pres.ppt", "pres.odp"]

for file_name in file_names:
    presentation_info = slides.PresentationFactory.instance.get_presentation_info(file_name)
    print(f"{file_name}: {presentation_info.load_format}")

Создание лёгкого инвентаря презентаций

Когда вы обрабатываете множество файлов презентаций, может потребоваться компактный инвентарь для проверки, индексации или системы управления документами. В этом сценарии используйте PresentationFactory.get_presentation_info чтобы получить объект PresentationInfo, а затем вызовите PresentationInfo.read_document_properties для чтения метаданных документа. Этот подход не создаёт экземпляр Presentation и не требует обхода полной модели объекта презентации.

Расширенные свойства, предоставляемые DocumentProperties, дают следующие значения инвентаря:

Property Inventory value
slides Общее количество слайдов.
hidden_slides Количество скрытых слайдов.
notes Количество слайдов, содержащих заметки.
paragraphs Общее число абзацев, если доступно.
words Общее число слов.
multimedia_clips Общее количество аудио‑ и видеоклипов.

Следующий пример читает эти значения без создания объекта Presentation и выводит компактный инвентарь. Он также объединяет heading_pairs с titles_of_parts для отображения групп содержимого, таких как шрифты, темы и заголовки слайдов.

import os
import aspose.slides as slides

file_path = "sample.pptx"
presentation_info = slides.PresentationFactory.instance.get_presentation_info(file_path)
document_properties = presentation_info.read_document_properties()

print(f"File: {os.path.basename(file_path)}")
print(f"Format: {presentation_info.load_format}")
print(f"Title: {document_properties.title}")
print(f"Author: {document_properties.author}")
print("Statistics:")
print(f"  Slides: {document_properties.slides}")
print(f"  Hidden slides: {document_properties.hidden_slides}")
print(f"  Slides with notes: {document_properties.notes}")
print(f"  Paragraphs: {document_properties.paragraphs}")
print(f"  Words: {document_properties.words}")
print(f"  Multimedia clips: {document_properties.multimedia_clips}")

heading_pairs = document_properties.heading_pairs or []
titles_of_parts = document_properties.titles_of_parts or []
part_index = 0

if not heading_pairs or not titles_of_parts:
    print("Content groups: not available")
else:
    print("Content groups:")

    for heading_pair in heading_pairs:
        print(f"  {heading_pair.name} ({heading_pair.count})")

        for _ in range(heading_pair.count):
            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.titles_of_parts представляет собой плоскую упорядоченную коллекцию, поэтому нужно потреблять количество последовательных заголовков, указанных каждой парой заголовков.

Сохранённые метаданные и ограничения форматов

Свойства инвентаря, возвращаемые PresentationInfo.read_document_properties, отражают метаданные, доступные в исходном документе. Aspose.Slides не загружает и не обходит модель объекта презентации для повторного расчёта этих значений при данном вызове. Отсутствующие свойства представлены значениями по умолчанию, а сохранённые значения могут быть устаревшими, если приложение, последним сохранившее файл, не обновило свои свойства документа.

  • PPTX: Формат предоставляет расширенные свойства документа для подсчёта слайдов, заметок, скрытых слайдов, абзацев, слов и мультимедиа, а также пар заголовков и названий частей. Доступность зависит от того, какие свойства были записаны создателем документа.
  • PPT: Бинарный формат может сохранять соответствующие свойства сводки документа. Если свойство отсутствует или не было обновлено создателем документа, Aspose.Slides возвращает его сохранённое или значение по умолчанию, а не рассчитывает его из слайдов.
  • ODP: Метаданные OpenDocument предоставляют общую статистику документа, такую как количество страниц, абзацев и слов, но эти значения не сопоставляются со всеми расширенными свойствами PowerPoint. Метаданные скрытых слайдов, слайдов‑заметок, мультимедиа, пар заголовков и названий частей могут быть недоступны, и свойства инвентаря могут возвращать значения по умолчанию. Не рассматривайте нулевое значение или пустую коллекцию как окончательное доказательство отсутствия соответствующего содержимого.

Используйте лёгкий подход к метаданным для инвентарей и предварительных проверок. Загружайте презентацию и исследуйте её живую модель объекта, когда результат должен отражать изменения в памяти или когда необходимо проверить фактическое содержимое презентации.

Обновление свойств презентации

Свойства, возвращаемые PresentationInfo.read_document_properties, также можно изменять без создания экземпляра Presentation . Примените изменения с помощью PresentationInfo.update_document_properties, а затем запишите связанную презентацию через PresentationInfo.write_binded_presentation.

Следующее изображение показывает исходные свойства документа.

Original document properties of the PowerPoint presentation

Следующий пример меняет заголовок и время последнего сохранения и записывает результат в новый файл:

import datetime
import aspose.slides as slides

source_file = "sample.pptx"
output_file = "sample_with_updated_properties.pptx"
presentation_info = slides.PresentationFactory.instance.get_presentation_info(source_file)
document_properties = presentation_info.read_document_properties()

document_properties.title = "Quarterly sales report"
document_properties.last_saved_time = datetime.datetime.now(datetime.timezone.utc)

presentation_info.update_document_properties(document_properties)

with open(output_file, "wb") as output_stream:
    presentation_info.write_binded_presentation(output_stream)

Следующее изображение показывает обновлённые свойства документа.

Changed document properties of the PowerPoint presentation

Полезные ссылки

Для связанных проверок безопасности и настроек защиты см. следующие статьи:

FAQ

Как проверить, встроены ли шрифты и какие именно?

Загрузите презентацию и используйте Presentation.fonts_manager. Вызовите FontsManager.get_embedded_fonts для получения встроенных шрифтов и FontsManager.get_fonts для получения шрифтов, используемых в презентации. Сравните два результата, чтобы найти шрифты, необходимые для рендеринга, но не встроенные.

Как быстро узнать, есть ли скрытые слайды и сколько их?

Когда сохранённые метаданные документа достаточны, читайте DocumentProperties.hidden_slides через PresentationFactory.get_presentation_info и PresentationInfo.read_document_properties. Это подходит для лёгкого инвентаря. Если презентация была изменена в памяти, сохранённые метаданные могут отсутствовать или быть устаревшими, или вам нужно проверить текущие значения, пройдите по Presentation.slides и проверьте свойство Slide.hidden каждого слайда.

Можно ли определить, используется ли пользовательский размер и ориентация слайда, и отличаются ли они от значений по умолчанию?

Да. Загрузите презентацию и прочитайте Presentation.slide_size. Проверьте SlideSize.type, SlideSize.size и SlideSize.orientation для сравнения текущих настроек с ожидаемыми предустановками и размерами.

Есть ли быстрый способ увидеть, ссылаются ли диаграммы на внешние источники данных?

Да. Найдите каждую Chart и проверьте ChartData.data_source_type. Для внешней книги прочитайте ChartData.external_workbook_path. Тип источника данных и путь указывают на внешнюю ссылку, но проверка доступности ресурса требует отдельной проверки.

Как оценить «тяжёлые» слайды, которые могут замедлять рендеринг или экспорт в PDF?

Единого свойства сложности нет. Пройдите по Presentation.slides и по коллекции BaseSlide.shapes каждого слайда. Используйте количество фигур и наличие крупных изображений, эффектов, анимаций или мультимедиа как сигналы, и измерьте репрезентативный рендер или экспорт, прежде чем считать слайд подтверждённым узким местом производительности.