在 Java 中管理 PowerPoint 演示文稿的敏感度标签
概述
Microsoft Purview 敏感度标签帮助组织对文档进行分类和治理。在自动化幻灯片处理期间,应用程序可能需要保留现有标签、应用策略选择的标签、更新其状态,或迁移由较旧的 Microsoft Information Protection (MIP) 工作流写入的标签元数据。
Aspose.Slides 通过 IPresentation.getSensitivityLabels 提供现代敏感度标签元数据。此方法返回一个 ISensitivityLabelCollection,可在将演示文稿保存为 PPTX 之前对其进行检查和修改。
Note
敏感度标签标识符和策略信息由您的 Microsoft Purview 配置定义。在添加或迁移元数据之前,请在您的环境中验证标签的可用性和策略要求。ISensitivityLabel.getContentMarkTypes 的值描述与标签关联的内容标记;它们本身不会在幻灯片上添加可见的文本或形状。了解敏感度标签属性
每个 ISensitivityLabel 包含以下元数据:
| 方法 | 用途 |
|---|---|
| ISensitivityLabel.getId 和 ISensitivityLabel.setId | 获取或设置 Purview 策略中的敏感度标签标识符。 |
| ISensitivityLabel.getSiteId 和 ISensitivityLabel.setSiteId | 获取或设置与标签策略关联的站点。 |
| ISensitivityLabel.isEnabled 和 ISensitivityLabel.setEnabled | 获取或设置标签是否已启用。 |
| ISensitivityLabel.isRemoved 和 ISensitivityLabel.setRemoved | 获取或设置标签是否已被移除。当必须在元数据中保留移除状态时,将该值设为 true。 |
| ISensitivityLabel.getAssignmentMethodType 和 ISensitivityLabel.setAssignmentMethodType | 获取或设置标签是自动应用还是通过用户决策应用的。 |
| ISensitivityLabel.getContentMarkTypes | 获取与标签关联的内容标记类型。 |
SensitivityLabelAssignmentType 类定义标签的分配方式:
- SensitivityLabelAssignmentType.Standard 表示默认或自动应用的标签。
- SensitivityLabelAssignmentType.Privileged 表示通过用户决策应用的标签,包括手动应用、推荐和强制标签。
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 文件。
常见问题
添加内容标记类型会在幻灯片上创建可见的页眉、页脚或水印吗?
不会。通过 ISensitivityLabel.getContentMarkTypes 返回的列表中添加的值描述了与敏感度标签关联的标记。它们不会在演示文稿中创建可见的文本或形状。如果工作流必须呈现这些标记,需要单独添加相应的幻灯片内容。
将标签标记为已移除与从集合中删除它有什么区别?
使用 true 调用 ISensitivityLabel.setRemoved 会保留标签条目并记录其已移除状态。调用 ISensitivityLabelCollection.removeAt 则会从现代集合中删除该条目。根据组织对元数据保留的要求选择相应操作。
演示文稿可以同时包含旧版 MIP 元数据和现代敏感度标签吗?
可以。旧版标签可以保留在自定义文档属性中,而现代标签通过 IPresentation.getSensitivityLabels 可用。使用 IDocumentProperties.getSensitivityLabels 读取旧版元数据,并仅迁移那些尚未出现在现代集合中的有效标签。
同一标识符的标签多次添加会发生什么?
当集合中已存在具有相同标识符的标签时,调用 ISensitivityLabelCollection.add 会抛出异常。在添加或迁移标签之前,请检查由 ISensitivityLabel.getId 返回的现有值。
应使用哪种输出格式以保留已更新的敏感度标签?
如上例所示,使用 IPresentation.save 并指定 SaveFormat.Pptx 将演示文稿保存为 PPTX,以保留更新后的敏感度标签。