在 Java 中管理 PowerPoint 簡報的敏感度標籤

概述

Microsoft Purview 敏感度標籤協助組織對文件進行分類與治理。在自動化簡報處理期間,應用程式可能需要保留現有標籤、套用政策所選的標籤、更新其狀態,或遷移由較舊的 Microsoft Information Protection (MIP) 工作流程寫入的標籤中繼資料。

Aspose.Slides 透過 IPresentation.getSensitivityLabels 讓使用者存取現代敏感度標籤的中繼資料。此方法回傳一個 ISensitivityLabelCollection,可在簡報儲存為 PPTX 之前檢查與修改。

了解敏感度標籤屬性

每個 ISensitivityLabel 包含以下中繼資料:

方法 目的
ISensitivityLabel.getId and ISensitivityLabel.setId 取得或設定 Purview 政策中的敏感度標籤識別碼。
ISensitivityLabel.getSiteId and ISensitivityLabel.setSiteId 取得或設定與標籤政策關聯的網站。
ISensitivityLabel.isEnabled and ISensitivityLabel.setEnabled 取得或設定標籤是否已啟用。
ISensitivityLabel.isRemoved and ISensitivityLabel.setRemoved 取得或設定標籤是否已被移除。當必須在中繼資料中保留移除狀態時,將值設為 true
ISensitivityLabel.getAssignmentMethodType and ISensitivityLabel.setAssignmentMethodType 取得或設定標籤是自動套用還是透過使用者決策套用。
ISensitivityLabel.getContentMarkTypes 取得與該標籤關聯的內容標記類型。

SensitivityLabelAssignmentType 類別定義了標籤的指派方式:

SensitivityLabelContentType 類別定義了與標籤相關的標記:

意義
SensitivityLabelContentType.None 標籤以預設或自動方式套用。
SensitivityLabelContentType.Header 與標籤關聯的內容標記為標題。
SensitivityLabelContentType.Footer 與標籤關聯的內容標記為頁尾。
SensitivityLabelContentType.Watermark 與標籤關聯的內容標記為浮水印。
SensitivityLabelContentType.Encryption 與標籤關聯的內容標記為加密保護。

一個標籤可以關聯多種標記類型。

列出現有的敏感度標籤

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 搭配標籤識別碼、網站識別碼、啟用狀態與指派方法。方法回傳新的 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 回傳的清單,需使用其清單操作進行修改。找到目標標籤後,您可以更新其識別碼、網站識別碼、啟用狀態、指派方法、移除狀態以及內容標記類型。儲存簡報以使變更永久化。

以下範例更新第一個標籤的啟用狀態與指派方法:

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();
}

遷移會將已解析的標籤物件複製到現代集合中。此過程不需要清除所有自訂文件屬性,因此與此無關的文件中繼資料會保持完整。使用 IPresentation.save 搭配 SaveFormat.Pptx 可將現代標籤中繼資料寫入 PPTX 檔案。

FAQ

新增內容標記類型會在投影片上產生可見的標頭、頁尾或浮水印嗎?

不會。透過 ISensitivityLabel.getContentMarkTypes 回傳的清單所新增的值僅說明與敏感度標籤關聯的標記,它們不會在簡報中產生可見的文字或圖形。如果您的工作流程必須呈現這些標記,請另外加入相應的投影片內容。

將標籤標記為已移除與從集合中刪除之間有何差異?

呼叫 ISensitivityLabel.setRemoved 並傳入 true 會保留標籤項目,同時記錄其已移除的狀態。呼叫 ISensitivityLabelCollection.removeAt 則會將該項目從現代集合中刪除。請依組織的中繼資料保留需求選擇相應的操作。

簡報可以同時包含傳統 MIP 中繼資料與現代敏感度標籤嗎?

可以。傳統標籤可以保留在自訂文件屬性中,而現代標籤則可透過 IPresentation.getSensitivityLabels 取得。使用 IDocumentProperties.getSensitivityLabels 讀取傳統中繼資料,並僅遷移尚未存在於現代集合中的有效標籤。

當多次新增具有相同識別碼的標籤時會發生什麼情況?

ISensitivityLabelCollection.add 會在集合已包含相同識別碼的標籤時拋出例外。於新增或遷移標籤前,請先檢查 ISensitivityLabel.getId 回傳的現有值。

應使用哪種輸出格式才能保留更新後的敏感度標籤?

如上述範例所示,請使用 IPresentation.save 搭配 SaveFormat.Pptx,將簡報儲存為 PPTX,以保留已更新的敏感度標籤。