Získání a aktualizace informací o prezentaci na Androidu

Přehled

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

Tento článek ukazuje lehkou inspekci pomocí PresentationFactory a IPresentationInfo, a také cílené aktualizace prostřednictvím IDocumentProperties.

Zkontrolujte 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 streamů.

Použijte PresentationFactory.getPresentationInfo k inspekci souboru bez vytváření instance Presentation. Metoda IPresentationInfo.getLoadFormat uvádí detekovaný formát, např. PPTX, PPT nebo ODP.

import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.LoadFormat;
import com.aspose.slides.PresentationFactory;

String[] fileNames = { "pres.pptx", "pres.ppt", "pres.odp" };

for (String fileName : fileNames) {
    IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(fileName);
    int loadFormat = presentationInfo.getLoadFormat();
    String formatName = "Other (" + loadFormat + ")";

    if (loadFormat == LoadFormat.Pptx) {
        formatName = "PPTX";
    } else if (loadFormat == LoadFormat.Ppt) {
        formatName = "PPT";
    } else if (loadFormat == LoadFormat.Odp) {
        formatName = "ODP";
    }

    System.out.println(fileName + ": " + formatName);
}

Vytvořte lehký inventář prezentací

Když zpracováváte mnoho souborů s prezentacemi, můžete potřebovat kompaktní inventář pro validaci, indexaci nebo systém správy dokumentů. V tomto scénáři použijte PresentationFactory.getPresentationInfo k získání objektu IPresentationInfo a poté zavolejte IPresentationInfo.readDocumentProperties pro načtení metadat dokumentu. Tento přístup nevytváří instanci Presentation ani nevyžaduje procházení kompletního objektového modelu prezentace.

Rozšířené vlastnosti vystavené prostřednictvím IDocumentProperties 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ů obsahujících 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 načte tyto hodnoty bez vytvoření objektu Presentation a vytiskne kompaktní inventář. Také kombinuje getHeadingPairs s getTitlesOfParts pro zobrazení skupin obsahu, jako jsou písma, motivy a názvy snímků.

import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.IHeadingPair;
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.LoadFormat;
import com.aspose.slides.PresentationFactory;
import java.nio.file.Paths;

String filePath = "sample.pptx";
IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(filePath);
IDocumentProperties documentProperties = presentationInfo.readDocumentProperties();

int loadFormat = presentationInfo.getLoadFormat();
String formatName = "Other (" + loadFormat + ")";

if (loadFormat == LoadFormat.Pptx) {
    formatName = "PPTX";
} else if (loadFormat == LoadFormat.Ppt) {
    formatName = "PPT";
} else if (loadFormat == LoadFormat.Odp) {
    formatName = "ODP";
}

System.out.println("File: " + Paths.get(filePath).getFileName());
System.out.println("Format: " + formatName);
System.out.println("Title: " + documentProperties.getTitle());
System.out.println("Author: " + documentProperties.getAuthor());
System.out.println("Statistics:");
System.out.println("  Slides: " + documentProperties.getSlides());
System.out.println("  Hidden slides: " + documentProperties.getHiddenSlides());
System.out.println("  Slides with notes: " + documentProperties.getNotes());
System.out.println("  Paragraphs: " + documentProperties.getParagraphs());
System.out.println("  Words: " + documentProperties.getWords());
System.out.println("  Multimedia clips: " + documentProperties.getMultimediaClips());

IHeadingPair[] headingPairs = documentProperties.getHeadingPairs();
String[] titlesOfParts = documentProperties.getTitlesOfParts();
headingPairs = headingPairs != null ? headingPairs : new IHeadingPair[0];
titlesOfParts = titlesOfParts != null ? titlesOfParts : new String[0];
int partIndex = 0;

if (headingPairs.length == 0 || titlesOfParts.length == 0) {
    System.out.println("Content groups: not available");
} else {
    System.out.println("Content groups:");

    for (IHeadingPair headingPair : headingPairs) {
        System.out.println("  " + headingPair.getName() + " (" + headingPair.getCount() + ")");

        for (int partOffset = 0; partOffset < headingPair.getCount() && partIndex < titlesOfParts.length; partOffset++) {
            System.out.println("    - " + titlesOfParts[partIndex]);
            partIndex++;
        }
    }

    if (partIndex < titlesOfParts.length) {
        System.out.println("  Other parts:");

        while (partIndex < titlesOfParts.length) {
            System.out.println("    - " + titlesOfParts[partIndex]);
            partIndex++;
        }
    }
}

Každý IHeadingPair poskytuje název skupiny a počet položek v této skupině. IDocumentProperties.getTitlesOfParts vrací ploché, uspořádané pole, takže je třeba využít počet po sobě jdoucích názvů určených každým párem nadpisů.

Uložená metadata a omezení formátu

Vlastnosti inventáře vrácené metodou IPresentationInfo.readDocumentProperties odrážejí metadata dostupná ve zdrojovém dokumentu. Aspose.Slides nenačítá a neprochází objektový model prezentace za účelem přepočítání těchto hodnot pro toto volání. Chybějící vlastnosti jsou zastoupeny výchozími hodnotami a uložené hodnoty mohou být zastaralé, pokud aplikace, která naposledy soubor 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 multimedií, stejně jako páry nadpisů a názvy částí. Dostupnost závisí na tom, které vlastnosti byly zapsány tvůrcem dokumentu.
  • PPT: Binární formát může ukládat odpovídající souhrnné vlastnosti dokumentu. Pokud je vlastnost absentní nebo nebyla obnovena tvůrcem dokumentu, Aspose.Slides vrátí její uloženou nebo výchozí hodnotu místo toho, aby ji počítal ze snímků.
  • ODP: Metadata OpenDocument poskytuje obecné statistiky dokumentu, jako jsou počty stránek, odstavců a slov, ale tyto hodnoty neodpovídají všem specifickým rozšířeným vlastnostem PowerPointu. Metadata pro skryté snímky, poznámkové snímky, multimédia, páry nadpisů a názvy částí mohou být nedostupná a vlastnosti inventáře mohou vracet výchozí hodnoty. Nepovažujte nulovou hodnotu nebo prázdné pole za definitní důkaz, že odpovídající obsah chybí.

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

Aktualizujte vlastnosti prezentace

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

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

Původní vlastnosti dokumentu PowerPointové prezentace

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

import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.PresentationFactory;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;

String sourceFile = "sample.pptx";
String outputFile = "sample_with_updated_properties.pptx";
IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(sourceFile);
IDocumentProperties documentProperties = presentationInfo.readDocumentProperties();

documentProperties.setTitle("Quarterly sales report");
documentProperties.setLastSavedTime(new Date());

presentationInfo.updateDocumentProperties(documentProperties);
try (OutputStream outputStream = new FileOutputStream(outputFile)) {
    presentationInfo.writeBindedPresentation(outputStream);
}

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

Změněné vlastnosti dokumentu PowerPointové prezentace

Užitečné odkazy

Pro související bezpečnostní kontroly a nastavení ochrany si přečtěte 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 IFontsManager.getEmbeddedFonts pro získání vložených písem a IFontsManager.getFonts pro získání písem používaných v prezentaci. Porovnejte oba výsledky, abyste našli písma, která jsou potřebná pro vykreslení, ale nejsou vložena.

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

Když jsou uložená metadata dokumentu dostatečná, přečtěte IDocumentProperties.getHiddenSlides přes PresentationFactory.getPresentationInfo a IPresentationInfo.readDocumentProperties. To je vhodné pro lehký inventář. Pokud byla prezentace v paměti upravena, uložená metadata mohou chybět nebo být zastaralá, nebo potřebujete ověřit živé hodnoty, projděte Presentation.getSlides a místo toho inspektujte metodu ISlide.getHidden každého snímku.

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

Ano. Načtěte prezentaci a zavolejte Presentation.getSlideSize. Použijte ISlideSize.getType, ISlideSize.getSize a ISlideSize.getOrientation k porovnání současných nastavení s očekávaným přednastavením a rozměry.

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

Ano. Najděte každý Chart a zavolejte IChartData.getDataSourceType. Pro externí sešit zavolejte IChartData.getExternalWorkbookPath. Typ zdroje a cesta identifikují externí odkaz, ale ověření, zda je cíl dostupný, vyžaduje samostatnou kontrolu zdroje.

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

Neexistuje jediná vlastnost komplexnosti. Procházejte Presentation.getSlides a kolekci IBaseSlide.getShapes každého snímku. Použijte počet tvarů a přítomnost velkých obrázků, efektů, animací nebo multimédií jako signály, a změřte reprezentativní vykreslení nebo export, než považujete snímek za potvrzený výkonový úzký hrdlo.