Управление метками чувствительности в презентациях PowerPoint на Python

Обзор

Microsoft Purview sensitivity labels помогают организациям классифицировать и управлять документами. При автоматической обработке презентаций приложению может потребоваться сохранить существующую метку, применить метку, выбранную политикой, обновить её состояние или перенести метаданные метки, записанные более старым рабочим процессом Microsoft Information Protection (MIP).

Aspose.Slides предоставляет современные метаданные меток чувствительности через Presentation.getSensitivityLabels. Этот метод возвращает SensitivityLabelCollection, которую можно просмотреть и изменить до сохранения презентации в формате PPTX.

Понимание свойств метки чувствительности

Каждый SensitivityLabel содержит следующие метаданные:

Методы Назначение
getId и setId Получить или задать идентификатор метки чувствительности в политике Purview.
getSiteId и setSiteId Получить или задать сайт, связанный с политикой метки.
isEnabled и setEnabled Получить или задать, включена ли метка.
isRemoved и setRemoved Получить или задать, удалена ли метка. Установите значение True, когда состояние удаления должно сохраняться в метаданных.
getAssignmentMethodType и setAssignmentMethodType Получить или задать, была ли метка применена автоматически или через решение пользователя.
getContentMarkTypes Получить типы маркировки содержимого, связанные с меткой.

Класс SensitivityLabelAssignmentType определяет, как была назначена метка:

  • Standard представляет метку по умолчанию или применённую автоматически.
  • Privileged представляет метку, применённую решением пользователя, включая вручную применённые, рекомендованные и обязательные метки.

Класс SensitivityLabelContentType определяет маркировку, связанную с меткой:

Значение Описание
None Метка применена по умолчанию или автоматически.
Header Маркировка содержимого заголовка связана с меткой.
Footer Маркировка содержимого нижнего колонтитула связана с меткой.
Watermark Маркировка содержимого водяного знака связана с меткой.
Encryption Защита шифрованием связана с меткой.

Один метке могут соответствовать несколько типов маркировки.

Список существующих меток чувствительности

Прочитайте современную коллекцию меток через Presentation.getSensitivityLabels и перечислите её. Следующий пример выводит каждое свойство и маркировку содержимого, хранящиеся для каждой метки:

import jpype
import asposeslides

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

from asposeslides.api import Presentation

presentation = Presentation("presentation.pptx")
try:
    sensitivity_labels = presentation.getSensitivityLabels()

    for sensitivity_label in sensitivity_labels:
        print("Label ID:", sensitivity_label.getId())
        print("Site ID:", sensitivity_label.getSiteId())
        print("Enabled:", sensitivity_label.isEnabled())
        print("Removed:", sensitivity_label.isRemoved())
        print("Assignment method:", sensitivity_label.getAssignmentMethodType())

        for content_mark_type in sensitivity_label.getContentMarkTypes():
            print("Content marking:", content_mark_type)
finally:
    presentation.dispose()

Добавление метки чувствительности с маркировкой содержимого

Используйте SensitivityLabelCollection.add с идентификатором метки, идентификатором сайта, состоянием включения и методом назначения. После того как метод вернёт новый SensitivityLabel, добавьте требуемые значения маркировки через список, возвращаемый SensitivityLabel.getContentMarkTypes.

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

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat, SensitivityLabelAssignmentType, SensitivityLabelContentType
from java.util import UUID

presentation = Presentation("presentation.pptx")
try:
    sensitivity_labels = presentation.getSensitivityLabels()

    label_identifier = "{11111111-2222-3333-4444-555555555555}"
    site_identifier = UUID.fromString("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
    is_enabled = True
    assignment_method = SensitivityLabelAssignmentType.Privileged

    sensitivity_label = sensitivity_labels.add(label_identifier, site_identifier, is_enabled, assignment_method)

    sensitivity_label.getContentMarkTypes().addItem(jpype.JInt(SensitivityLabelContentType.Footer))
    sensitivity_label.getContentMarkTypes().addItem(jpype.JInt(SensitivityLabelContentType.Watermark))

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

Обновление метки чувствительности

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

Следующий пример обновляет состояние включения и метод назначения первой метки:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat, SensitivityLabelAssignmentType

presentation = Presentation("presentation.pptx")
try:
    sensitivity_labels = presentation.getSensitivityLabels()

    if sensitivity_labels.getCount() > 0:
        sensitivity_label = sensitivity_labels.get_Item(0)
        sensitivity_label.setEnabled(True)
        sensitivity_label.setAssignmentMethodType(SensitivityLabelAssignmentType.Privileged)

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

Пометка метки чувствительности как удалённой

Чтобы сохранить факт удаления метки, найдите её и вызовите SensitivityLabel.setRemoved со значением True. Это сохраняет запись метки, отмечая её как удалённую. Если вместо этого нужно полностью удалить запись из современной коллекции, используйте SensitivityLabelCollection.removeAt; для удаления всех записей примените SensitivityLabelCollection.clear.

Следующий пример помечает конкретную метку как удалённую и сохраняет обновлённую презентацию:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation("presentation.pptx")
try:
    sensitivity_labels = presentation.getSensitivityLabels()
    target_label_identifier = "{11111111-2222-3333-4444-555555555555}"

    for sensitivity_label in sensitivity_labels:
        is_target_label = str(sensitivity_label.getId()).casefold() == target_label_identifier.casefold()

        if is_target_label:
            sensitivity_label.setRemoved(True)
            break

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

Чтение и миграция устаревших меток чувствительности MIP

Старые рабочие процессы на основе MIP могут сохранять метаданные меток чувствительности в пользовательских свойствах документа вместо современной коллекции меток. Прочитайте эти метаданные с помощью DocumentProperties.getSensitivityLabels. Метод анализирует устаревшие пользовательские свойства и возвращает массив объектов SensitivityLabel.

Чтобы мигрировать метаданные, добавьте каждую полученную метку в современную SensitivityLabelCollection через SensitivityLabelCollection.add. Поскольку добавление дублирующего идентификатора метки вызывает исключение, пример проверяет целевую коллекцию перед копированием каждой метки. Вы можете добавить дополнительную проверку, чтобы убедиться, что каждая устаревшая метка всё ещё присутствует в текущей политике Purview.

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation("presentation_with_legacy_labels.pptx")
try:
    legacy_sensitivity_labels = presentation.getDocumentProperties().getSensitivityLabels()
    modern_sensitivity_labels = presentation.getSensitivityLabels()

    for legacy_sensitivity_label in legacy_sensitivity_labels:
        label_already_exists = False

        for modern_sensitivity_label in modern_sensitivity_labels:
            label_already_exists = str(modern_sensitivity_label.getId()).casefold() == str(legacy_sensitivity_label.getId()).casefold()

            if label_already_exists:
                break

        if not label_already_exists:
            modern_sensitivity_labels.add(legacy_sensitivity_label)

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

Миграция копирует разобранные объекты меток в современную коллекцию. Это не требует очистки всех пользовательских свойств документа, поэтому несвязанные метаданные документа остаются нетронутыми. Используйте Presentation.save с SaveFormat.Pptx для записи современных метаданных меток в файл PPTX.

FAQ

Создаёт ли добавление типа маркировки содержимого видимый заголовок, нижний колонтитул или водяной знак на слайдах?

Нет. Значения, добавленные через список, возвращаемый SensitivityLabel.getContentMarkTypes, описывают маркировку, связанную с меткой чувствительности. Они не создают видимый текст или фигуры в презентации. При необходимости отобразить эти маркировки добавьте соответствующий контент слайдов отдельно.

В чём разница между пометкой метки как удалённой и её удалением из коллекции?

Вызов SensitivityLabel.setRemoved со значением True сохраняет запись метки и фиксирует её состояние как удалённое. Вызов SensitivityLabelCollection.removeAt полностью удаляет запись из современной коллекции. Выберите операцию, соответствующую требованиям вашей организации по хранению метаданных.

Может ли презентация содержать одновременно устаревшие метаданные MIP и современные метки чувствительности?

Да. Устаревшие метки могут оставаться в пользовательских свойствах документа, тогда как современные метки доступны через Presentation.getSensitivityLabels. Используйте DocumentProperties.getSensitivityLabels для чтения устаревших метаданных и мигрируйте только те метки, которые ещё не присутствуют в современной коллекции.

Что происходит, если одна и та же метка добавляется несколько раз?

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

Какой формат вывода следует использовать для сохранения обновлённых меток чувствительности?

Сохраните презентацию в формате PPTX, вызвав Presentation.save с параметром SaveFormat.Pptx, как показано в примерах выше.