Java で PowerPoint プレゼンテーションの機密ラベルを管理する

概要

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

Aspose.Slides は、最新の機密ラベルメタデータを IPresentation.getSensitivityLabels を介して提供します。このメソッドは、プレゼンテーションを PPTX として保存する前に検査および変更できる ISensitivityLabelCollection を返します。

機密ラベルプロパティの理解

ISensitivityLabel には、以下のメタデータが含まれています。

メソッド 目的
ISensitivityLabel.getIdISensitivityLabel.setId Purview ポリシー内の機密ラベル識別子を取得または設定します。
ISensitivityLabel.getSiteIdISensitivityLabel.setSiteId ラベルポリシーに関連付けられたサイトを取得または設定します。
ISensitivityLabel.isEnabledISensitivityLabel.setEnabled ラベルが有効かどうかを取得または設定します。
ISensitivityLabel.isRemovedISensitivityLabel.setRemoved ラベルが削除されたかどうかを取得または設定します。メタデータに削除状態を保持する必要がある場合は、値を true に設定します。
ISensitivityLabel.getAssignmentMethodTypeISensitivityLabel.setAssignmentMethodType ラベルが自動的に適用されたか、ユーザーの決定によって適用されたかを取得または設定します。
ISensitivityLabel.getContentMarkTypes ラベルに関連付けられたコンテンツマーキングタイプを取得します。

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

SensitivityLabelContentType クラスは、ラベルに関連付けられたマーキングを定義します。

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

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

既存の機密ラベルの一覧

最新のラベルコレクションを IPresentation.getSensitivityLabels から読み取り、列挙します。以下の例では、各ラベルに保存されているすべてのプロパティとコンテンツマーキングを一覧表示します。

import com.aspose.slides.*;

Presentation presentation = new Presentation("presentation.pptx");
try {
    ISensitivityLabelCollection sensitivityLabels = presentation.getSensitivityLabels();

    for (ISensitivityLabel sensitivityLabel : sensitivityLabels) {
        System.out.println("Label ID: " + sensitivityLabel.getId());
        System.out.println("Site ID: " + sensitivityLabel.getSiteId());
        System.out.println("Enabled: " + sensitivityLabel.isEnabled());
        System.out.println("Removed: " + sensitivityLabel.isRemoved());
        System.out.println("Assignment method: " + sensitivityLabel.getAssignmentMethodType());

        for (Integer contentMarkType : sensitivityLabel.getContentMarkTypes()) {
            System.out.println("Content marking: " + contentMarkType);
        }
    }
} finally {
    presentation.dispose();
}

コンテンツマーキング付きの機密ラベルを追加する

ISensitivityLabelCollection.add を使用して、ラベル識別子、サイト識別子、Enabled 状態、割り当て方法を指定します。メソッドが新しい ISensitivityLabel を返したら、ISensitivityLabel.getContentMarkTypes が返すリストを通じて必要なマーキング値を追加します。

以下の例は、フッターと透かしのマーキングが関連付けられた手動選択ラベルを追加し、結果を PPTX として保存します。

import com.aspose.slides.*;
import java.util.UUID;

Presentation presentation = new Presentation("presentation.pptx");
try {
    ISensitivityLabelCollection sensitivityLabels = presentation.getSensitivityLabels();

    String labelIdentifier = "{11111111-2222-3333-4444-555555555555}";
    UUID siteIdentifier = UUID.fromString("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
    boolean isEnabled = true;
    int assignmentMethod = SensitivityLabelAssignmentType.Privileged;

    ISensitivityLabel sensitivityLabel = sensitivityLabels.add(
            labelIdentifier,
            siteIdentifier,
            isEnabled,
            assignmentMethod);

    sensitivityLabel.getContentMarkTypes().addItem(SensitivityLabelContentType.Footer);
    sensitivityLabel.getContentMarkTypes().addItem(SensitivityLabelContentType.Watermark);

    presentation.save("presentation_with_label.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

機密ラベルを更新する

ISensitivityLabel の値は読み書き可能ですが、ISensitivityLabel.getContentMarkTypes が返すリストはそのリスト操作を介して変更します。必要なラベルを特定したら、識別子、サイト識別子、Enabled 状態、割り当て方法、削除状態、およびコンテンツマーキングタイプを更新できます。変更を永続化するためにプレゼンテーションを保存します。

以下の例は、最初のラベルの Enabled 状態と割り当て方法を更新します。

import com.aspose.slides.*;

Presentation presentation = new Presentation("presentation.pptx");
try {
    ISensitivityLabelCollection sensitivityLabels = presentation.getSensitivityLabels();

    if (sensitivityLabels.getCount() > 0) {
        ISensitivityLabel sensitivityLabel = sensitivityLabels.get_Item(0);
        sensitivityLabel.setEnabled(true);
        sensitivityLabel.setAssignmentMethodType(SensitivityLabelAssignmentType.Privileged);
    }

    presentation.save("presentation_with_updated_label.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

機密ラベルを削除済みとしてマークする

ラベルが削除された事実を保持するには、ラベルを見つけて true を指定して ISensitivityLabel.setRemoved を呼び出します。これにより、ラベルエントリは保持され、削除状態が記録されます。代わりに最新コレクションからエントリを削除する必要がある場合は、ISensitivityLabelCollection.removeAt を使用し、すべてのエントリを削除するには ISensitivityLabelCollection.clear を使用します。

以下の例は、特定のラベルを削除済みとしてマークし、更新されたプレゼンテーションを保存します。

import com.aspose.slides.*;

Presentation presentation = new Presentation("presentation.pptx");
try {
    ISensitivityLabelCollection sensitivityLabels = presentation.getSensitivityLabels();
    String targetLabelIdentifier = "{11111111-2222-3333-4444-555555555555}";

    for (ISensitivityLabel sensitivityLabel : sensitivityLabels) {
        boolean isTargetLabel = sensitivityLabel.getId().equalsIgnoreCase(targetLabelIdentifier);

        if (isTargetLabel) {
            sensitivityLabel.setRemoved(true);
            break;
        }
    }

    presentation.save("presentation_with_removed_label.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

レガシー MIP 機密ラベルの読み取りと移行

従来の MIP ベースのワークフローは、最新のラベルコレクションの代わりにカスタムドキュメント プロパティに機密ラベルメタデータを格納することがあります。そのメタデータは IDocumentProperties.getSensitivityLabels で読み取ります。このメソッドはレガシーのカスタムプロパティを解析し、ISensitivityLabel オブジェクトの配列を返します。

メタデータを移行するには、返された各ラベルを ISensitivityLabelCollection.add を使用して最新の ISensitivityLabelCollection に追加します。重複したラベル識別子を追加すると例外が発生するため、例では各ラベルをコピーする前に宛先コレクションをチェックしています。各レガシーラベルが現在の Purview ポリシーにまだ存在することを確認するための追加検証を行うこともできます。

import com.aspose.slides.*;

Presentation presentation = new Presentation("presentation_with_legacy_labels.pptx");
try {
    ISensitivityLabel[] legacySensitivityLabels = presentation.getDocumentProperties().getSensitivityLabels();
    ISensitivityLabelCollection modernSensitivityLabels = presentation.getSensitivityLabels();

    for (ISensitivityLabel legacySensitivityLabel : legacySensitivityLabels) {
        boolean labelAlreadyExists = false;

        for (ISensitivityLabel modernSensitivityLabel : modernSensitivityLabels) {
            labelAlreadyExists = modernSensitivityLabel.getId().equalsIgnoreCase(
                    legacySensitivityLabel.getId());

            if (labelAlreadyExists) {
                break;
            }
        }

        if (!labelAlreadyExists) {
            modernSensitivityLabels.add(legacySensitivityLabel);
        }
    }

    presentation.save("presentation_with_modern_labels.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

この移行は、解析されたラベルオブジェクトを最新のコレクションにコピーします。すべてのカスタムドキュメント プロパティをクリアする必要はなく、無関係なドキュメントメタデータはそのまま残ります。最新のラベルメタデータを書き込むには、SaveFormat.Pptx とともに IPresentation.save を使用して PPTX ファイルに保存します。

FAQ

コンテンツマーキングタイプを追加すると、スライドに表示されるヘッダー、フッター、または透かしが作成されますか?

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

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

true を指定して ISensitivityLabel.setRemoved を呼び出すと、ラベルエントリが保持され、削除状態が記録されます。ISensitivityLabelCollection.removeAt を呼び出すと、最新のコレクションからエントリが削除されます。組織のメタデータ保持要件に合致する操作を選択してください。

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

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

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

ISensitivityLabelCollection.add は、同じ識別子のラベルがすでにコレクションに存在する場合に例外をスローします。ラベルを追加または移行する前に、ISensitivityLabel.getId が返す既存の値を確認してください。

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

上記の例のように、SaveFormat.Pptx とともに IPresentation.save を呼び出してプレゼンテーションを PPTX として保存してください。