Gestire le etichette di sensibilità nelle presentazioni PowerPoint in Python

Panoramica

Microsoft Purview sensitivity labels aiutano le organizzazioni a classificare e governare i documenti. Durante l’elaborazione automatica delle presentazioni, un’applicazione può dover conservare un’etichetta esistente, applicare un’etichetta selezionata da una politica, aggiornare il suo stato o migrare i metadati dell’etichetta scritti da un flusso di lavoro Microsoft Information Protection (MIP) più vecchio.

Aspose.Slides espone i metadati delle etichette di sensibilità moderne tramite Presentation.getSensitivityLabels. Questo metodo restituisce una SensitivityLabelCollection che può essere ispezionata e modificata prima che la presentazione venga salvata come PPTX.

Comprendere le proprietà delle etichette di sensibilità

Ogni SensitivityLabel contiene i seguenti metadati:

Metodi Scopo
getId e setId Ottieni o imposta l’identificatore dell’etichetta di sensibilità nella politica Purview.
getSiteId e setSiteId Ottieni o imposta il sito associato alla politica dell’etichetta.
isEnabled e setEnabled Ottieni o imposta se l’etichetta è abilitata.
isRemoved e setRemoved Ottieni o imposta se l’etichetta è stata rimossa. Imposta il valore a True quando lo stato di rimozione deve essere conservato nei metadati.
getAssignmentMethodType e setAssignmentMethodType Ottieni o imposta se l’etichetta è stata applicata automaticamente o tramite decisione dell’utente.
getContentMarkTypes Ottieni i tipi di marcatura di contenuto associati all’etichetta.

La classe SensitivityLabelAssignmentType definisce come un’etichetta è stata assegnata:

  • Standard rappresenta un’etichetta predefinita o applicata automaticamente.
  • Privileged rappresenta un’etichetta applicata tramite decisione dell’utente, comprese quelle applicate manualmente, consigliate e obbligatorie.

La classe SensitivityLabelContentType definisce la marcatura associata a un’etichetta:

Valore Significato
None L’etichetta è stata applicata per impostazione predefinita o automaticamente.
Header La marcatura di contenuto dell’intestazione è associata all’etichetta.
Footer La marcatura di contenuto del piè di pagina è associata all’etichetta.
Watermark La marcatura di contenuto della filigrana è associata all’etichetta.
Encryption La protezione crittografica è associata all’etichetta.

Più tipi di marcatura possono essere associati a una singola etichetta.

Elencare le etichette di sensibilità esistenti

Leggi la raccolta di etichette moderne da Presentation.getSensitivityLabels ed elencala. L’esempio seguente elenca ogni proprietà e marcatura di contenuto memorizzata per ciascuna etichetta:

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

Aggiungere un’etichetta di sensibilità con marcatura del contenuto

Usa SensitivityLabelCollection.add con l’identificatore dell’etichetta, l’identificatore del sito, lo stato abilitato e il metodo di assegnazione. Dopo che il metodo restituisce la nuova SensitivityLabel, aggiungi i valori di marcatura richiesti tramite l’elenco restituito da SensitivityLabel.getContentMarkTypes.

L’esempio seguente aggiunge un’etichetta selezionata manualmente associata a marcature di piè di pagina e filigrana, quindi salva il risultato come PPTX:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpame.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()

Aggiornare un’etichetta di sensibilità

I valori di SensitivityLabel sono leggibili/scrivibili, eccetto l’elenco restituito da SensitivityLabel.getContentMarkTypes che si modifica tramite le operazioni della sua lista. Dopo aver individuato l’etichetta richiesta, puoi aggiornare il suo identificatore, l’identificatore del sito, lo stato abilitato, il metodo di assegnazione, lo stato di rimozione e i tipi di marcatura del contenuto. Salva la presentazione per rendere persistenti le modifiche.

L’esempio seguente aggiorna lo stato abilitato e il metodo di assegnazione della prima etichetta:

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

Contrassegnare un’etichetta di sensibilità come rimossa

Per conservare il fatto che un’etichetta è stata rimossa, trova l’etichetta e chiama SensitivityLabel.setRemoved con True. Questo mantiene la voce dell’etichetta registrando il suo stato rimosso. Se invece devi eliminare una voce dalla raccolta moderna, usa SensitivityLabelCollection.removeAt; usa SensitivityLabelCollection.clear per cancellare tutte le voci.

L’esempio seguente contrassegna un’etichetta specifica come rimossa e salva la presentazione aggiornata:

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

Leggere e migrare le etichette di sensibilità MIP legacy

I flussi di lavoro più vecchi basati su MIP possono memorizzare i metadati delle etichette di sensibilità in proprietà personalizzate del documento invece della raccolta di etichette moderne. Leggi quei metadati con DocumentProperties.getSensitivityLabels. Il metodo analizza le proprietà personalizzate legacy e restituisce un array di oggetti SensitivityLabel.

Per migrare i metadati, aggiungi ogni etichetta restituita alla moderna SensitivityLabelCollection tramite SensitivityLabelCollection.add. Poiché l’aggiunta di un identificatore di etichetta duplicato genera un’eccezione, l’esempio controlla la raccolta di destinazione prima di copiare ciascuna etichetta. È possibile aggiungere ulteriori convalide per confermare che ogni etichetta legacy esista ancora nella politica Purview corrente.

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

La migrazione copia gli oggetti etichetta analizzati nella raccolta moderna. Non è necessario cancellare tutte le proprietà personalizzate del documento, così i metadati non correlati rimangono intatti. Usa Presentation.save con SaveFormat.Pptx per scrivere i metadati delle etichette moderne in un file PPTX.

FAQ

L’aggiunta di un tipo di marcatura del contenuto crea un’intestazione, un piè di pagina o una filigrana visibile sulle diapositive?

No. I valori aggiunti tramite l’elenco restituito da SensitivityLabel.getContentMarkTypes descrivono le marcature associate all’etichetta di sensibilità. Non creano testo o forme visibili nella presentazione. Aggiungi separatamente il contenuto della diapositiva corrispondente se il tuo flusso di lavoro deve renderizzare tali marcature.

Qual è la differenza tra contrassegnare un’etichetta come rimossa e cancellarla dalla raccolta?

Chiamare SensitivityLabel.setRemoved con True mantiene la voce dell’etichetta e registra il suo stato rimosso. Chiamare SensitivityLabelCollection.removeAt elimina la voce dalla raccolta moderna. Scegli l’operazione che corrisponde ai requisiti di conservazione dei metadati della tua organizzazione.

Una presentazione può contenere sia metadati MIP legacy che etichette di sensibilità moderne?

Sì. Le etichette legacy possono rimanere nelle proprietà personalizzate del documento, mentre le etichette moderne sono disponibili tramite Presentation.getSensitivityLabels. Usa DocumentProperties.getSensitivityLabels per leggere i metadati legacy e migrare solo le etichette valide che non sono già presenti nella raccolta moderna.

Cosa accade quando un’etichetta con lo stesso identificatore viene aggiunta più di una volta?

SensitivityLabelCollection.add genera un’eccezione quando la raccolta contiene già un’etichetta con lo stesso identificatore. Controlla i valori esistenti restituiti da SensitivityLabel.getId prima di aggiungere o migrare le etichette.

Quale formato di output dovrebbe essere usato per preservare le etichette di sensibilità aggiornate?

Salva la presentazione come PPTX chiamando Presentation.save con SaveFormat.Pptx, come mostrato negli esempi sopra.