Pobieranie i aktualizacja informacji o prezentacji w JavaScript

Przegląd

Aspose.Slides może zidentyfikować format prezentacji i odczytać jej metadane dokumentu bez tworzenia pełnego modelu obiektowego prezentacji. Jest to przydatne, gdy trzeba klasyfikować pliki, stworzyć inwentaryzację lub sprawdzić właściwości przed podjęciem decyzji o wczytaniu i przetworzeniu zawartości prezentacji.

Ten artykuł demonstruje lekką inspekcję przy użyciu PresentationFactory i PresentationInfo, a także ukierunkowane aktualizacje przy użyciu DocumentProperties.

Sprawdź format prezentacji

Jeśli masz już wczytaną prezentację, zobacz Determine the Original Presentation Format aby wykryć format po wczytaniu oraz ograniczenia starszych strumieni PPT, PPS i POT.

Użyj PresentationFactory.getPresentationInfo aby zbadać plik bez tworzenia instancji Presentation. Metoda PresentationInfo.getLoadFormat zwraca wykryty format, taki jak PPTX, PPT lub 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}`);
}

Zbuduj lekką inwentaryzację prezentacji

Gdy przetwarzasz wiele plików prezentacji, możesz potrzebować kompaktowej inwentaryzacji do walidacji, indeksowania lub systemu zarządzania dokumentami. W takim scenariuszu użyj PresentationFactory.getPresentationInfo, aby uzyskać obiekt PresentationInfo, a następnie wywołaj PresentationInfo.readDocumentProperties, aby odczytać metadane dokumentu. To podejście nie tworzy instancji Presentation ani nie wymaga przechodzenia po pełnym modelu obiektowym prezentacji.

Rozszerzone właściwości udostępniane przez DocumentProperties dostarczają następujące wartości inwentaryzacji:

Metoda Wartość inwentaryzacji
getSlides Całkowita liczba slajdów.
getHiddenSlides Liczba ukrytych slajdów.
getNotes Liczba slajdów zawierających notatki.
getParagraphs Całkowita liczba akapitów, jeśli dostępna.
getWords Całkowita liczba słów.
getMultimediaClips Całkowita liczba klipów audio i wideo.

Poniższy przykład odczytuje te wartości bez tworzenia obiektu Presentation i wypisuje zwartą inwentaryzację. Łączy również DocumentProperties.getHeadingPairs z DocumentProperties.getTitlesOfParts, aby wyświetlić grupy zawartości, takie jak czcionki, motywy i tytuły slajdów.

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

Każdy HeadingPair dostarcza nazwę grupy poprzez HeadingPair.getName oraz liczbę elementów w tej grupie poprzez HeadingPair.getCount. DocumentProperties.getTitlesOfParts zwraca płaską, uporządkowaną tablicę, więc należy pobrać liczbę kolejnych tytułów określoną przez każdy heading pair.

Przechowywane metadane i ograniczenia formatu

Właściwości inwentaryzacji zwracane przez PresentationInfo.readDocumentProperties odzwierciedlają metadane dostępne w źródłowym dokumencie. Aspose.Slides nie wczytuje i nie przegląda modelu obiektowego prezentacji, aby przeliczyć te wartości w trakcie tego wywołania. Brakujące właściwości są reprezentowane wartościami domyślnymi, a przechowywane wartości mogą być nieaktualne, jeśli aplikacja ostatnio zapisująca plik nie zaktualizowała właściwości dokumentu.

  • PPTX: Format udostępnia rozszerzone właściwości dokumentu dotyczące liczby slajdów, notatek, ukrytych slajdów, akapitów, słów i multimediów, a także par nagłówków i tytułów części. Dostępność zależy od tego, które właściwości zostały zapisane przez producenta dokumentu.
  • PPT: Format binarny może przechowywać odpowiadające właściwości podsumowania dokumentu. Jeśli właściwość jest nieobecna lub nie została odświeżona przez producenta dokumentu, Aspose.Slides zwraca jej zapisaną lub domyślną wartość zamiast obliczać ją na podstawie slajdów.
  • ODP: Metadane OpenDocument dostarczają ogólne statystyki dokumentu, takie jak liczba stron, akapitów i słów, ale te wartości nie mapują na wszystkie specyficzne dla PowerPointa rozszerzone właściwości. Metadane dotyczące ukrytych slajdów, slajdów z notatkami, multimediów, par nagłówków i tytułów części mogą być niedostępne, a właściwości inwentaryzacji mogą zwracać wartości domyślne. Nie należy traktować zera lub pustej tablicy jako ostatecznego dowodu, że odpowiadająca zawartość jest nieobecna.

Używaj lekkiego podejścia opartego na metadanych do inwentaryzacji i wstępnych sprawdzeń. Wczytaj prezentację i sprawdź jej żywy model obiektowy, gdy wynik musi odzwierciedlać zmiany w pamięci lub gdy potrzebujesz zweryfikować rzeczywistą zawartość prezentacji.

Aktualizuj właściwości prezentacji

Właściwości zwracane przez PresentationInfo.readDocumentProperties można również zmienić bez tworzenia instancji Presentation. Zastosuj zmiany za pomocą PresentationInfo.updateDocumentProperties, a następnie zapisz powiązaną prezentację przy użyciu PresentationInfo.writeBindedPresentation.

Poniższy obraz przedstawia oryginalne właściwości dokumentu.

Original document properties of the PowerPoint presentation

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

Poniższy obraz przedstawia zaktualizowane właściwości dokumentu.

Changed document properties of the PowerPoint presentation

Przydatne linki

W odniesieniu do powiązanych kontroli bezpieczeństwa i ustawień ochrony, zobacz następujące artykuły:

FAQ

Jak mogę sprawdzić, czy czcionki są osadzone i które to są?

Wczytaj prezentację i użyj Presentation.getFontsManager. Wywołaj FontsManager.getEmbeddedFonts, aby uzyskać listę osadzonych czcionek, oraz FontsManager.getFonts, aby uzyskać czcionki używane w prezentacji. Porównaj oba wyniki, aby znaleźć czcionki potrzebne do renderowania, które nie są osadzone.

Jak szybko sprawdzić, czy plik ma ukryte slajdy i ile ich jest?

Gdy przechowywane metadane dokumentu wystarczają, odczytaj DocumentProperties.getHiddenSlides przez PresentationFactory.getPresentationInfo i PresentationInfo.readDocumentProperties. To rozwiązanie jest odpowiednie dla lekkiej inwentaryzacji. Jeśli prezentacja została zmodyfikowana w pamięci, przechowywane metadane mogą być brakujące lub nieaktualne; w takim wypadku przeiteruj Presentation.getSlides i sprawdź metodę Slide.getHidden dla każdego slajdu.

Czy mogę wykryć, czy użyto niestandardowego rozmiaru slajdu i orientacji oraz czy różnią się od domyślnych?

Tak. Wczytaj prezentację i wywołaj Presentation.getSlideSize. Użyj SlideSize.getType, SlideSize.getSize, oraz SlideSize.getOrientation, aby porównać bieżące ustawienia z oczekiwanymi domyślnymi i wymiarami.

Czy istnieje szybki sposób, aby sprawdzić, czy wykresy odwołują się do zewnętrznych źródeł danych?

Tak. Znajdź każdy Chart i wywołaj ChartData.getDataSourceType. Dla zewnętrznego skoroszytu wywołaj ChartData.getExternalWorkbookPath. Typ źródła danych i ścieżka identyfikują odwołanie zewnętrzne, ale weryfikacja dostępności docelowego zasobu wymaga osobnego sprawdzenia zasobów.

Jak mogę ocenić „ciężkie” slajdy, które mogą spowalniać renderowanie lub eksport do PDF?

Nie ma jednej właściwości określającej złożoność. Przejrzyj Presentation.getSlides i kolekcję BaseSlide.getShapes każdego slajdu. Używaj liczby kształtów oraz obecności dużych obrazów, efektów, animacji lub multimediów jako wskaźników, a także zmierz reprezentatywny czas renderowania lub eksportu, zanim uznasz slajd za potwierdzony wąski gardło wydajności.