Операции над презентациями с низким уровнем кода в Python через Java

Обзор

API Aspose.Slides for Python via Java предоставляет статические вспомогательные классы для типовых операций с презентациями. Эти помощники инкапсулируют часто используемые сценарии объектной модели в удобных методах, поэтому вы можете конвертировать или объединять файлы, обрабатывать элементы презентации, собирать формы и удалять неиспользуемый контент с меньшим количеством кода.

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

Ниже приведена таблица, суммирующая доступные помощники:

Вспомогательный класс Для чего используется
Convert Конвертация презентации в другой формат с помощью прямого вызова файл‑в‑файл.
Merger Объединение полных файлов презентаций одинакового формата.
ForEach Выполнение действия для каждого слайда, формы, абзаца или части текста.
Collect Получение форм из всей презентации для повторной обработки или анализа.
Compress Удаление неиспользуемых шаблонов и макетов и сокращение данных вложенных шрифтов.

Конвертировать презентацию

Используйте Convert.autoByExtension, когда расширение выходного файла достаточно для выбора формата экспорта. Метод открывает исходную презентацию, определяет нужный формат по пути вывода и записывает результат.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Convert

Convert.autoByExtension("input.pptx", "output.pdf")

Класс Convert также предоставляет отдельные методы для вывода в PDF, SVG, JPEG, PNG и TIFF. Используйте полную объектную модель, если нужно просмотреть или изменить презентацию перед экспортом или настроить параметр экспорта, который не доступен через выбранный помощник. См. Convert Presentation для сценариев и опций, специфичных для форматов.

Объединить презентации

Вызовите Merger.process для объединения полных файлов презентаций одним вызовом. Входящие презентации должны иметь одинаковый формат файла.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Merger

input_files = jpype.JArray(jpype.JString)(["part-1.pptx", "part-2.pptx"])
Merger.process(input_files, "merged.pptx")

Этот помощник подходит, когда все слайды следует добавить к единому результату без выбора или переопределения их по отдельности. Используйте полную объектную модель, если нужно объединять выбранные слайды, применять целевой шаблон или макет, явно сохранять разделы или согласовывать разные размеры слайдов. См. Merge Presentations для таких сценариев.

Итерация по элементам презентации

Класс ForEach вызывает обратный вызов для каждого запрошенного типа элемента презентации. Это избавляет от вложенных циклов перебора и удобно для проверки или внесения изменений по всей презентации.

В следующем примере используются ForEach.slide, ForEach.shape, ForEach.paragraph и ForEach.portion для инспекции соответствующих элементов:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ForEach, Presentation

def print_slide(slide, index):
    print(f"Slide {index}: {slide.getShapes().size()} shapes")

def print_shape(shape, slide, index):
    print(f"Shape {index} on {slide.getClass().getSimpleName()}: {shape.getName()}")

def print_paragraph(paragraph, slide, index):
    print(f"Paragraph {index} on {slide.getClass().getSimpleName()}: {paragraph.getText()}")

def print_portion(portion, paragraph, slide, index):
    print(f"Portion {index} on {slide.getClass().getSimpleName()}: {portion.getText()}")

presentation = Presentation("input.pptx")
try:
    ForEach.slide(presentation, print_slide)
    ForEach.shape(presentation, print_shape)
    ForEach.paragraph(presentation, print_paragraph)
    ForEach.portion(presentation, print_portion)
finally:
    presentation.dispose()

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

Сбор форм

Применяйте Collect.shapes, когда требуется собрать все формы презентации, а не обрабатывать их по одной через обратный вызов. Это полезно, если один и тот же набор будет отфильтрован, подсчитан или обработан несколько раз.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Collect, Presentation

presentation = Presentation("input.pptx")
try:
    shapes = Collect.shapes(presentation)

    for shape in shapes:
        print(f"{shape.getName()}: {shape.getClass().getSimpleName()}")
finally:
    presentation.dispose()

Используйте ForEach.shape, когда каждую форму можно обработать сразу и нет необходимости сохранять собранный результат.

Сжать содержимое презентации

Класс Compress может удалять неиспользуемые структурные элементы и уменьшать данные вложенных шрифтов:

  • removeUnusedLayoutSlides удаляет макетные слайды, на которые не ссылаются обычные слайды.
  • removeUnusedMasterSlides удаляет шаблонные слайды, которые больше не используются.
  • compressEmbeddedFonts удаляет неиспользуемые символы из вложенных шрифтов.
import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Compress, Presentation, SaveFormat

presentation = Presentation("input.pptx")
try:
    Compress.removeUnusedLayoutSlides(presentation)
    Compress.removeUnusedMasterSlides(presentation)
    Compress.compressEmbeddedFonts(presentation)

    presentation.save("compressed.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Сначала удаляйте неиспользуемые макеты, а затем неиспользуемые шаблоны, чтобы шаблон, ставший не ссылочным после очистки макетов, также был удалён. Сохраните оптимизированную презентацию в новый файл, если позже понадобится исходный набор шаблонов, макетов или полные данные вложенных шрифтов. Подробнее см. Slide Master и Embedded Font.

FAQ

Когда следует использовать API с низким уровнем кода вместо полной объектной модели?

Используйте помощники с низким уровнем кода, когда стандартная операция применяется к полной презентации и не требует детального управления отдельными элементами. Применяйте полную объектную модель, если нужно выбрать конкретные слайды, управлять связями шаблон‑макет, просматривать промежуточное состояние или настраивать поведение, которое не предоставляет помощник.

Может ли Merger объединять презентации разных форматов?

Нет. Метод Merger.process требует, чтобы входные презентации имели одинаковый формат. Сначала конвертируйте входные файлы в общий формат, например с помощью Convert.autoByExtension, а затем объедините полученные файлы.

Обрабатывает ли ForEach шаблонные, макетные и слайды с заметками?

ForEach.slide перебирает обычные слайды презентации. Операции ForEach.shape, ForEach.paragraph и ForEach.portion по умолчанию включают обычные, шаблонные и макетные слайды. Используйте их перегрузки с параметром includeNotes, установленным в True, чтобы включить слайды с заметками.

В чём разница между ForEach.shape и Collect.shapes?

Применяйте ForEach.shape для немедленной обработки каждой формы через обратный вызов. Используйте Collect.shapes, когда нужен итерируемый результат, который можно сохранить, отфильтровать, подсчитать или пройти несколько раз.

Всегда ли Compress уменьшает размер файла презентации?

Не обязательно. Результат зависит от того, содержит ли презентация неиспользуемые макеты, шаблоны или вложенные шрифты с неиспользуемыми символами. Если таких элементов нет, соответствующие операции Compress могут не уменьшить размер файла.

Сохраняются ли изменения, выполненные ForEach или Compress, автоматически?

Нет. Эти помощники работают с загруженным объектом Presentation в памяти. После изменения элементов в обратном вызове ForEach или выполнения Compress, вызовите Presentation.save, чтобы записать результат.

Связанные статьи