Recuperar y actualizar la información de la presentación en JavaScript

Visión general

Aspose.Slides puede identificar el formato de una presentación y leer sus metadatos de documento sin crear un modelo de objetos de presentación completo. Esto es útil cuando necesita clasificar archivos, crear un inventario o inspeccionar propiedades antes de decidir si cargar y procesar el contenido de la presentación.

Este artículo demuestra la inspección ligera a través de PresentationFactory y PresentationInfo, así como actualizaciones dirigidas mediante DocumentProperties.

Comprobar el formato de una presentación

Utilice PresentationFactory.getPresentationInfo para inspeccionar un archivo sin crear una instancia de Presentation. El método PresentationInfo.getLoadFormat informa del formato detectado, como PPTX, PPT u ODP.

const aspose = require("aspose.slides.via.java");

const fileNames = ["pres.pptx", "pres.ppt", "pres.odp"];

for (const fileName of fileNames) {
    const presentationInfo = aspose.PresentationFactory.getInstance().getPresentationInfo(fileName);
    const loadFormat = presentationInfo.getLoadFormat();
    let formatName = `Other (${loadFormat})`;

    if (loadFormat === aspose.LoadFormat.Pptx) {
        formatName = "PPTX";
    } else if (loadFormat === aspose.LoadFormat.Ppt) {
        formatName = "PPT";
    } else if (loadFormat === aspose.LoadFormat.Odp) {
        formatName = "ODP";
    }

    console.log(`${fileName}: ${formatName}`);
}

Crear un inventario de presentaciones ligero

Cuando procesa muchos archivos de presentación, puede necesitar un inventario compacto para validación, indexación o un sistema de gestión documental. En este escenario, use PresentationFactory.getPresentationInfo para obtener un objeto PresentationInfo, y luego llame a PresentationInfo.readDocumentProperties para leer los metadatos del documento. Este enfoque no crea una instancia de Presentation ni requiere que recorra el modelo de objetos completo de la presentación.

Las propiedades extendidas expuestas por DocumentProperties proporcionan los siguientes valores de inventario:

Método Valor de inventario
getSlides Número total de diapositivas.
getHiddenSlides Número de diapositivas ocultas.
getNotes Número de diapositivas que contienen notas.
getParagraphs Número total de párrafos, cuando esté disponible.
getWords Número total de palabras.
getMultimediaClips Número total de clips de audio y vídeo.

El siguiente ejemplo lee estos valores sin crear un objeto Presentation e imprime un inventario compacto. También combina DocumentProperties.getHeadingPairs con DocumentProperties.getTitlesOfParts para mostrar grupos de contenido como fuentes, temas y títulos de diapositivas.

const path = require("path");
const aspose = require("aspose.slides.via.java");

const filePath = "sample.pptx";
const presentationInfo = aspose.PresentationFactory.getInstance().getPresentationInfo(filePath);
const documentProperties = presentationInfo.readDocumentProperties();

const loadFormat = presentationInfo.getLoadFormat();
let formatName = `Other (${loadFormat})`;

if (loadFormat === aspose.LoadFormat.Pptx) {
    formatName = "PPTX";
} else if (loadFormat === aspose.LoadFormat.Ppt) {
    formatName = "PPT";
} else if (loadFormat === aspose.LoadFormat.Odp) {
    formatName = "ODP";
}

console.log(`File: ${path.basename(filePath)}`);
console.log(`Format: ${formatName}`);
console.log(`Title: ${documentProperties.getTitle()}`);
console.log(`Author: ${documentProperties.getAuthor()}`);
console.log("Statistics:");
console.log(`  Slides: ${documentProperties.getSlides()}`);
console.log(`  Hidden slides: ${documentProperties.getHiddenSlides()}`);
console.log(`  Slides with notes: ${documentProperties.getNotes()}`);
console.log(`  Paragraphs: ${documentProperties.getParagraphs()}`);
console.log(`  Words: ${documentProperties.getWords()}`);
console.log(`  Multimedia clips: ${documentProperties.getMultimediaClips()}`);

const headingPairs = documentProperties.getHeadingPairs() || [];
const titlesOfParts = documentProperties.getTitlesOfParts() || [];
let partIndex = 0;

if (headingPairs.length === 0 || titlesOfParts.length === 0) {
    console.log("Content groups: not available");
} else {
    console.log("Content groups:");

    for (const headingPair of headingPairs) {
        const partCount = headingPair.getCount();
        console.log(`  ${headingPair.getName()} (${partCount})`);

        for (let partOffset = 0; partOffset < partCount && partIndex < titlesOfParts.length; partOffset++) {
            console.log(`    - ${titlesOfParts[partIndex]}`);
            partIndex++;
        }
    }

    if (partIndex < titlesOfParts.length) {
        console.log("  Other parts:");

        while (partIndex < titlesOfParts.length) {
            console.log(`    - ${titlesOfParts[partIndex]}`);
            partIndex++;
        }
    }
}

Cada HeadingPair suministra un nombre de grupo a través de HeadingPair.getName y el número de elementos en ese grupo mediante HeadingPair.getCount. DocumentProperties.getTitlesOfParts devuelve una matriz plana y ordenada, por lo que debe consumir el número de títulos consecutivos especificado por cada pareja de encabezado.

Metadatos almacenados y limitaciones de formato

Las propiedades de inventario devueltas por PresentationInfo.readDocumentProperties reflejan los metadatos disponibles en el documento fuente. Aspose.Slides no carga ni recorre el modelo de objetos de la presentación para recalcular estos valores en esta llamada. Las propiedades ausentes se representan mediante valores predeterminados, y los valores almacenados pueden estar desactualizados si la aplicación que guardó el archivo por última vez no actualizó sus propiedades de documento.

  • PPTX: El formato proporciona propiedades de documento extendidas para recuentos de diapositivas, notas, diapositivas ocultas, párrafos, palabras y elementos multimedia, así como pares de encabezado y títulos de partes. La disponibilidad depende de qué propiedades haya escrito el productor del documento.
  • PPT: El formato binario puede almacenar propiedades resumidas de documento correspondientes. Si una propiedad está ausente o no fue actualizada por el productor del documento, Aspose.Slides devuelve su valor almacenado o predeterminado en lugar de calcularlo a partir de las diapositivas.
  • ODP: Los metadatos de OpenDocument proporcionan estadísticas generales del documento, como recuentos de páginas, párrafos y palabras, pero estos valores no se corresponden con todas las propiedades extendidas específicas de PowerPoint. Los metadatos de diapositivas ocultas, notas, multimedia, pares de encabezado y títulos de partes pueden no estar disponibles, y las propiedades de inventario pueden devolver valores predeterminados. No trate un valor cero o una matriz vacía como prueba concluyente de que el contenido correspondiente está ausente.

Utilice el enfoque de metadatos ligeros para inventarios y comprobaciones preliminares. Cargue la presentación e inspeccione su modelo de objetos en tiempo real cuando el resultado deba reflejar cambios en memoria o cuando necesite verificar el contenido real de la presentación.

Actualizar propiedades de la presentación

Las propiedades devueltas por PresentationInfo.readDocumentProperties también pueden modificarse sin crear una instancia de Presentation. Aplique los cambios con PresentationInfo.updateDocumentProperties, y luego escriba la presentación vinculada con PresentationInfo.writeBindedPresentation.

La siguiente imagen muestra las propiedades originales del documento de la presentación PowerPoint.

Propiedades originales del documento de la presentación PowerPoint

El siguiente ejemplo cambia el título y la fecha de última guardado y escribe el resultado en un archivo nuevo:

const aspose = require("aspose.slides.via.java");
const java = require("java");

const sourceFile = "sample.pptx";
const outputFile = "sample_with_updated_properties.pptx";
const presentationInfo = aspose.PresentationFactory.getInstance().getPresentationInfo(sourceFile);
const documentProperties = presentationInfo.readDocumentProperties();

documentProperties.setTitle("Quarterly sales report");
documentProperties.setLastSavedTime(java.newInstanceSync("java.util.Date"));

presentationInfo.updateDocumentProperties(documentProperties);
const outputStream = java.newInstanceSync("java.io.FileOutputStream", outputFile);
try {
    presentationInfo.writeBindedPresentation(outputStream);
} finally {
    outputStream.close();
}

La siguiente imagen muestra las propiedades modificadas del documento de la presentación PowerPoint.

Propiedades modificadas del documento de la presentación PowerPoint

Enlaces útiles

Para comprobaciones de seguridad relacionadas y configuraciones de protección, consulte los siguientes artículos:

Preguntas frecuentes

¿Cómo puedo comprobar si las fuentes están incrustadas y cuáles son?

Cargue la presentación y use Presentation.getFontsManager. Llame a FontsManager.getEmbeddedFonts para obtener las fuentes incrustadas y a FontsManager.getFonts para obtener las fuentes usadas por la presentación. Compare los dos resultados para encontrar fuentes que son necesarias para el renderizado pero que no están incrustadas.

¿Cómo puedo saber rápidamente si el archivo tiene diapositivas ocultas y cuántas?

Cuando los metadatos del documento almacenados son suficientes, lea DocumentProperties.getHiddenSlides a través de PresentationFactory.getPresentationInfo y PresentationInfo.readDocumentProperties. Esto es adecuado para un inventario ligero. Si la presentación se ha modificado en memoria, los metadatos almacenados pueden faltar o estar desactualizados, o necesita verificar valores en tiempo real; en ese caso, recorra Presentation.getSlides e inspeccione el método Slide.getHidden de cada diapositiva.

¿Puedo detectar si se usa un tamaño y orientación de diapositiva personalizados, y si difieren de los valores predeterminados?

Sí. Cargue la presentación y llame a Presentation.getSlideSize. Utilice SlideSize.getType, SlideSize.getSize y SlideSize.getOrientation para comparar la configuración actual con el preset y las dimensiones esperadas.

¿Existe una forma rápida de ver si los gráficos hacen referencia a fuentes de datos externas?

Sí. Ubique cada Chart y llame a ChartData.getDataSourceType. Para un libro de trabajo externo, llame a ChartData.getExternalWorkbookPath. El tipo de origen de datos y la ruta identifican una referencia externa, pero verificar si el recurso está disponible requiere una comprobación adicional.

¿Cómo puedo evaluar las diapositivas “pesadas” que pueden ralentizar el renderizado o la exportación a PDF?

No existe una única propiedad de complejidad. Recorra Presentation.getSlides y la colección BaseSlide.getShapes de cada diapositiva. Use los recuentos de formas y la presencia de imágenes grandes, efectos, animaciones o elementos multimedia como señales de diagnóstico, y mida un renderizado o exportación representativa antes de considerar una diapositiva como un cuello de botella confirmado.