Spravovat štítky citlivosti v prezentacích PowerPoint v C++

Přehled

Microsoft Purview sensitivity labels pomáhají organizacím klasifikovat a spravovat dokumenty. Během automatického zpracování prezentace může aplikace potřebovat zachovat existující štítek, použít štítek vybraný politikou, aktualizovat jeho stav nebo migrovat metadata štítku zapsaná starším pracovním postupem Microsoft Information Protection (MIP).

Aspose.Slides poskytuje moderní metadata štítků citlivosti prostřednictvím IPresentation::get_SensitivityLabels. Tato metoda vrací ISensitivityLabelCollection, kterou lze prozkoumat a upravit před uložením prezentace jako PPTX.

Pochopení vlastností štítku citlivosti

Každý ISensitivityLabel obsahuje následující metadata:

Přístupy Účel
ISensitivityLabel::get_Id, ISensitivityLabel::set_Id Identifikuje štítek citlivosti v politice Purview.
ISensitivityLabel::get_SiteId, ISensitivityLabel::set_SiteId Identifikuje web (site) spojený s politikou štítku.
ISensitivityLabel::get_IsEnabled, ISensitivityLabel::set_IsEnabled Udává, zda je štítek povolen.
ISensitivityLabel::get_IsRemoved, ISensitivityLabel::set_IsRemoved Udává, že byl štítek odstraněn. Nastavte hodnotu na true, pokud musí být stav odstranění zachován v metadatech.
ISensitivityLabel::get_AssignmentMethodType, ISensitivityLabel::set_AssignmentMethodType Určuje, zda byl štítek aplikován automaticky nebo na základě rozhodnutí uživatele.
ISensitivityLabel::get_ContentMarkTypes Uvádí typy označení obsahu spojené se štítkem.

Výčtový typ SensitivityLabelAssignmentType popisuje, jak byl štítek přiřazen:

Výčtový typ SensitivityLabelContentType určuje označení spojené se štítkem:

Hodnota Význam
SensitivityLabelContentType::None Štítek byl aplikován výchozím nastavením nebo automaticky.
SensitivityLabelContentType::Header K štítku je přiřazeno označení hlavičky.
SensitivityLabelContentType::Footer K štítku je přiřazeno označení zápatí.
SensitivityLabelContentType::Watermark K štítku je přiřazeno označení vodoznaku.
SensitivityLabelContentType::Encryption K štítku je přiřazena ochrana šifrováním.

Více typů označení může být přiřazeno jednomu štítku.

Seznam existujících štítků citlivosti

Načtěte moderní kolekci štítků z IPresentation::get_SensitivityLabels a enumerujte ji. Následující příklad vypíše každou vlastnost a označení obsahu uložené pro každý štítek:

#include <DOM/Presentation.h>
#include <DOM/ISensitivityLabel.h>
#include <DOM/ISensitivityLabelCollection.h>
#include <DOM/SensitivityLabelAssignmentType.h>
#include <DOM/SensitivityLabelContentType.h>
#include <system/collections/ilist.h>
#include <system/console.h>
#include <system/guid.h>
#include <system/shared_ptr.h>
#include <system/string.h>

using Aspose::Slides::Presentation;
using System::Console;
using System::MakeObject;

auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto sensitivityLabels = presentation->get_SensitivityLabels();

for (auto&& sensitivityLabel : sensitivityLabels)
{
    auto labelIdentifier = sensitivityLabel->get_Id();
    auto siteIdentifier = sensitivityLabel->get_SiteId();
    auto isEnabled = sensitivityLabel->get_IsEnabled();
    auto isRemoved = sensitivityLabel->get_IsRemoved();
    auto assignmentMethod = sensitivityLabel->get_AssignmentMethodType();

    Console::WriteLine(u"Label ID: {0}", labelIdentifier);
    Console::WriteLine(u"Site ID: {0}", siteIdentifier);
    Console::WriteLine(u"Enabled: {0}", isEnabled);
    Console::WriteLine(u"Removed: {0}", isRemoved);
    Console::WriteLine(u"Assignment method: {0}", assignmentMethod);

    for (auto contentMarkType : sensitivityLabel->get_ContentMarkTypes())
    {
        Console::WriteLine(u"Content marking: {0}", contentMarkType);
    }
}

presentation->Dispose();

Přidání štítku citlivosti s označením obsahu

Použijte ISensitivityLabelCollection::Add s identifikátorem štítku, identifikátorem webu, stavem povolení a metodou přiřazení. Po vrácení nového ISensitivityLabel přidejte požadované hodnoty označení pomocí ISensitivityLabel::get_ContentMarkTypes.

Následující příklad přidá ručně vybraný štítek spojený s označením zápatí a vodoznaku a poté výsledek uloží jako PPTX:

#include <DOM/Presentation.h>
#include <DOM/ISensitivityLabel.h>
#include <DOM/ISensitivityLabelCollection.h>
#include <DOM/SensitivityLabelAssignmentType.h>
#include <DOM/SensitivityLabelContentType.h>
#include <Export/SaveFormat.h>
#include <system/collections/ilist.h>
#include <system/guid.h>
#include <system/shared_ptr.h>

using Aspose::Slides::Presentation;
using Aspose::Slides::SensitivityLabelAssignmentType;
using Aspose::Slides::SensitivityLabelContentType;
using Aspose::Slides::Export::SaveFormat;
using System::Guid;
using System::MakeObject;

auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto sensitivityLabels = presentation->get_SensitivityLabels();

auto labelIdentifier = u"{11111111-2222-3333-4444-555555555555}";
auto siteIdentifier = Guid::Parse(u"{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}");
bool isEnabled = true;
auto assignmentMethod = SensitivityLabelAssignmentType::Privileged;

auto sensitivityLabel = sensitivityLabels->Add(
    labelIdentifier,
    siteIdentifier,
    isEnabled,
    assignmentMethod);

sensitivityLabel->get_ContentMarkTypes()->Add(SensitivityLabelContentType::Footer);
sensitivityLabel->get_ContentMarkTypes()->Add(SensitivityLabelContentType::Watermark);

presentation->Save(u"presentation_with_label.pptx", SaveFormat::Pptx);
presentation->Dispose();

Aktualizace štítku citlivosti

Hodnoty ISensitivityLabel jsou čitelné i zapisovatelné prostřednictvím jejich getter a setter metod, s výjimkou kolekce vrácené metodou ISensitivityLabel::get_ContentMarkTypes, která se mění pomocí operací seznamu. Po nalezení požadovaného štítku můžete aktualizovat jeho identifikátor, identifikátor webu, stav povolení, metodu přiřazení, stav odstranění a typy označení obsahu. Uložte prezentaci, aby se změny projevily.

Následující příklad aktualizuje stav povolení a metodu přiřazení prvního štítku:

#include <DOM/Presentation.h>
#include <DOM/ISensitivityLabel.h>
#include <DOM/ISensitivityLabelCollection.h>
#include <DOM/SensitivityLabelAssignmentType.h>
#include <Export/SaveFormat.h>
#include <system/shared_ptr.h>

using Aspose::Slides::Presentation;
using Aspose::Slides::SensitivityLabelAssignmentType;
using Aspose::Slides::Export::SaveFormat;
using System::MakeObject;

auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto sensitivityLabels = presentation->get_SensitivityLabels();
int labelCount = sensitivityLabels->get_Count();

if (labelCount > 0)
{
    auto sensitivityLabel = sensitivityLabels->idx_get(0);
    sensitivityLabel->set_IsEnabled(true);
    sensitivityLabel->set_AssignmentMethodType(SensitivityLabelAssignmentType::Privileged);
}

presentation->Save(u"presentation_with_updated_label.pptx", SaveFormat::Pptx);
presentation->Dispose();

Označení štítku citlivosti jako odstraněného

Chcete‑li zachovat informaci, že byl štítek odstraněn, najděte štítek a zavolejte ISensitivityLabel::set_IsRemoved s hodnotou true. Tím se zachová záznam štítku a zaznamená se jeho stav odstranění. Pokud místo toho potřebujete ze moderní kolekce záznam smazat, použijte ISensitivityLabelCollection::RemoveAt; pro smazání všech položek použijte ISensitivityLabelCollection::Clear.

Následující příklad označí konkrétní štítek jako odstraněný a uloží aktualizovanou prezentaci:

#include <DOM/Presentation.h>
#include <DOM/ISensitivityLabel.h>
#include <DOM/ISensitivityLabelCollection.h>
#include <Export/SaveFormat.h>
#include <system/shared_ptr.h>
#include <system/string.h>
#include <system/string_comparison.h>

using Aspose::Slides::Presentation;
using Aspose::Slides::Export::SaveFormat;
using System::MakeObject;
using System::String;
using System::StringComparison;

auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto sensitivityLabels = presentation->get_SensitivityLabels();
auto targetLabelIdentifier = u"{11111111-2222-3333-4444-555555555555}";

for (auto&& sensitivityLabel : sensitivityLabels)
{
    auto labelIdentifier = sensitivityLabel->get_Id();
    bool isTargetLabel = String::Equals(
        labelIdentifier,
        targetLabelIdentifier,
        StringComparison::OrdinalIgnoreCase);

    if (isTargetLabel)
    {
        sensitivityLabel->set_IsRemoved(true);
        break;
    }
}

presentation->Save(u"presentation_with_removed_label.pptx", SaveFormat::Pptx);
presentation->Dispose();

Čtení a migrace starých štítků citlivosti MIP

Starší pracovní postupy založené na MIP mohou ukládat metadata štítků citlivosti do vlastních vlastností dokumentu místo moderní kolekce štítků. Načtěte tato metadata pomocí IDocumentProperties::GetSensitivityLabels. Metoda parsuje legacy vlastní vlastnosti a vrací pole objektů ISensitivityLabel.

Pro migraci metadata přidejte každý vrácený štítek do moderní ISensitivityLabelCollection pomocí ISensitivityLabelCollection::Add. Protože přidání duplicitního identifikátoru štítku vyvolá výjimku, příklad před kopírováním každého štítku kontroluje cílovou kolekci. Můžete přidat další ověření, aby bylo jisté, že každý starý štítek stále existuje v aktuální politice Purview.

#include <DOM/Presentation.h>
#include <DOM/IDocumentProperties.h>
#include <DOM/ISensitivityLabel.h>
#include <DOM/ISensitivityLabelCollection.h>
#include <Export/SaveFormat.h>
#include <system/array.h>
#include <system/shared_ptr.h>
#include <system/string.h>
#include <system/string_comparison.h>

using Aspose::Slides::Presentation;
using Aspose::Slides::Export::SaveFormat;
using System::MakeObject;
using System::String;
using System::StringComparison;

auto presentation = MakeObject<Presentation>(u"presentation_with_legacy_labels.pptx");
auto documentProperties = presentation->get_DocumentProperties();
auto legacySensitivityLabels = documentProperties->GetSensitivityLabels();
auto modernSensitivityLabels = presentation->get_SensitivityLabels();

for (auto&& legacySensitivityLabel : legacySensitivityLabels)
{
    bool labelAlreadyExists = false;
    auto legacyLabelIdentifier = legacySensitivityLabel->get_Id();

    for (auto&& modernSensitivityLabel : modernSensitivityLabels)
    {
        auto modernLabelIdentifier = modernSensitivityLabel->get_Id();
        labelAlreadyExists = String::Equals(
            modernLabelIdentifier,
            legacyLabelIdentifier,
            StringComparison::OrdinalIgnoreCase);

        if (labelAlreadyExists)
        {
            break;
        }
    }

    if (!labelAlreadyExists)
    {
        modernSensitivityLabels->Add(legacySensitivityLabel);
    }
}

presentation->Save(u"presentation_with_modern_labels.pptx", SaveFormat::Pptx);
presentation->Dispose();

Migrace zkopíruje parsované objekty štítků do moderní kolekce. Není nutné vymazat všechny vlastní vlastnosti dokumentu, takže nesouvisející metadata dokumentu zůstávají nedotčena. Použijte IPresentation::Save s SaveFormat::Pptx k zápisu moderních metadat štítků do souboru PPTX.

Často kladené otázky

Vytvoří přidání typu označení obsahu viditelný záhlaví, zápatí nebo vodoznak na snímcích?

Ne. Hodnoty přidané přes ISensitivityLabel::get_ContentMarkTypes popisují označení spojená se štítkem citlivosti. Nezobrazují žádný viditelný text ani tvary v prezentaci. Pokud váš pracovní postup musí tato označení vizuálně vykreslit, přidejte odpovídající obsah snímku samostatně.

Jaký je rozdíl mezi označením štítku jako odstraněného a jeho smazáním ze sbírky?

Volání ISensitivityLabel::set_IsRemoved s hodnotou true ponechá záznam štítku a zaznamená jeho stav odstranění. Volání ISensitivityLabelCollection::RemoveAt štítek ze sbírky úplně odstraní. Zvolte operaci, která odpovídá požadavkům vaší organizace na uchování metadat.

Může prezentace obsahovat jak stará MIP metadata, tak moderní štítky citlivosti?

Ano. Staré štítky mohou zůstat ve vlastních vlastnostech dokumentu, zatímco moderní štítky jsou dostupné přes IPresentation::get_SensitivityLabels. Použijte IDocumentProperties::GetSensitivityLabels k načtení starých metadat a migrujte jen platné štítky, které ještě nejsou v moderní kolekci.

Co se stane, když je štítek se stejným identifikátorem přidán vícekrát?

ISensitivityLabelCollection::Add vyhodí výjimku argumentu, pokud kolekce již obsahuje štítek se stejným identifikátorem. Před přidáním nebo migrací štítků zkontrolujte existující hodnoty ISensitivityLabel::get_Id.

Jaký výstupní formát použít pro zachování aktualizovaných štítků citlivosti?

Uložte prezentaci jako PPTX voláním IPresentation::Save s SaveFormat::Pptx, jak je ukázáno v příkladech výše.