Gestionar propiedades de presentación en Android

Introducción

Aspose.Slides for Android via Java admite propiedades integradas y propiedades personalizadas de documento. 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.getDocumentProperties. Los ejemplos siguientes muestran cómo leer, modificar y gestionar estas propiedades.

Administrar 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 Android via Java 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, Contenidos y Personalizado. Utilice la pestaña Personalizado para gestionar las propiedades definidas por el usuario.

Leer propiedades públicas de una presentación cifrada

Una contraseña de apertura normalmente protege tanto el contenido de la presentación como las propiedades del documento. Cuando una presentación se cifra después de llamar a IProtectionManager.setEncryptDocumentProperties con false, sus propiedades del documento permanecen públicas. Entonces una aplicación puede llamar a LoadOptions.setOnlyLoadDocumentProperties con true y leer los metadatos públicos sin proporcionar la contraseña de apertura.

LoadOptions.setOnlyLoadDocumentProperties controla lo que Aspose.Slides carga; no descifra nada. Si las propiedades fueron incluidas en el cifrado, cargar‑las 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 mediante IPresentation.getDocumentProperties:

import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.LoadOptions;
import com.aspose.slides.Presentation;

LoadOptions loadOptions = new LoadOptions();
loadOptions.setOnlyLoadDocumentProperties(true);

Presentation presentation = new Presentation("public-properties-encrypted.pptx", loadOptions);
try {
    if (presentation.getProtectionManager().isOnlyDocumentPropertiesLoaded()) {
        IDocumentProperties documentProperties = presentation.getDocumentProperties();

        System.out.println("Author: " + documentProperties.getAuthor());
        System.out.println("Title: " + documentProperties.getTitle());
        System.out.println("Keywords: " + documentProperties.getKeywords());
    } else {
        System.out.println("The presentation was not loaded in document-properties-only mode.");
    }
} finally {
    presentation.dispose();
}

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 comprobar siempre 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 después de llamar a LoadOptions.setOnlyLoadDocumentProperties con true está destinada a leer metadatos públicos. Aspose.Slides no puede guardar las propiedades modificadas de ese objeto de solo metadatos porque las propiedades públicas deben permanecer coherentes con los datos correspondientes dentro de la presentación cifrada. Por lo tanto, actualizar dichas propiedades requiere la contraseña de apertura correcta y una carga completa.

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

import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.LoadOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.PresentationFactory;
import com.aspose.slides.SaveFormat;

final String inputPath = "public-properties-encrypted.pptx";
final String outputPath = "updated-public-properties-encrypted.pptx";

LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("open_password");

Presentation presentation = new Presentation(inputPath, loadOptions);
try {
    IDocumentProperties documentProperties = presentation.getDocumentProperties();
    documentProperties.setTitle("Updated Product Roadmap");
    documentProperties.setKeywords("roadmap, planning, indexed");
    
    presentation.save(outputPath, SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(outputPath);
System.out.println("The presentation is encrypted: " + presentationInfo.isEncrypted());

LoadOptions metadataLoadOptions = new LoadOptions();
metadataLoadOptions.setOnlyLoadDocumentProperties(true);

Presentation metadataPresentation = new Presentation(outputPath, metadataLoadOptions);
try {
    if (metadataPresentation.getProtectionManager().isOnlyDocumentPropertiesLoaded()) {
        System.out.println("Title: " + metadataPresentation.getDocumentProperties().getTitle());
        System.out.println("Keywords: " + metadataPresentation.getDocumentProperties().getKeywords());
    } else {
        System.out.println("The presentation was not loaded in document-properties-only mode.");
    }
} finally {
    metadataPresentation.dispose();
}

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 a través de métodos getter, incluidos getAuthor, getTitle y getCreatedTime. 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.

import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.Presentation;

Presentation presentation = new Presentation("AccessBuiltInProperties.pptx");
try {
    IDocumentProperties documentProperties = presentation.getDocumentProperties();

    System.out.println("Category: " + documentProperties.getCategory());
    System.out.println("Content status: " + documentProperties.getContentStatus());
    System.out.println("Creation date: " + documentProperties.getCreatedTime());
    System.out.println("Author: " + documentProperties.getAuthor());
    System.out.println("Comments: " + documentProperties.getComments());
    System.out.println("Keywords: " + documentProperties.getKeywords());
    System.out.println("Last modified by: " + documentProperties.getLastSavedBy());
    System.out.println("Manager: " + documentProperties.getManager());
    System.out.println("Modified date: " + documentProperties.getLastSavedTime());
    System.out.println("Presentation format: " + documentProperties.getPresentationFormat());
    System.out.println("Last print date: " + documentProperties.getLastPrinted());
    System.out.println("Is shared between producers: " + documentProperties.getSharedDoc());
    System.out.println("Subject: " + documentProperties.getSubject());
    System.out.println("Title: " + documentProperties.getTitle());
} finally {
    presentation.dispose();
}

Modificar propiedades integradas

Para actualizar los metadatos integrados, utilice los métodos setter del objeto devuelto por IPresentation.getDocumentProperties. Este ejemplo abre una presentación existente, llama a setAuthor, setTitle, setSubject, setComments, y setManager, y luego guarda la presentación actualizada con Presentation.save. El PPTX guardado contiene los nuevos metadatos.

import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;

Presentation presentation = new Presentation("ModifyBuiltInProperties.pptx");
try {
    IDocumentProperties documentProperties = presentation.getDocumentProperties();

    documentProperties.setAuthor("Aspose.Slides for Android via Java");
    documentProperties.setTitle("Manage PowerPoint Presentation Properties");
    documentProperties.setSubject("Modify Built-in Properties");
    documentProperties.setComments("Aspose description");
    documentProperties.setManager("Aspose manager");

    presentation.save("DocumentProperties_output.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Gestionar la base de hipervínculo

IDocumentProperties.getHyperlinkBase devuelve la base a nivel de documento para hipervínculos relativos. Utilice IDocumentProperties.setHyperlinkBase para cambiarla o borrarla. Esto es útil al mover una presentación y sus archivos vinculados a otra ubicación. Es independiente del IHyperlink.getExternalUrl de un hipervínculo individual: cambiar la base no reescribe las direcciones de los enlaces almacenados 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 borra la base con una cadena vacía y verifica el valor vacío en un archivo guardado por separado. Reemplace la dirección base de ejemplo por la ubicación de sus archivos vinculados.

import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;

Presentation presentation = new Presentation("hyperlinks.pptx");
try {
    System.out.println("Original base: " + presentation.getDocumentProperties().getHyperlinkBase());

    final String newBase = "https://example.com/new/";
    presentation.getDocumentProperties().setHyperlinkBase(newBase);
    presentation.save("hyperlinks-updated.pptx", SaveFormat.Pptx);

    Presentation updatedPresentation = new Presentation("hyperlinks-updated.pptx");
    try {
        System.out.println("Base preserved: " + newBase.equals(updatedPresentation.getDocumentProperties().getHyperlinkBase()));

        updatedPresentation.getDocumentProperties().setHyperlinkBase("");
        updatedPresentation.save("hyperlinks-cleared.pptx", SaveFormat.Pptx);

        Presentation clearedPresentation = new Presentation("hyperlinks-cleared.pptx");
        try {
            System.out.println("Base cleared: " + "".equals(clearedPresentation.getDocumentProperties().getHyperlinkBase()));
        } finally {
            clearedPresentation.dispose();
        }
    } finally {
        updatedPresentation.dispose();
    }
} finally {
    presentation.dispose();
}

Los dos mensajes de verificación deberían imprimir true. Borrar 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.

Añadir propiedades personalizadas a la presentación

Las propiedades personalizadas almacenan metadatos que no tienen un campo integrado correspondiente. El método IDocumentProperties.set_Item 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.

import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;

Presentation presentation = new Presentation();
try {
    IDocumentProperties documentProperties = presentation.getDocumentProperties();

    documentProperties.set_Item("Reviewed by", "John Smith");
    documentProperties.set_Item("Confidentiality level", "Internal");
    documentProperties.set_Item("Document version", 2);

    presentation.save("CustomDocumentProperties_output.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Acceder y modificar propiedades personalizadas

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

import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;

Presentation presentation = new Presentation("AccessAndModifyProperties.pptx");
try {
    IDocumentProperties documentProperties = presentation.getDocumentProperties();

    for (int i = 0; i < documentProperties.getCountOfCustomProperties(); i++) {
        String propertyName = documentProperties.getCustomPropertyName(i);
        Object propertyValue = documentProperties.get_Item(propertyName);

        System.out.println("Custom property name: " + propertyName);
        System.out.println("Custom property value: " + propertyValue);

        documentProperties.set_Item(propertyName, "New Value " + (i + 1));
    }

    presentation.save("CustomProperties_output.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Ejemplo en directo

Pruebe la aplicación en línea Ver y editar metadatos de PowerPoint para ver cómo trabajar con las propiedades del documento mediante la API 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 integral de la presentación y no pueden eliminarse por completo. No obstante, puede cambiar sus valores o establecerlas como vacías si la propiedad 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 por el nuevo. No es necesario eliminarla ni 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 del documento almacenados sin crear una instancia de Presentation. Consulte Construir un inventario ligero de presentaciones para obtener un ejemplo completo de informe y las limitaciones específicas de cada formato.

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

Sí. La presentación debe haberse cifrado después de llamar a IProtectionManager.setEncryptDocumentProperties con false, y debe cargarse después de llamar a LoadOptions.setOnlyLoadDocumentProperties con true.

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

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