จัดการป้ายความลับในงานนำเสนอ PowerPoint ด้วย PHP

ภาพรวม

Microsoft Purview sensitivity labels ช่วยองค์กรจัดประเภทและกำกับเอกสาร ระหว่างการประมวลผลการนำเสนอแบบอัตโนมัติ แอปพลิเคชันอาจต้องคงรักษา label ที่มีอยู่แล้ว ใช้ label ที่นโยบายกำหนด ปรับสถานะของ label หรือแม้กระทั่งย้ายข้อมูลเมตา label ที่เขียนโดย workflow ของ Microsoft Information Protection (MIP) รุ่นเก่า

Aspose.Slides for PHP via Java เปิดเผยเมตา label ความลับสมัยใหม่ผ่าน Presentation::getSensitivityLabels วิธีการนี้จะคืนค่า SensitivityLabelCollection ที่สามารถตรวจสอบและแก้ไขได้ก่อนบันทึกการนำเสนอเป็น PPTX

ทำความเข้าใจคุณสมบัติของ Sensitivity Label

แต่ละ SensitivityLabel มีเมตาดาต้าดังต่อไปนี้:

วิธีการ วัตถุประสงค์
SensitivityLabel::getId และ SensitivityLabel::setId รับหรือกำหนดตัวระบุของ sensitivity label ในนโยบาย Purview
SensitivityLabel::getSiteId และ SensitivityLabel::setSiteId รับหรือกำหนดไซต์ที่เชื่อมโยงกับนโยบายของ label
SensitivityLabel::isEnabled และ SensitivityLabel::setEnabled รับหรือกำหนดว่า label ถูกเปิดใช้งานหรือไม่
SensitivityLabel::isRemoved และ SensitivityLabel::setRemoved รับหรือกำหนดว่า label ถูกลบหรือไม่ ตั้งค่าเป็น true เมื่อต้องการเก็บสถานะการลบไว้ในเมตาดาต้า
SensitivityLabel::getAssignmentMethodType และ SensitivityLabel::setAssignmentMethodType รับหรือกำหนดว่า label ถูกกำหนดโดยอัตโนมัติหรือโดยการตัดสินใจของผู้ใช้
SensitivityLabel::getContentMarkTypes รับประเภทการทำเครื่องหมายเนื้อหาที่เชื่อมโยงกับ label

คลาส SensitivityLabelAssignmentType กำหนดวิธีที่ label ถูกกำหนด:

  • SensitivityLabelAssignmentType::Standard แสดงถึง label เริ่มต้นหรือที่ถูกกำหนดโดยอัตโนมัติ
  • SensitivityLabelAssignmentType::Privileged แสดงถึง label ที่กำหนดโดยการตัดสินใจของผู้ใช้ รวมถึงการกำหนดแบบมือ, แนะนำ, และบังคับใช้

คลาส SensitivityLabelContentType กำหนดการทำเครื่องหมายที่เชื่อมโยงกับ label:

ค่า ความหมาย
SensitivityLabelContentType::None label ถูกกำหนดโดยค่าเริ่มต้นหรืออัตโนมัติ
SensitivityLabelContentType::Header มีการทำเครื่องหมายเนื้อหา Header ที่เชื่อมโยงกับ label
SensitivityLabelContentType::Footer มีการทำเครื่องหมายเนื้อหา Footer ที่เชื่อมโยงกับ label
SensitivityLabelContentType::Watermark มีการทำเครื่องหมายเนื้อหา Watermark ที่เชื่อมโยงกับ label
SensitivityLabelContentType::Encryption มีการปกป้องด้วย Encryption ที่เชื่อมโยงกับ label

ประเภทการทำเครื่องหมายหลายประเภทสามารถสัมพันธ์กับ label หนึ่งรายการได้

แสดงรายการ Sensitivity Labels ที่มีอยู่

อ่านคอลเลกชัน label สมัยใหม่จาก Presentation::getSensitivityLabels และทำการวนลูป ตัวอย่างต่อไปนี้จะแสดงทุกคุณสมบัติและการทำเครื่องหมายเนื้อหาที่เก็บไว้สำหรับแต่ละ label:

$presentation = new Presentation("presentation.pptx");
try {
    $sensitivityLabels = $presentation->getSensitivityLabels();
    $sensitivityLabelCount = java_values($sensitivityLabels->getCount());

    for ($labelIndex = 0; $labelIndex < $sensitivityLabelCount; $labelIndex++) {
        $sensitivityLabel = $sensitivityLabels->get_Item($labelIndex);

        echo "Label ID: " . java_values($sensitivityLabel->getId()) . PHP_EOL;
        echo "Site ID: " . java_values($sensitivityLabel->getSiteId()->toString()) . PHP_EOL;
        echo "Enabled: " . (java_values($sensitivityLabel->isEnabled()) ? "true" : "false") . PHP_EOL;
        echo "Removed: " . (java_values($sensitivityLabel->isRemoved()) ? "true" : "false") . PHP_EOL;
        echo "Assignment method: " . java_values($sensitivityLabel->getAssignmentMethodType()) . PHP_EOL;

        $contentMarkIterator = $sensitivityLabel->getContentMarkTypes()->iterator();
        while (java_values($contentMarkIterator->hasNext())) {
            $contentMarkType = java_values($contentMarkIterator->next());
            echo "Content marking: " . $contentMarkType . PHP_EOL;
        }
    }
} finally {
    $presentation->dispose();
}

เพิ่ม Sensitivity Label พร้อมการทำเครื่องหมายเนื้อหา

ใช้ SensitivityLabelCollection::add พร้อมตัวระบุ label, ตัวระบุไซต์, สถานะเปิดใช้งาน, และวิธีการกำหนด หลังจากเมธอดคืนค่า SensitivityLabel ใหม่ ให้เพิ่มค่าการทำเครื่องหมายที่จำเป็นผ่านรายการที่คืนจาก SensitivityLabel::getContentMarkTypes

ตัวอย่างต่อไปนี้เพิ่ม label ที่ผู้ใช้เลือกด้วยตนเองซึ่งสัมพันธ์กับการทำเครื่องหมาย Footer และ Watermark แล้วบันทึกผลลัพธ์เป็น PPTX:

$presentation = new Presentation("presentation.pptx");
try {
    $sensitivityLabels = $presentation->getSensitivityLabels();

    $labelIdentifier = "{11111111-2222-3333-4444-555555555555}";
    $UUID = new JavaClass("java.util.UUID");
    $siteIdentifier = $UUID->fromString("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
    $isEnabled = true;
    $assignmentMethod = SensitivityLabelAssignmentType::Privileged;

    $sensitivityLabel = $sensitivityLabels->add(
        $labelIdentifier,
        $siteIdentifier,
        $isEnabled,
        $assignmentMethod
    );

    $contentMarkTypes = $sensitivityLabel->getContentMarkTypes();
    $contentMarkTypes->addItem(SensitivityLabelContentType::Footer);
    $contentMarkTypes->addItem(SensitivityLabelContentType::Watermark);

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

อัปเดต Sensitivity Label

ค่าของ SensitivityLabel สามารถอ่าน/เขียนได้ ยกเว้นรายการที่คืนจาก SensitivityLabel::getContentMarkTypes ซึ่งต้องแก้ไขผ่านการดำเนินการของรายการ หลังจากค้นหา label ที่ต้องการ คุณสามารถอัปเดตตัวระบุ, ตัวระบุไซต์, สถานะเปิดใช้งาน, วิธีการกำหนด, สถานะการลบ, และประเภทการทำเครื่องหมายเนื้อหา แล้วบันทึกการนำเสนอเพื่อบันทึกการเปลี่ยนแปลง

ตัวอย่างต่อไปนี้อัปเดตสถานะเปิดใช้งานและวิธีการกำหนดของ label แรก:

$presentation = new Presentation("presentation.pptx");
try {
    $sensitivityLabels = $presentation->getSensitivityLabels();
    $sensitivityLabelCount = java_values($sensitivityLabels->getCount());

    if ($sensitivityLabelCount > 0) {
        $sensitivityLabel = $sensitivityLabels->get_Item(0);
        $sensitivityLabel->setEnabled(true);
        $sensitivityLabel->setAssignmentMethodType(SensitivityLabelAssignmentType::Privileged);
    }

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

ทำเครื่องหมาย Sensitivity Label ว่า ถูกลบ

เพื่อเก็บข้อมูลว่ามีการลบ label ให้ค้นหา label นั้นและเรียก SensitivityLabel::setRemoved ด้วยค่า true ค่า นี้จะคงรายการ label อยู่พร้อมกับบันทึกสถานะการลบ หากต้องการลบรายการออกจากคอลเลกชันสมัยใหม่ ให้ใช้ SensitivityLabelCollection::removeAt; ใช้ SensitivityLabelCollection::clear เพื่อลบทุกรายการ

ตัวอย่างต่อไปนี้ทำเครื่องหมาย label เฉพาะว่า ถูกลบและบันทึกการนำเสนอที่อัปเดตแล้ว:

$presentation = new Presentation("presentation.pptx");
try {
    $sensitivityLabels = $presentation->getSensitivityLabels();
    $targetLabelIdentifier = "{11111111-2222-3333-4444-555555555555}";
    $sensitivityLabelCount = java_values($sensitivityLabels->getCount());

    for ($labelIndex = 0; $labelIndex < $sensitivityLabelCount; $labelIndex++) {
        $sensitivityLabel = $sensitivityLabels->get_Item($labelIndex);
        $labelIdentifier = java_values($sensitivityLabel->getId());
        $isTargetLabel = strcasecmp($labelIdentifier, $targetLabelIdentifier) === 0;

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

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

อ่านและย้าย Sensitivity Labels ของ MIP รุ่นเก่า

Workflow ที่ใช้ MIP รุ่นเก่าสามารถจัดเก็บเมตาดาต้า sensitivity label ใน custom document properties แทนคอลเลกชัน label สมัยใหม่ อ่านเมตาดาต้านั้นด้วย DocumentProperties::getSensitivityLabels เมธอดจะวิเคราะห์ custom properties รุ่นเก่าและคืนค่าอาร์เรย์ Java ของอ็อบเจกต์ SensitivityLabel

เพื่อย้ายเมตาดาต้า ให้เพิ่มแต่ละ label ที่คืนมาลงใน SensitivityLabelCollection สมัยใหม่ผ่าน SensitivityLabelCollection::add เนื่องจากการเพิ่ม label ที่มีตัวระบุซ้ำจะทำให้เกิดข้อยกเว้น ตัวอย่างจึงตรวจสอบคอลเลกชันปลายทางก่อนคัดลอกแต่ละ label คุณอาจเพิ่มการตรวจสอบเพิ่มเติมเพื่อยืนยันว่า label รุ่นเก่ายังคงมีอยู่ในนโยบาย Purview ปัจจุบัน

$presentation = new Presentation("presentation_with_legacy_labels.pptx");
try {
    $legacySensitivityLabels = $presentation->getDocumentProperties()->getSensitivityLabels();
    $modernSensitivityLabels = $presentation->getSensitivityLabels();

    $Array = new JavaClass("java.lang.reflect.Array");
    $legacyLabelCount = java_values($Array->getLength($legacySensitivityLabels));

    for ($legacyLabelIndex = 0; $legacyLabelIndex < $legacyLabelCount; $legacyLabelIndex++) {
        $legacySensitivityLabel = $legacySensitivityLabels[$legacyLabelIndex];
        $legacyLabelIdentifier = java_values($legacySensitivityLabel->getId());
        $labelAlreadyExists = false;
        $modernLabelCount = java_values($modernSensitivityLabels->getCount());

        for ($modernLabelIndex = 0; $modernLabelIndex < $modernLabelCount; $modernLabelIndex++) {
            $modernSensitivityLabel = $modernSensitivityLabels->get_Item($modernLabelIndex);
            $modernLabelIdentifier = java_values($modernSensitivityLabel->getId());
            $labelAlreadyExists = strcasecmp(
                $modernLabelIdentifier,
                $legacyLabelIdentifier
            ) === 0;

            if ($labelAlreadyExists) {
                break;
            }
        }

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

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

การย้ายจะคัดลอกอ็อบเจกต์ label ที่解析แล้วเข้าไปในคอลเลกชันสมัยใหม่ ไม่จำเป็นต้องลบ custom document properties ทั้งหมด ดังนั้นเมตาดาต้าเอกสารที่ไม่เกี่ยวข้องจะคงอยู่ ใช้ Presentation::save พร้อม SaveFormat::Pptx เพื่อเขียนเมตาดาต้า label สมัยใหม่ลงไฟล์ PPTX

คำถามที่พบบ่อย

การเพิ่มประเภทการทำเครื่องหมายเนื้อหาจะสร้าง Header, Footer หรือ Watermark ที่มองเห็นได้บนสไลด์หรือไม่?

ไม่ ค่าที่เพิ่มผ่านรายการที่คืนจาก SensitivityLabel::getContentMarkTypes เพียงอธิบายการทำเครื่องหมายที่เชื่อมโยงกับ sensitivity label เท่านั้น ไม่ได้สร้างข้อความหรือรูปทรงที่มองเห็นได้ในงานนำเสนอ ให้เพิ่มเนื้อหาในสไลด์ที่สอดคล้องกันแยกต่างหากหาก workflow ของคุณต้องการแสดงการทำเครื่องหมายเหล่านั้น

ความแตกต่างระหว่างการทำเครื่องหมาย label ว่า ถูกลบและการลบจากคอลเลกชันคืออะไร?

การเรียก SensitivityLabel::setRemoved ด้วยค่า true จะคงรายการ label อยู่และบันทึกสถานะการลบ ส่วนการเรียก SensitivityLabelCollection::removeAt จะลบรายการออกจากคอลเลกชันสมัยใหม่ เลือกการดำเนินการที่สอดคล้องกับข้อกำหนดการเก็บรักษาเมตาดาต้าขององค์กรคุณ

งานนำเสนอสามารถมีเมตาดาต้า MIP รุ่นเก่าและ sensitivity label สมัยใหม่พร้อมกันได้หรือไม่?

ได้ รายการ label รุ่นเก่าสามารถคงอยู่ใน custom document properties ในขณะที่ label สมัยใหม่เข้าถึงได้ผ่าน Presentation::getSensitivityLabels ใช้ DocumentProperties::getSensitivityLabels เพื่ออ่านเมตาดาต้าแบบเก่าและย้ายเฉพาะ label ที่ยังไม่มีอยู่ในคอลเลกชันสมัยใหม่

จะเกิดอะไรขึ้นเมื่อมีการเพิ่ม label ที่มีตัวระบุเดียวกันหลายครั้ง?

SensitivityLabelCollection::add จะขว้างข้อยกเว้นเมื่อคอลเลกชันมี label ที่มีตัวระบุเดียวกันอยู่แล้ว ควรตรวจสอบค่าที่คืนจาก SensitivityLabel::getId ก่อนทำการเพิ่มหรือย้าย label

ควรใช้รูปแบบการบันทึกใดเพื่อรักษา label ที่อัปเดตไว้?

บันทึกงานนำเสนอเป็น PPTX โดยเรียก Presentation::save พร้อม SaveFormat::Pptx ตามตัวอย่างที่แสดงด้านบน