Получить и обновить информацию о презентации в JavaScript

Обзор

Aspose.Slides может определить формат презентации и прочитать её метаданные документа без создания полной модели объектов презентации. Это полезно, когда необходимо классифицировать файлы, создать инвентарь или проверить свойства перед тем, как решить, загружать и обрабатывать содержимое презентации.

В этой статье демонстрируется лёгкая проверка с помощью PresentationFactory и PresentationInfo, а также целевые обновления с помощью DocumentProperties.

Проверка формата презентации

Если у вас уже загружена презентация, смотрите Определить исходный формат презентации для определения после загрузки и ограничений устаревших потоков PPT, PPS и POT.

Используйте PresentationFactory.getPresentationInfo для проверки файла без создания экземпляра Presentation. Метод PresentationInfo.getLoadFormat сообщает обнаруженный формат, например PPTX, PPT или 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}`);
}

Создание лёгкого инвентаря презентаций

Когда вы обрабатываете большое количество файлов презентаций, может потребоваться компактный инвентарь для проверки, индексирования или системы управления документами. В этом сценарии используйте PresentationFactory.getPresentationInfo для получения объекта PresentationInfo, а затем вызовите PresentationInfo.readDocumentProperties для чтения метаданных документа. Такой подход не создаёт экземпляр Presentation и не требует обхода полной модели объектов презентации.

Расширенные свойства, предоставляемые DocumentProperties, дают следующие значения инвентаря:

Метод Значение инвентаря
getSlides Общее количество слайдов.
getHiddenSlides Количество скрытых слайдов.
getNotes Количество слайдов, содержащих заметки.
getParagraphs Общее количество абзацев, если доступно.
getWords Общее количество слов.
getMultimediaClips Общее количество аудио‑ и видеоклипов.

Следующий пример считывает эти значения без создания объекта Presentation и выводит компактный инвентарь. Он также комбинирует DocumentProperties.getHeadingPairs с DocumentProperties.getTitlesOfParts для отображения групп содержимого, таких как шрифты, темы и заголовки слайдов.

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++;
        }
    }
}

Каждый HeadingPair предоставляет имя группы через HeadingPair.getName и количество элементов в этой группе через HeadingPair.getCount. DocumentProperties.getTitlesOfParts возвращает плоский упорядоченный массив, поэтому следует потреблять указанное количество последовательных заголовков для каждой пары заголовков.

Хранимые метаданные и ограничения форматов

Свойства инвентаря, возвращаемые PresentationInfo.readDocumentProperties, отражают метаданные, доступные в исходном документе. Aspose.Slides не загружает и не обходит модель объектов презентации для пересчёта этих значений при данном вызове. Отсутствующие свойства представлены значениями по умолчанию, а хранимые значения могут быть устаревшими, если приложение, последнее сохранявшее файл, не обновило их.

  • PPTX: Формат предоставляет расширенные свойства документа для подсчёта слайдов, заметок, скрытых слайдов, абзацев, слов и мультимедиа, а также пар заголовков и названий частей. Доступность зависит от того, какие свойства записал создатель документа.
  • PPT: Бинарный формат может хранить соответствующие свойства‑резюме документа. Если свойство отсутствует или не было обновлено создателем, Aspose.Slides возвращает его сохранённое или значение по умолчанию, а не рассчитывает его из слайдов.
  • ODP: Метаданные OpenDocument предоставляют общую статистику документа, такую как количество страниц, абзацев и слов, но эти значения не сопоставляются со всеми расширенными свойствами PowerPoint. Метаданные о скрытых слайдах, заметках, мультимедиа, парах заголовков и названиях частей могут быть недоступны, и свойства инвентаря могут вернуть значения по умолчанию. Не рассматривайте нулевое значение или пустой массив как окончательное доказательство отсутствия соответствующего контента.

Используйте лёгкий подход с метаданными для создания инвентарей и предварительных проверок. Загружайте презентацию и проверяйте её живую модель объектов, когда результат должен отражать изменения в памяти или когда необходимо подтвердить фактическое содержимое презентации.

Обновление свойств презентации

Свойства, возвращаемые PresentationInfo.readDocumentProperties, также можно изменить без создания экземпляра Presentation. Примените изменения с помощью PresentationInfo.updateDocumentProperties, а затем запишите связанную презентацию через PresentationInfo.writeBindedPresentation.

Следующее изображение показывает исходные свойства документа PowerPoint презентации.

Исходные свойства документа PowerPoint презентации

Следующий пример изменяет заголовок и время последнего сохранения и записывает результат в новый файл:

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();
}

Следующее изображение показывает изменённые свойства документа PowerPoint презентации.

Изменённые свойства документа PowerPoint презентации

Полезные ссылки

Для связанных проверок безопасности и параметров защиты смотрите следующие статьи:

FAQ

Как проверить, внедрены ли шрифты и какие именно?

Загрузите презентацию и используйте Presentation.getFontsManager. Вызовите FontsManager.getEmbeddedFonts для получения внедрённых шрифтов и FontsManager.getFonts для получения шрифтов, используемых в презентации. Сравните два результата, чтобы найти шрифты, требуемые для рендеринга, но не внедрённые.

Как быстро определить, есть ли скрытые слайды и их количество?

Когда хватает хранимых метаданных документа, прочитайте DocumentProperties.getHiddenSlides через PresentationFactory.getPresentationInfo и PresentationInfo.readDocumentProperties. Это подходит для лёгкого инвентаря. Если презентация была изменена в памяти, хранимые метаданные могут быть отсутствовать или устареть, либо требуется проверка живых значений — тогда пройдитесь по Presentation.getSlides и проверьте каждый слайд через Slide.getHidden.

Можно ли определить, используется ли пользовательский размер и ориентация слайда, и отличаются ли они от значений по умолчанию?

Да. Загрузите презентацию и вызовите Presentation.getSlideSize. Используйте SlideSize.getType, SlideSize.getSize и SlideSize.getOrientation для сравнения текущих настроек с ожидаемыми предустановками и размерами.

Есть ли быстрый способ увидеть, ссылаются ли диаграммы на внешние источники данных?

Да. Найдите каждую Chart и вызовите ChartData.getDataSourceType. Для внешней рабочей книги вызовите ChartData.getExternalWorkbookPath. Тип источника данных и путь указывают на внешнюю ссылку, но проверка доступности ресурса требует отдельной проверки.

Как оценить «тяжёлые» слайды, которые могут замедлять рендеринг или экспорт в PDF?

Нет единственного свойства сложности. Пройдитесь по Presentation.getSlides и коллекции BaseSlide.getShapes каждого слайда. Используйте количество фигур и наличие больших изображений, эффектов, анимаций или мультимедиа как индикаторы, и измерьте представительный рендер или экспорт, прежде чем считать слайд подтверждённым узким местом производительности.