Python で PowerPoint プレゼンテーションの感度ラベルを管理

概要

Microsoft Purview の感度ラベルは、組織がドキュメントを分類および管理できるようにします。自動プレゼンテーション処理中に、アプリケーションは既存のラベルを保持したり、ポリシーで選択されたラベルを適用したり、状態を更新したり、古い Microsoft Information Protection (MIP) ワークフローで書き込まれたラベルメタデータを移行する必要がある場合があります。

Aspose.Slides は、Presentation.getSensitivityLabels を通じて最新の感度ラベル メタデータを提供します。このメソッドは、SensitivityLabelCollection を返し、PPTX として保存する前に検査および変更できます。

感度ラベルのプロパティを理解する

SensitivityLabel には次のメタデータが含まれます。

メソッド 目的
getIdsetId Purview ポリシー内の感度ラベル識別子を取得または設定します。
getSiteIdsetSiteId ラベル ポリシーに関連付けられたサイトを取得または設定します。
isEnabledsetEnabled ラベルが有効かどうかを取得または設定します。
isRemovedsetRemoved ラベルが削除されたかどうかを取得または設定します。メタデータに削除状態を保持する必要がある場合は、値を True に設定します。
getAssignmentMethodTypesetAssignmentMethodType ラベルが自動的に適用されたか、ユーザーの決定によって適用されたかを取得または設定します。
getContentMarkTypes ラベルに関連付けられたコンテンツ マークの種類を取得します。

SensitivityLabelAssignmentType クラスは、ラベルがどのように割り当てられたかを定義します。

  • Standard はデフォルトまたは自動的に適用されたラベルを表します。
  • Privileged はユーザーの決定により適用されたラベルを表し、手動適用、推奨、必須ラベルを含みます。

SensitivityLabelContentType クラスはラベルに関連付けられるマークを定義します。

意味
None ラベルがデフォルトまたは自動的に適用されました。
Header ヘッダー コンテンツ マークがラベルに関連付けられています。
Footer フッター コンテンツ マークがラベルに関連付けられています。
Watermark ウォーターマーク コンテンツ マークがラベルに関連付けられています。
Encryption 暗号化保護がラベルに関連付けられています。

1 つのラベルに複数のマークタイプを関連付けることができます。

既存の感度ラベルを一覧表示

最新のラベル コレクションを 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.setRemovedTrue で呼び出します。これによりラベルのエントリは保持され、削除状態が記録されます。代わりにモダン コレクションからエントリを削除する必要がある場合は、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.add を通じて最新の SensitivityLabelCollection に追加します。重複するラベル識別子を追加しようとすると例外が発生するため、例ではコピー前に宛先コレクションをチェックしています。各レガシー ラベルが現在の 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.saveSaveFormat.Pptx を使用して、最新のラベル メタデータを PPTX ファイルに書き込みます。

FAQ

コンテンツ マーク タイプを追加すると、スライドに目に見えるヘッダー、フッター、またはウォーターマークが作成されますか?

いいえ。SensitivityLabel.getContentMarkTypes が返すリストに追加された値は、感度ラベルに関連付けられたマークを示すだけで、プレゼンテーションに可視的なテキストや図形を作成するものではありません。ワークフローでそれらのマークを表示する必要がある場合は、対応するスライド コンテンツを別途追加してください。

ラベルを削除済みとしてマークすることと、コレクションから削除することの違いは何ですか?

SensitivityLabel.setRemovedTrue に設定すると、ラベル エントリは保持され、削除状態が記録されます。SensitivityLabelCollection.removeAt を呼び出すと、モダン コレクションからエントリが削除されます。組織のメタデータ保持要件に合わせて操作を選択してください。

プレゼンテーションにレガシー MIP メタデータと最新の感度ラベルの両方を含めることはできますか?

はい。レガシー ラベルはカスタム ドキュメント プロパティに残したまま、最新のラベルは Presentation.getSensitivityLabels で取得できます。DocumentProperties.getSensitivityLabels を使用してレガシー メタデータを読み取り、最新のコレクションにまだ存在しない有効なラベルのみを移行してください。

同じ識別子を持つラベルを複数回追加するとどうなりますか?

SensitivityLabelCollection.add は同じ識別子のラベルがすでにコレクションに存在すると例外をスローします。SensitivityLabel.getId が返す既存の値をチェックしてからラベルを追加または移行してください。

更新された感度ラベルを保持するために使用すべき出力形式はどれですか?

プレゼンテーションは Presentation.saveSaveFormat.Pptx を使用して PPTX として保存してください。上記の例に示すようにしてください。