Получить и обновить информацию о презентации в 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 презентации.

Следующий пример изменяет заголовок и время последнего сохранения и записывает результат в новый файл:
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 презентации.

Полезные ссылки
Для связанных проверок безопасности и параметров защиты смотрите следующие статьи:
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 каждого слайда. Используйте количество фигур и наличие больших изображений, эффектов, анимаций или мультимедиа как индикаторы, и измерьте представительный рендер или экспорт, прежде чем считать слайд подтверждённым узким местом производительности.