Gestionar propiedades de la presentación en .NET

Introducción

Aspose.Slides for .NET admite propiedades integradas y propiedades personalizadas de documentos. Utilice estas propiedades para leer y actualizar los metadatos de la presentación, como el autor, el título y los valores definidos por el usuario.

Aspose.Slides le permite trabajar con las propiedades de documento de la presentación a través de la interfaz IDocumentProperties . Una instancia de esta interfaz se devuelve mediante IPresentation.DocumentProperties . Los ejemplos siguientes muestran cómo leer, modificar y gestionar estas propiedades.

Gestionar propiedades de la presentación

Las propiedades del documento almacenan información descriptiva junto al contenido de la presentación. Se dividen en dos categorías:

  • Propiedades integradas contienen metadatos estándar, como el título, el autor y las estadísticas del documento.
  • Propiedades personalizadas almacenan pares nombre/valor definidos por el usuario.

Aspose.Slides for .NET proporciona acceso a ambas categorías. En PowerPoint, seleccione Archivo → Información → Propiedades → Propiedades avanzadas para inspeccionar los metadatos del documento. El cuadro de diálogo agrupa la información en pestañas como Resumen, Estadísticas, Contenido y Personalizado. Utilice la pestaña Personalizado para gestionar las propiedades definidas por el usuario.

Leer propiedades públicas de una presentación cifrada

Normalmente una contraseña de apertura protege tanto el contenido de la presentación como las propiedades del documento. Cuando una presentación se cifra con IProtectionManager.EncryptDocumentProperties establecido en false, sus propiedades del documento permanecen públicas. Entonces una aplicación puede establecer LoadOptions.OnlyLoadDocumentProperties en true y leer los metadatos públicos sin proporcionar la contraseña de apertura.

LoadOptions.OnlyLoadDocumentProperties controla lo que Aspose.Slides carga; no descifra nada. Si las propiedades estaban incluidas en el cifrado, cargarlas sin la contraseña falla. Si la presentación no está cifrada, la opción se ignora y se carga la presentación completa.

El ejemplo requiere una presentación cifrada cuyas propiedades del documento se dejaron públicas. Verifica el modo de carga mediante IProtectionManager.IsOnlyDocumentPropertiesLoaded y luego lee las propiedades integradas a través de IPresentation.DocumentProperties :

using System;
using Aspose.Slides;

var loadOptions = new LoadOptions { OnlyLoadDocumentProperties = true };
using var presentation = new Presentation("public-properties-encrypted.pptx", loadOptions);

if (presentation.ProtectionManager.IsOnlyDocumentPropertiesLoaded)
{
    var documentProperties = presentation.DocumentProperties;

    Console.WriteLine("Author: " + documentProperties.Author);
    Console.WriteLine("Title: " + documentProperties.Title);
    Console.WriteLine("Keywords: " + documentProperties.Keywords);
}
else
{
    Console.WriteLine("The presentation was not loaded in document-properties-only mode.");
}

En este modo, el contenido de las diapositivas no se carga. Las diapositivas, maestros, diseños, formas, medios y otros objetos de la presentación no están disponibles. Las aplicaciones deben siempre verificar IProtectionManager.IsOnlyDocumentPropertiesLoaded antes de realizar una operación que requiera el modelo de objetos completo de la presentación.

Actualizar propiedades de una presentación cifrada

Para un archivo PPTX cifrado, una presentación cargada con LoadOptions.OnlyLoadDocumentProperties está destinada a leer metadatos públicos. Aspose.Slides no puede guardar las propiedades modificadas de ese objeto que contiene sólo metadatos porque las propiedades públicas deben seguir siendo coherentes con los datos correspondientes dentro de la presentación cifrada. Por lo tanto, actualizar esas propiedades requiere la contraseña de apertura correcta y una carga completa.

El ejemplo requiere una presentación PPTX cifrada con propiedades de documento públicas y una contraseña de apertura conocida. Abre la presentación completa con LoadOptions.Password , actualiza las propiedades integradas públicas y guarda el resultado. Luego utiliza IPresentationInfo.IsEncrypted para verificar que el cifrado se conserva y vuelve a abrir los metadatos públicos sin contraseña para comprobar los nuevos valores:

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

const string inputPath = "public-properties-encrypted.pptx";
const string outputPath = "updated-public-properties-encrypted.pptx";

var loadOptions = new LoadOptions { Password = "open_password" };
using var presentation = new Presentation(inputPath, loadOptions);

var documentProperties = presentation.DocumentProperties;
documentProperties.Title = "Updated Product Roadmap";
documentProperties.Keywords = "roadmap, planning, indexed";

presentation.Save(outputPath, SaveFormat.Pptx);

var presentationInfo = PresentationFactory.Instance.GetPresentationInfo(outputPath);
Console.WriteLine("The presentation is encrypted: " + presentationInfo.IsEncrypted);

var metadataLoadOptions = new LoadOptions { OnlyLoadDocumentProperties = true };
using var metadataPresentation = new Presentation(outputPath, metadataLoadOptions);

if (metadataPresentation.ProtectionManager.IsOnlyDocumentPropertiesLoaded)
{
    Console.WriteLine("Title: " + metadataPresentation.DocumentProperties.Title);
    Console.WriteLine("Keywords: " + metadataPresentation.DocumentProperties.Keywords);
}
else
{
    Console.WriteLine("The presentation was not loaded in document-properties-only mode.");
}

Si una aplicación no tiene permiso para descifrar o cargar el contenido de la presentación, debe tratar las propiedades públicas de un archivo PPTX cifrado como de solo lectura.

Acceder a propiedades integradas

La interfaz IDocumentProperties expone metadatos integrados mediante propiedades tipadas, incluidas Author , Title y CreatedTime . Este ejemplo abre una presentación existente e imprime sus metadatos almacenados en la consola. Los valores dependen de la presentación de entrada; algunos campos pueden estar vacíos.

using System;
using Aspose.Slides;

using var presentation = new Presentation("AccessBuiltInProperties.pptx");

var documentProperties = presentation.DocumentProperties;

Console.WriteLine("Category: " + documentProperties.Category);
Console.WriteLine("Content status: " + documentProperties.ContentStatus);
Console.WriteLine("Creation date: " + documentProperties.CreatedTime);
Console.WriteLine("Author: " + documentProperties.Author);
Console.WriteLine("Comments: " + documentProperties.Comments);
Console.WriteLine("Keywords: " + documentProperties.Keywords);
Console.WriteLine("Last modified by: " + documentProperties.LastSavedBy);
Console.WriteLine("Manager: " + documentProperties.Manager);
Console.WriteLine("Modified date: " + documentProperties.LastSavedTime);
Console.WriteLine("Presentation format: " + documentProperties.PresentationFormat);
Console.WriteLine("Last print date: " + documentProperties.LastPrinted);
Console.WriteLine("Is shared between producers: " + documentProperties.SharedDoc);
Console.WriteLine("Subject: " + documentProperties.Subject);
Console.WriteLine("Title: " + documentProperties.Title);

Modificar propiedades integradas

Para actualizar los metadatos integrados, asigne valores a las propiedades editables expuestas por IPresentation.DocumentProperties . Este ejemplo abre una presentación existente, establece Author , Title , Subject , Comments y Manager , y luego guarda la presentación actualizada con Presentation.Save . El PPTX guardado contiene los nuevos metadatos.

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("ModifyBuiltInProperties.pptx");

var documentProperties = presentation.DocumentProperties;

documentProperties.Author = "Aspose.Slides for .NET";
documentProperties.Title = "Manage PowerPoint Presentation Properties";
documentProperties.Subject = "Modify Built-in Properties";
documentProperties.Comments = "Aspose description";
documentProperties.Manager = "Aspose manager";

presentation.Save("DocumentProperties_output.pptx", SaveFormat.Pptx);

Gestionar la base de hipervínculos

IDocumentProperties.HyperlinkBase almacena la base a nivel de documento para hipervínculos relativos. Esto es útil al mover una presentación y sus archivos vinculados a otra ubicación. Es independiente del IHyperlink.ExternalUrl de un hipervínculo individual: cambiar la base no reescribe las direcciones de enlace almacenadas ni modifica los destinos absolutos.

El ejemplo requiere una presentación que contenga tanto un enlace relativo, como target.html , como un enlace absoluto, como https://example.org/absolute.html . Lee la base existente, asigna una nueva dirección base y guarda y vuelve a abrir la presentación para comprobar el valor. Luego elimina la base con string.Empty y verifica el valor vacío en un archivo guardado por separado. Sustituya la dirección base del ejemplo por la ubicación de sus archivos vinculados.

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("hyperlinks.pptx");
Console.WriteLine("Original base: " + presentation.DocumentProperties.HyperlinkBase);

const string newBase = "https://example.com/new/";
presentation.DocumentProperties.HyperlinkBase = newBase;
presentation.Save("hyperlinks-updated.pptx", SaveFormat.Pptx);

using var updatedPresentation = new Presentation("hyperlinks-updated.pptx");
Console.WriteLine("Base preserved: " + (updatedPresentation.DocumentProperties.HyperlinkBase == newBase));

updatedPresentation.DocumentProperties.HyperlinkBase = string.Empty;
updatedPresentation.Save("hyperlinks-cleared.pptx", SaveFormat.Pptx);

using var clearedPresentation = new Presentation("hyperlinks-cleared.pptx");
Console.WriteLine("Base cleared: " + (clearedPresentation.DocumentProperties.HyperlinkBase == string.Empty));

Los dos mensajes de verificación deberían imprimir True. Eliminar la base deja intactas las direcciones de los hipervínculos individuales.

Un enlace relativo a target.pptx abrió old/target.pptx cuando la base apuntaba a la carpeta old. Después de cambiar la base a la carpeta new, guardar y volver a abrir la presentación, el mismo enlace abrió new/target.pptx . Un enlace absoluto continuó abriendo el mismo archivo. Pruebe sus enlaces relativos en PowerPoint antes y después de mover la presentación o cambiar su base.

Agregar propiedades personalizadas a la presentación

Las propiedades personalizadas almacenan metadatos que no tienen un campo integrado correspondiente. El IDocumentProperties indexer le permite asignar un valor mediante el nombre de la propiedad. Este ejemplo crea una presentación, añade dos valores de texto y un valor entero de versión, y guarda la presentación con Presentation.Save . Asignar un valor a un nombre existente reemplaza el valor de esa propiedad.

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();

var documentProperties = presentation.DocumentProperties;

documentProperties["Reviewed by"] = "John Smith";
documentProperties["Confidentiality level"] = "Internal";
documentProperties["Document version"] = 2;

presentation.Save("CustomDocumentProperties_output.pptx", SaveFormat.Pptx);

Acceder y modificar propiedades personalizadas

Este ejemplo abre una presentación que contiene propiedades personalizadas y utiliza CountOfCustomProperties para iterar sobre ellas. GetCustomPropertyName acepta un índice basado en cero y devuelve el nombre usado por el IDocumentProperties indexer . El ejemplo imprime cada nombre y valor original, reemplaza cada valor por una cadena numerada independientemente de su tipo original y guarda los cambios. Si no hay propiedades personalizadas, el bucle no realiza cambios.

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("AccessAndModifyProperties.pptx");

var documentProperties = presentation.DocumentProperties;

for (var i = 0; i < documentProperties.CountOfCustomProperties; i++)
{
    var propertyName = documentProperties.GetCustomPropertyName(i);
    var propertyValue = documentProperties[propertyName];

    Console.WriteLine("Custom property name: " + propertyName);
    Console.WriteLine("Custom property value: " + propertyValue);

    documentProperties[propertyName] = "New Value " + (i + 1);
}

presentation.Save("CustomProperties_output.pptx", SaveFormat.Pptx);

Ejemplo en vivo

Pruebe la aplicación en línea Ver y editar metadatos de PowerPoint para ver cómo trabajar con las propiedades del documento utilizando la API de Aspose.Slides:

Ver y editar metadatos de PowerPoint

Preguntas frecuentes

¿Cómo puedo eliminar una propiedad integrada de una presentación?

Las propiedades integradas forman parte esencial de la presentación y no pueden eliminarse por completo. Sin embargo, puede cambiar sus valores o establecerlas en vacío si la propiedad específica lo permite.

¿Qué ocurre si añado una propiedad personalizada que ya existe?

Si añade una propiedad personalizada que ya existe, su valor actual será sobrescrito con el nuevo. No es necesario eliminarla o comprobarla previamente, ya que Aspose.Slides actualiza automáticamente el valor de la propiedad.

¿Puedo acceder a las propiedades de la presentación sin cargarla completamente?

Sí. Utilice PresentationFactory.GetPresentationInfo y luego IPresentationInfo.ReadDocumentProperties para leer los metadatos almacenados del documento sin crear una instancia de Presentation . Consulte Build a Lightweight Presentation Inventory para un ejemplo completo de informes y limitaciones específicas por formato.

¿Puedo leer las propiedades públicas de una presentación cifrada sin su contraseña de apertura?

Sí. La presentación debe haber sido cifrada con IProtectionManager.EncryptDocumentProperties establecido en false, y debe cargarse con LoadOptions.OnlyLoadDocumentProperties establecido en true.

¿Puedo actualizar un archivo PPTX cifrado en modo solo propiedades del documento?

No. Los datos de propiedades públicas y cifradas deben permanecer coherentes, por lo que actualizar un archivo PPTX cifrado requiere cargar la presentación completa con la contraseña de apertura correcta.