Načíst a aktualizovat informace o prezentaci v JavaScriptu

Přehled

Aspose.Slides může rozpoznat formát prezentace a přečíst metadata dokumentu, aniž by vytvořil kompletní objektový model prezentace. To je užitečné, když potřebujete soubory klasifikovat, vytvořit inventář nebo zkontrolovat vlastnosti před rozhodnutím, zda načíst a zpracovat obsah prezentace.

Tento článek ukazuje lehkou inspekci pomocí PresentationFactory a PresentationInfo, stejně jako cílené aktualizace pomocí DocumentProperties.

Zkontrolovat formát prezentace

Pokud již máte načtenou prezentaci, podívejte se na Determine the Original Presentation Format pro detekci po načtení a omezení starších PPT, PPS a POT proudů.

Použijte PresentationFactory.getPresentationInfo k prohlédnutí souboru, aniž byste vytvářeli instanci Presentation. Metoda PresentationInfo.getLoadFormat vrací detekovaný formát, například PPTX, PPT nebo 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}`);
}

Vytvořit lehkou inventuru prezentací

Když zpracováváte mnoho souborů prezentací, můžete potřebovat kompaktní inventář pro validaci, indexování nebo systém správy dokumentů. V tomto scénáři použijte PresentationFactory.getPresentationInfo k získání objektu PresentationInfo a následně zavolejte PresentationInfo.readDocumentProperties k přečtení metadat dokumentu. Tento přístup nevytváří instanci Presentation ani nevyžaduje procházet kompletní objektový model prezentace.

Rozšířené vlastnosti zpřístupněné pomocí DocumentProperties poskytují následující hodnoty inventáře:

Metoda Inventární hodnota
getSlides Celkový počet snímků.
getHiddenSlides Počet skrytých snímků.
getNotes Počet snímků, které obsahují poznámky.
getParagraphs Celkový počet odstavců, pokud jsou k dispozici.
getWords Celkový počet slov.
getMultimediaClips Celkový počet audio a video klipů.

Následující příklad přečte tyto hodnoty bez vytváření objektu Presentation a vytiskne kompaktní inventář. Kombinuje také DocumentProperties.getHeadingPairs s DocumentProperties.getTitlesOfParts k zobrazení skupin obsahu, jako jsou písma, motivy a názvy snímků.

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ždý HeadingPair poskytuje název skupiny pomocí HeadingPair.getName a počet položek v této skupině pomocí HeadingPair.getCount. DocumentProperties.getTitlesOfParts vrací ploché, uspořádané pole, takže spotřebujte počet po sobě jdoucích názvů určených každým heading pair.

Uložená metadata a omezení formátu

Vlastnosti inventáře vrácené metodou PresentationInfo.readDocumentProperties odrážejí metadata dostupná v původním dokumentu. Aspose.Slides nenačítá a neprochází objektový model prezentace pro přepočet těchto hodnot při tomto volání. Chybějící vlastnosti jsou reprezentovány výchozími hodnotami a uložené hodnoty mohou být zastaralé, pokud aplikace, která soubor naposledy uložila, neaktualizovala jeho dokumentové vlastnosti.

  • PPTX: Formát poskytuje rozšířené dokumentové vlastnosti pro počty snímků, poznámek, skrytých snímků, odstavců, slov a multimédií, stejně jako heading pairs a part titles. Dostupnost závisí na tom, které vlastnosti byly zapsány výrobcem dokumentu.
  • PPT: Binární formát může uložit odpovídající vlastnosti souhrnu dokumentu. Pokud je vlastnost nepřítomna nebo nebyla aktualizována výrobcem dokumentu, Aspose.Slides vrátí její uloženou nebo výchozí hodnotu místo výpočtu ze snímků.
  • ODP: Metadata OpenDocument poskytují obecné statistiky dokumentu, jako jsou počty stránek, odstavců a slov, ale tyto hodnoty se nepřekládají na všechny PowerPoint‑specifické rozšířené vlastnosti. Metadata pro skryté snímky, poznámky, multimédia, heading‑pair a part‑title mohou být nedostupná a vlastnosti inventáře mohou vracet výchozí hodnoty. Nevnímejte nulovou hodnotu nebo prázdné pole jako autoritativní důkaz, že odpovídající obsah chybí.

Používejte lehký přístup k metadatům pro inventáře a předběžné kontroly. Načtěte prezentaci a prohlédněte její živý objektový model, když výsledek musí odrážet změny v paměti nebo když potřebujete ověřit skutečný obsah prezentace.

Aktualizovat vlastnosti prezentace

Vlastnosti vrácené metodou PresentationInfo.readDocumentProperties lze také změnit bez vytvoření instance Presentation. Proveďte změny pomocí PresentationInfo.updateDocumentProperties a poté zapište svázanou prezentaci pomocí PresentationInfo.writeBindedPresentation.

Následující obrázek zobrazuje původní vlastnosti dokumentu.

Původní vlastnosti dokumentu PowerPoint prezentace

Následující příklad mění název a čas posledního uložení a zapisuje výsledek do nového souboru:

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

Následující obrázek zobrazuje aktualizované vlastnosti dokumentu.

Změněné vlastnosti dokumentu PowerPoint prezentace

Užitečné odkazy

Pro související bezpečnostní kontroly a nastavení ochrany viz následující články:

Často kladené otázky

Jak mohu zkontrolovat, zda jsou písma vložena a která to jsou?

Načtěte prezentaci a použijte Presentation.getFontsManager. Zavolejte FontsManager.getEmbeddedFonts pro získání vložených písem a FontsManager.getFonts pro získání písem používaných v prezentaci. Porovnejte oba výsledky a zjistěte, která písma jsou potřebná pro vykreslení, ale nejsou vložena.

Jak mohu rychle zjistit, zda soubor obsahuje skryté snímky a kolik jich je?

Pokud jsou uložená metadata dokumentu dostačující, přečtěte DocumentProperties.getHiddenSlides prostřednictvím PresentationFactory.getPresentationInfo a PresentationInfo.readDocumentProperties. Toto je vhodné pro lehkou inventuru. Pokud byla prezentace upravena v paměti, mohou být uložená metadata chybějící nebo zastaralá, nebo potřebujete ověřit živé hodnoty – v takovém případě projděte Presentation.getSlides a pro každý snímek zkontrolujte metodu Slide.getHidden.

Mohu zjistit, zda je použita vlastní velikost a orientace snímků a zda se liší od výchozích?

Ano. Načtěte prezentaci a zavolejte Presentation.getSlideSize. Použijte SlideSize.getType, SlideSize.getSize a SlideSize.getOrientation k porovnání aktuálního nastavení s očekávaným předdefinovaným a s rozměry.

Existuje rychlý způsob, jak zjistit, zda grafy odkazují na externí datové zdroje?

Ano. Najděte každý Chart a zavolejte ChartData.getDataSourceType. Pro externí sešit použijte ChartData.getExternalWorkbookPath. Typ datového zdroje a cesta identifikují externí odkaz, ale ověření dostupnosti cíle vyžaduje samostatnou kontrolu zdroje.

Jak mohu posoudit „těžké“ snímky, které mohou zpomalit vykreslování nebo export do PDF?

Neexistuje jediná vlastnost složitosti. Projděte Presentation.getSlides a u každého snímku kolekci BaseSlide.getShapes. Použijte počty tvarů a přítomnost velkých obrázků, efektů, animací nebo multimédií jako signály pro screening a změřte reprezentativní vykreslení nebo export, než považujete snímek za potvrzený úzký hrnec výkonu.