Получить и обновить информацию о презентации на JavaScript
Обзор
Aspose.Slides может определить формат презентации и считать метаданные документа без создания полной модели объекта презентации. Это полезно, когда необходимо классифицировать файлы, собрать инвентарь или проверить свойства до принятия решения о загрузке и обработке содержимого презентации.
В этой статье демонстрируется лёгкая проверка с помощью PresentationFactory и PresentationInfo, а также целевые обновления через DocumentProperties.
Проверка формата презентации
Используйте 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.
На следующем изображении показаны исходные свойства документа.

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

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