Prezentációs információk lekérése és frissítése Pythonon keresztül Java-val

Áttekintés

Az Aspose.Slides képes azonosítani egy prezentáció formátumát és kiolvasni a dokumentum metaadatait anélkül, hogy teljes prezentációs objektummodellt hozna létre. Ez akkor hasznos, ha fájlokat kell kategorizálni, leltárt építeni, vagy tulajdonságokat megtekinteni, mielőtt eldöntené, hogy betölti‑e és feldolgozza‑e a prezentáció tartalmát.

A példák az Aspose.Slides for Python via Java és egy kompatibilis Java‑futtatókörnyezet használatát feltételezik. Minden példa elindítja a JVM‑et, ha az még nem fut. Adja meg a példákban használt útvonalakon lévő meglévő prezentációs fájlokat.

Ez a cikk a könnyű ellenőrzést mutatja be a PresentationFactory és a PresentationInfo segítségével, valamint a célzott módosításokat a DocumentProperties használatával.

Prezentációformátum ellenőrzése

Ha már betöltött prezentációja van, lásd a Determine the Original Presentation Format cikket a betöltés utáni felismeréshez és a régi PPT, PPS és POT adatfolyamok korlátozásaihoz.

Használja a PresentationFactory.getPresentationInfo metódust egy fájl ellenőrzéséhez anélkül, hogy Presentation példányt hozna létre. A PresentationInfo.getLoadFormat metódus jelzi a felismert formátumot, például PPTX, PPT vagy ODP.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import LoadFormat, PresentationFactory

file_names = ["pres.pptx", "pres.ppt", "pres.odp"]

for file_name in file_names:
    presentation_info = PresentationFactory.getInstance().getPresentationInfo(file_name)
    load_format = presentation_info.getLoadFormat()
    format_name = f"Other ({load_format})"

    if load_format == LoadFormat.Pptx:
        format_name = "PPTX"
    elif load_format == LoadFormat.Ppt:
        format_name = "PPT"
    elif load_format == LoadFormat.Odp:
        format_name = "ODP"

    print(f"{file_name}: {format_name}")

Könnyű prezentációs leltár építése

Ha sok prezentációs fájlt dolgoz fel, előfordulhat, hogy egy kompakt leltárra van szüksége validáláshoz, indexeléshez vagy dokumentumkezelő rendszerhez. Ebben a helyzetben használja a PresentationFactory.getPresentationInfo metódust egy PresentationInfo objektum létrehozásához, majd hívja a PresentationInfo.readDocumentProperties metódust a dokumentum metaadatainak beolvasásához. Ez a megközelítés nem hoz létre Presentation példányt, és nem igényli a teljes objektummodell bejárását.

A DocumentProperties által biztosított kiterjesztett tulajdonságok a következő leltárértékeket adják:

Metódus Leltárérték
getSlides Diák összes száma.
getHiddenSlides Rejtett diák száma.
getNotes Jegyzetet tartalmazó diák száma.
getParagraphs Bekapcsolt bekezdések összes száma, ha elérhető.
getWords Szavak összes száma.
getMultimediaClips Hang‑ és videoklipek összes száma.

Az alábbi példa beolvassa ezeket az értékeket anélkül, hogy Presentation objektumot hozna létre, és egy kompakt leltárt nyomtat ki. Emellett a getHeadingPairs metódust kombinálja a getTitlesOfParts eredményével a tartalomcsoportok (pl. betűtípusok, témák, diacímek) megjelenítéséhez.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from pathlib import Path
from asposeslides.api import LoadFormat, PresentationFactory

file_path = "sample.pptx"
presentation_info = PresentationFactory.getInstance().getPresentationInfo(file_path)
document_properties = presentation_info.readDocumentProperties()

load_format = presentation_info.getLoadFormat()
format_name = f"Other ({load_format})"

if load_format == LoadFormat.Pptx:
    format_name = "PPTX"
elif load_format == LoadFormat.Ppt:
    format_name = "PPT"
elif load_format == LoadFormat.Odp:
    format_name = "ODP"

print(f"File: {Path(file_path).name}")
print(f"Format: {format_name}")
print(f"Title: {document_properties.getTitle()}")
print(f"Author: {document_properties.getAuthor()}")
print("Statistics:")
print(f"  Slides: {document_properties.getSlides()}")
print(f"  Hidden slides: {document_properties.getHiddenSlides()}")
print(f"  Slides with notes: {document_properties.getNotes()}")
print(f"  Paragraphs: {document_properties.getParagraphs()}")
print(f"  Words: {document_properties.getWords()}")
print(f"  Multimedia clips: {document_properties.getMultimediaClips()}")

heading_pairs = document_properties.getHeadingPairs()
titles_of_parts = document_properties.getTitlesOfParts()
heading_pairs = heading_pairs if heading_pairs is not None else []
titles_of_parts = titles_of_parts if titles_of_parts is not None else []
part_index = 0

if len(heading_pairs) == 0 or len(titles_of_parts) == 0:
    print("Content groups: not available")
else:
    print("Content groups:")

    for heading_pair in heading_pairs:
        print(f"  {heading_pair.getName()} ({heading_pair.getCount()})")

        for part_offset in range(heading_pair.getCount()):
            if part_index >= len(titles_of_parts):
                break
            print(f"    - {titles_of_parts[part_index]}")
            part_index += 1

    if part_index < len(titles_of_parts):
        print("  Other parts:")

        while part_index < len(titles_of_parts):
            print(f"    - {titles_of_parts[part_index]}")
            part_index += 1

Minden HeadingPair egy csoportnevet és a csoport elemeinek számát adja meg. A DocumentProperties.getTitlesOfParts lapos, rendezett tömböt ad vissza, ezért a heading‑pair‑ek által meghatározott egymást követő címek számát kell felhasználni.

Tárolt metaadatok és formátumkorlátok

A PresentationInfo.readDocumentProperties által visszaadott leltártulajdonságok a forrásdokumentumban elérhető metaadatokat tükrözik. Az Aspose.Slides nem tölti be és nem járja be a prezentációs objektummodellt ezen értékek újraszámításához. Hiányzó tulajdonságok alapértelmezett értékkel jelennek meg, a tárolt értékek pedig elavulhatnak, ha az utolsó mentő alkalmazás nem frissítette a dokumentumtulajdonságokat.

  • PPTX: A formátum kiterjesztett dokumentumtulajdonságokat biztosít a diák, jegyzetek, rejtett diák, bekezdések, szavak és multimédia számához, valamint heading‑pair‑ekhez és részcímekhez. Az elérhetőség attól függ, mely tulajdonságokat írta a dokumentum előállítója.
  • PPT: A bináris formátum megfelelő dokumentum‑összegző tulajdonságokat tud tárolni. Ha egy tulajdonság hiányzik vagy nem frissült a dokumentum előállítója által, az Aspose.Slides a tárolt vagy alapértelmezett értéket adja vissza a diák alapján történő újraszámolás helyett.
  • ODP: Az OpenDocument metaadatok általános dokumentumstatisztikákat (oldal, bekezdés, szó szám) szolgáltatnak, de ezek az értékek nem felelnek meg minden PowerPoint‑specifikus kiterjesztett tulajdonságnak. A rejtett diák, jegyzet‑diák, multimédia, heading‑pair és részcím metaadatok hiányozhatnak, és a leltártulajdonságok alapértelmezett értéket adhatnak. Ne tekintse a null értéket vagy az üres tömböt tekintélyes bizonyítéknak arra, hogy a megfelelő tartalom hiányzik.

Használja a könnyű metaadat‑megközelítést leltárokhoz és előzetes ellenőrzésekhez. Töltse be a prezentációt és vizsgálja meg a „live” objektummodellt, ha az eredménynek tükröznie kell a memória‑beli változásokat, vagy ha ellenőrizni kívánja a tényleges prezentációs tartalmat.

Prezentációs tulajdonságok frissítése

A PresentationInfo.readDocumentProperties által visszaadott tulajdonságok módosíthatók anélkül, hogy Presentation példányt hoznánk létre. Alkalmazza a módosításokat a PresentationInfo.updateDocumentProperties metódussal, majd írja ki a kötött prezentációt a PresentationInfo.writeBindedPresentation segítségével.

Az alábbi kép a dokumentum eredeti tulajdonságait mutatja.

Original document properties of the PowerPoint presentation

Az alábbi példa megváltoztatja a címet és a legutóbb mentett időt, majd az eredményt egy új fájlba írja:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import PresentationFactory
from java.io import FileOutputStream
from java.util import Date

source_file = "sample.pptx"
output_file = "sample_with_updated_properties.pptx"
presentation_info = PresentationFactory.getInstance().getPresentationInfo(source_file)
document_properties = presentation_info.readDocumentProperties()

document_properties.setTitle("Quarterly sales report")
last_saved_time = Date()
document_properties.setLastSavedTime(last_saved_time)

presentation_info.updateDocumentProperties(document_properties)
output_stream = FileOutputStream(output_file)
try:
    presentation_info.writeBindedPresentation(output_stream)
finally:
    output_stream.close()

Az alábbi kép a frissített dokumentumtulajdonságokat ábrázolja.

Changed document properties of the PowerPoint presentation

Hasznos hivatkozások

Kapcsolódó biztonsági ellenőrzések és védelmi beállítások témájában lásd az alábbi cikkeket:

Gyakran ismételt kérdések

Hogyan ellenőrizhetem, hogy a betűtípusok beágyazottak‑e, és melyek azok?

Töltse be a prezentációt, és használja a Presentation.getFontsManager metódust. Hívja a FontsManager.getEmbeddedFonts metódust a beágyazott betűtípusok lekéréséhez, valamint a FontsManager.getFonts metódust a prezentáció által használt betűtípusokhoz. Hasonlítsa össze a két eredményt, hogy megtalálja a rendereléshez szükséges, de nem beágyazott betűtípusokat.

Hogyan tudom gyorsan megállapítani, hogy a fájl rejtett diákot tartalmaz‑e, és hány darabot?

Ha a tárolt dokumentum‑metaadat elegendő, olvassa a DocumentProperties.getHiddenSlides értéket a PresentationFactory.getPresentationInfo és a PresentationInfo.readDocumentProperties segítségével. Ez alkalmas egy könnyű leltárhoz. Ha a prezentáció memóriában módosult, a tárolt metaadat hiányozhat vagy elavult lehet, vagy élő értékeket kell ellenőriznie; ekkor iteráljon a Presentation.getSlides metóduson, és vizsgálja meg minden dia Slide.getHidden metódusát.

Felismerhetem‑e, hogy egyedi dia‑méret és tájolás van‑e használatban, és eltér‑e‑nek az alapértelmezettől?

Igen. Töltse be a prezentációt, és hívja a Presentation.getSlideSize metódust. Használja a SlideSize.getType, a SlideSize.getSize és a SlideSize.getOrientation metódusokat az aktuális beállítások összehasonlításához a várt előre beállított értékekkel és méretekkel.

Van‑e gyors módja annak, hogy lássam, a diagramok külső adatforrásra hivatkoznak‑e?

Igen. Keresse meg minden Chart elemet, és hívja a ChartData.getDataSourceType metódust. Ha a forrás egy külső munkafüzet, hívja a ChartData.getExternalWorkbookPath metódust. Az adatforrás típusa és az útvonal azonosítja a külső hivatkozást, de a cél elérhetőségének ellenőrzése külön erőforrás‑ellenőrzést igényel.

Hogyan értékelhetem a „nehéz” diákot, amelyek lassíthatják a renderelést vagy a PDF‑exportot?

Nincs egyetlen komplexitási tulajdonság sem. Járja be a Presentation.getSlides és minden dia BaseSlide.getShapes gyűjteményét. Használjon alakzat‑számot, nagy képeket, effektusokat, animációkat vagy multimédiát szűrőjelzésként, és végezzen egy reprezentatív renderelést vagy exportot, mielőtt egy diát megerősített teljesítmény‑szűkítőnek tekintene.