Az eredeti prezentációformátum meghatározása Pythonban Java segítségével

Áttekintés

Prezentáció betöltése után hívja meg a Presentation.getSourceFormat metódust, hogy meghatározza az eredeti formátumát. Használja, ha a további feldolgozás a formátumtól függ, amelyből a jelenlegi példány betöltődött.

A forrásformátum különbözik a SaveFormat által kiválasztott kimeneti fájl formátumától. Más formátumba mentés nem változtatja meg a meglévő példány forrásformátumát.

A példákhoz szükséges az Aspose.Slides for Python via Java, valamint egy kompatibilis Java futtatókörnyezet. Minden példa elindítja a JVM-et, ha az még nem fut.

A fájl forrásformátumának olvasása

Ez a példa egy meglévő sample.pptx fájlt igényel. Betölti a fájlt, és a Presentation.getSourceFormat segítségével választ egy alkalmazásfeldolgozási szabályt, a fájlnév helyett. Módosítsa a bemeneti útvonalat más formátumok kipróbálásához. A példa kiírja a kiválasztott szabályt; cserélje le az üzeneteket saját alkalmazáslogikájára.

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SourceFormat

presentation = Presentation("sample.pptx")
try:
    source_format = presentation.getSourceFormat()
    if source_format in (SourceFormat.Ppt, SourceFormat.Pps, SourceFormat.Pot):
        print("Use the legacy PowerPoint processing policy.")
    elif source_format == SourceFormat.Pptx:
        print("Use the standard PPTX processing policy.")
    else:
        print(f"Use the general policy for source format {source_format}.")
finally:
    presentation.dispose()

Ismerje fel a támogatott értékeket

A SourceFormat osztály egész számú állandókat definiál, amelyek a következő prezentációformátumokat különböztetik meg. Az alábbi kiterjesztések hagyományosak, és nem az eredeti fájlnév rekonstruálása.

SourceFormat érték Kiterjesztés Formátum
Ppt .ppt PowerPoint 97–2003 prezentáció
Pptx .pptx Office Open XML prezentáció
Pptm .pptm Makrókkal ellátott Office Open XML prezentáció
Pps .pps PowerPoint 97–2003 diaelőadás
Ppsx .ppsx Office Open XML diaelőadás
Ppsm .ppsm Makrókkal ellátott Office Open XML diaelőadás
Pot .pot PowerPoint 97–2003 sablon
Potx .potx Office Open XML sablon
Potm .potm Makrókkal ellátott Office Open XML sablon
Odp .odp OpenDocument prezentáció
Otp .otp OpenDocument prezentációs sablon
Fodp .fodp Flat XML ODF prezentáció
Xml .xml PowerPoint XML prezentáció

A forrásformátum olvasása adatfolyamból

Ez a példa egy meglévő sample.pps fájlt igényel. A fájl bájtjainak memóriastreambe való beolvasása modellezi a fájlnév nélküli bemenetet, például adatbázisértéket vagy feltöltött bájt tömböt. A Presentation konstruktor csak a streamet kapja. A Python beolvassa a fájl bájtjait, és a JPype átfordítja őket Java bájt tömbbé a Java memóriastreamhez.

import jpype
import asposeslides

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

from pathlib import Path
from asposeslides.api import Presentation

try:
    data = Path("sample.pps").read_bytes()
    java_bytes = jpype.JArray(jpype.JByte)(data)
    stream = jpype.JClass("java.io.ByteArrayInputStream")(java_bytes)
    try:
        presentation = Presentation(stream)
        try:
            print(f"Source format: {presentation.getSourceFormat()}")
        finally:
            presentation.dispose()
    finally:
        stream.close()
except OSError as exception:
    print(f"Cannot read the presentation: {exception}")

A PPT, PPS és POT ugyanazt az alap bináris formátumot használja. Fájl útvonallal történő betöltéskor a kiterjesztés segíthet megkülönböztetni a diaelőadást vagy a sablont. Név nélkül a régi PPS és POT tartalom SourceFormat.Ppt‑ként jelentkezhet; a fenti PPS példa az SourceFormat.Ppt egész értékét írja ki.

Ha alkalmazásának meg kell őriznie a különbséget, tartsa meg az eredeti fájlnevet vagy a résztype metaadatot külön. A kiterjesztés hasznos jelzés ezekhez a régi altípusokhoz, de nem szabad kizárólag erre támaszkodni a prezentáció tartalmának azonosításához.

A felismerés összehasonlítása betöltés előtt és után

Használja a PresentationFactory.getPresentationInfo és a PresentationInfo.getLoadFormat metódusokat, ha a fájlt a teljes prezentációs objektummodell betöltése előtt kell vizsgálni. Használja a Presentation.getSourceFormat metódust, ha a példány már létezik.

Ez a példa sample.pptx‑et igényel, és kiírja a LoadFormat.Pptx illetve a SourceFormat.Pptx egész értékeit. Production környezetben válassza a feldolgozási szakaszának megfelelő API‑t; egy már betöltött prezentáció nem igényel második vizsgálatot a forrásformátum lekérdezéséhez.

import jpype
import asposeslides

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

from asposeslides.api import Presentation, PresentationFactory

path = "sample.pptx"
information = PresentationFactory.getInstance().getPresentationInfo(path)
print(f"Before loading: {information.getLoadFormat()}")

presentation = Presentation(path)
try:
    print(f"After loading: {presentation.getSourceFormat()}")
finally:
    presentation.dispose()

Az eredmények különböző osztályokból származó állandókat használnak: LoadFormat és SourceFormat. Ne hasonlítsa össze a numerikus értékeket, és ne feltételezze, hogy minden formátum azonos felismerési eredményt ad. A PowerPoint XML betöltés előtt LoadFormat.Unknown‑ként, betöltés után pedig SourceFormat.Xml‑ként jelentkezhet.

Tartsa külön a forrás- és kimeneti formátumokat

Ez a példa sample.pptx‑et igényel, és converted.odp‑t ír ki. Kiírja a SourceFormat.Pptx egész értékét a mentés előtt és után is. Csak az ODP kimenetből betöltött új példány jelenti Odp‑t.

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation("sample.pptx")
try:
    print(f"Before saving: {presentation.getSourceFormat()}")

    presentation.save("converted.odp", SaveFormat.Odp)
    print(f"After saving: {presentation.getSourceFormat()}")

    reopened = Presentation("converted.odp")
    try:
        print(f"Reopened output: {reopened.getSourceFormat()}")
    finally:
        reopened.dispose()
finally:
    presentation.dispose()

A Presentation()‑ból nulláról létrehozott prezentáció SourceFormat.Pptx‑t jelöl. Nem rendelkezik bemeneti fájllal: ez az újonnan létrehozott példány alapértelmezett értéke, nem bizonyíték arra, hogy PPTX fájlt töltöttek be. Külön nyomon kell követni, hogy az alkalmazás létrehozta‑e vagy betöltötte‑e a példányt, ha ez a megkülönböztetés fontos.

Forrásformátum leképezése kiterjesztésre

A következő példa sample.pptx‑et igényel. Minden jelenleg támogatott SourceFormat értéket leképez egy szokásos kiterjesztésre, a bemeneti fájlnév elemzése nélkül. A visszaesés megakadályozza, hogy egy nem felismert értékhez néma módon kiterjesztést rendeljünk.

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SourceFormat

extensions = {
    SourceFormat.Ppt: ".ppt",
    SourceFormat.Pptx: ".pptx",
    SourceFormat.Pptm: ".pptm",
    SourceFormat.Pps: ".pps",
    SourceFormat.Ppsx: ".ppsx",
    SourceFormat.Ppsm: ".ppsm",
    SourceFormat.Pot: ".pot",
    SourceFormat.Potx: ".potx",
    SourceFormat.Potm: ".potm",
    SourceFormat.Odp: ".odp",
    SourceFormat.Otp: ".otp",
    SourceFormat.Fodp: ".fodp",
    SourceFormat.Xml: ".xml",
}

presentation = Presentation("sample.pptx")
try:
    extension = extensions.get(presentation.getSourceFormat())
    print(extension if extension is not None else "No extension mapping is available.")
finally:
    presentation.dispose()

Ez a leképezés nem konvertál fájlt, és nem állítja helyre a stream betöltésekor elveszett régi PPS/POT altípust. Valódi mentéshez adja meg kifejezetten egy SaveFormat értékét, vagy használja a Save Presentations in Their Original Format példáját.

Formátumok ellenőrzése mentéssel és újranyitással

Ez az önálló példa egy prezentációt hoz létre, és három fájlt ír a munkakönyvtárba, felülírva az azonos nevű fájlokat. Mindegyik kimenetet újra megnyitja útvonallal és memóriastreamen keresztül is. PPTX és ODP esetén mindkét útvonal a mentett formátumot jelenti. PPS esetén az útvonallal betöltött példány Pps‑t, a névtelen bájtokkal betöltött példány Ppt‑t jelent.

import jpype
import asposeslides

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

from pathlib import Path
from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    formats = [
        (SaveFormat.Pptx, "pptx"),
        (SaveFormat.Odp, "odp"),
        (SaveFormat.Pps, "pps"),
    ]

    for save_format, extension in formats:
        path = f"roundtrip.{extension}"
        presentation.save(path, save_format)

        from_file = Presentation(path)
        try:
            data = Path(path).read_bytes()
            java_bytes = jpype.JArray(jpype.JByte)(data)
            stream = jpype.JClass("java.io.ByteArrayInputStream")(java_bytes)
            try:
                from_stream = Presentation(stream)
                try:
                    print(f"{extension}: file={from_file.getSourceFormat()}, stream={from_stream.getSourceFormat()}")
                finally:
                    from_stream.dispose()
            finally:
                stream.close()
        finally:
            from_file.dispose()
except OSError as exception:
    print(f"Cannot read a saved presentation: {exception}")
finally:
    presentation.dispose()
Mentett formátum SourceFormat fájl útvonalból SourceFormat névtelen adatfolyamból
PPT Ppt Ppt
PPTX, PPTM Pptx, Pptm megfelelően Ugyanaz, mint a fájl útvonal
PPS Pps Ppt
PPSX, PPSM Ppsx, Ppsm megfelelően Ugyanaz, mint a fájl útvonal
POT Pot Ppt
POTX, POTM Potx, Potm megfelelően Ugyanaz, mint a fájl útvonal
ODP, OTP Odp, Otp megfelelően Ugyanaz, mint a fájl útvonal
FODP Fodp Fodp
PowerPoint XML Xml Xml

A PPS/POT tartalom névtelen stream esetén Ppt‑ként azonosítható. A táblázat a formátum azonosítását írja le, nem minden prezentációs tulajdonság megőrzését a konverzió során.

GYIK

A mentés ODP formátumba megváltoztatja a PPTX‑ből betöltött prezentáció forrásformátumát?

Nem. A meglévő példány továbbra is Pptx‑ként jelenti. Az ODP‑ba mentett fájlból betöltött példány Odp‑t jelent.

Egy adatfolyam mindig meg tudja különböztetni a régi prezentációt, diavetítést és sablont?

Nem. A PPT, PPS és POT ugyanazt a bináris formátumot osztják meg. Ha ez a megkülönböztetés szükséges, tartsa meg a fájlnevet vagy a résztype metaadatot külön.

Melyik API-t használjam, ha a prezentáció már be van töltve?

Olvassa el a Presentation.getSourceFormat metódust. Használja a PresentationFactory.getPresentationInfo metódust a betöltés előtti vizsgálathoz.