Az eredeti bemutatóformátum meghatározása Java-ban

Áttekintés

A bemutató betöltése után hívja meg a Presentation.getSourceFormat metódust, hogy meghatározza az eredeti formátumát. A metódus a IPresentation.getSourceFormat felületen is elérhető. Használja, ha a további feldolgozás a jelenlegi példány betöltéséhez használt formátumtól függ.

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

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álasztja ki az alkalmazás feldolgozási szabályát a fájlnév helyett. A bemeneti útvonalat megváltoztatva más formátumokat is kipróbálhat. A példa kiírja a kiválasztott szabályt; cserélje ki az üzeneteket saját alkalmazáslogikájára.

import com.aspose.slides.Presentation;
import com.aspose.slides.SourceFormat;

Presentation presentation = new Presentation("sample.pptx");
try {
    switch (presentation.getSourceFormat()) {
        case SourceFormat.Ppt:
        case SourceFormat.Pps:
        case SourceFormat.Pot:
            System.out.println("Use the legacy PowerPoint processing policy.");
            break;
        case SourceFormat.Pptx:
            System.out.println("Use the standard PPTX processing policy.");
            break;
        default:
            System.out.println("Use the general policy for source format " + presentation.getSourceFormat() + ".");
            break;
    }
} finally {
    presentation.dispose();
}

Támogatott értékek felismerése

A SourceFormat osztály egész számú konstansokat határoz meg, amelyek a következő bemutatóformátumokat különböztetik meg. Az alábbi kiterjesztések konvencionálisak, nem a tényleges eredeti fájlnévről szólnak.

SourceFormat érték Kiterjesztés Formátum
Ppt .ppt PowerPoint 97–2003 bemutató
Pptx .pptx Office Open XML bemutató
Pptm .pptm Makrókkal ellátott Office Open XML bemutató
Pps .pps PowerPoint 97–2003 diavetítés
Ppsx .ppsx Office Open XML diavetítés
Ppsm .ppsm Makrókkal ellátott Office Open XML diavetíté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 bemutató
Otp .otp OpenDocument bemutatósablon
Fodp .fodp Flat XML ODF bemutató
Xml .xml PowerPoint XML bemutató

Forrásformátum olvasása egy adatfolyamból

Ez a példa egy meglévő sample.pps fájlt igényel. A fájl bájtjainak memóriában lévő adatfolyamba olvasása azt a helyzetet modellezi, amikor a bemenet fájlnév nélkül érkezik, például adatbázisérték vagy feltöltött bájt tömb formájában. A Presentation konstruktor csak az adatfolyamot kapja.

import com.aspose.slides.Presentation;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

try {
    byte[] bytes = Files.readAllBytes(Paths.get("sample.pps"));
    try (ByteArrayInputStream stream = new ByteArrayInputStream(bytes)) {
        Presentation presentation = new Presentation(stream);
        try {
            System.out.println("Source format: " + presentation.getSourceFormat());
        } finally {
            presentation.dispose();
        }
    }
} catch (IOException exception) {
    System.err.println("Cannot read the presentation: " + exception.getMessage());
}

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

Ha az alkalmazásnak meg kell őriznie a különbséget, tartsa meg az eredeti fájlnevet vagy a részletmetaadatot külön. A kiterjesztés hasznos útmutató lehet ezeknél a régi altípusoknál, de nem szabad kizárólag erre alapozni a tetszőleges bemutatótartalom azonosítását.

Detektálás összehasonlítása betöltés előtt és után

Használja a PresentationFactory.getPresentationInfo és a IPresentationInfo.getLoadFormat metódusokat, ha egy fájlt kell megvizsgálnia a teljes bemutatóobjektum modell betöltése előtt. 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. Éles környezetben válassza a feldolgozási szakasznak megfelelő API‑t; egy már betöltött bemutató nem igényel második vizsgálatot csak a forrásformátum lekérdezéséhez.

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

String path = "sample.pptx";
IPresentationInfo information = PresentationFactory.getInstance().getPresentationInfo(path);
System.out.println("Before loading: " + information.getLoadFormat());

Presentation presentation = new Presentation(path);
try {
    System.out.println("After loading: " + presentation.getSourceFormat());
} finally {
    presentation.dispose();
}

Az eredmények különböző osztályok konstansaiból származnak: LoadFormat és SourceFormat. Ne hasonlítsa össze a numerikus értékeiket, és ne feltételezze, hogy minden formátumnak azonos a detektálási eredménye. A PowerPoint XML betöltés előtt LoadFormat.Unknown, betöltés után pedig SourceFormat.Xml‑ként jelentkezhet.

Forrás- és kimeneti formátumok külön tartása

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 újra betöltött példány jelenti Odp‑ként.

import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;

Presentation presentation = new Presentation("sample.pptx");
try {
    System.out.println("Before saving: " + presentation.getSourceFormat());

    presentation.save("converted.odp", SaveFormat.Odp);
    System.out.println("After saving: " + presentation.getSourceFormat());

    Presentation reopened = new Presentation("converted.odp");
    try {
        System.out.println("Reopened output: " + reopened.getSourceFormat());
    } finally {
        reopened.dispose();
    }
} finally {
    presentation.dispose();
}

Az new Presentation()‑el nulláról létrehozott bemutató SourceFormat.Pptx‑ként jelentkezik. Nincs bemeneti fájl: ez az újonnan létrehozott példány alapértelmezett értéke, nem bizonyítja, hogy PPTX fájlt töltött be. Kövesse nyomon, hogy az alkalmazás létrehozta‑e vagy betöltötte‑e a példányt, ha ez a különbség számít.

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

Ez a példa sample.pptx‑et igényel. Minden jelenleg támogatott SourceFormat értéket leképez egy konvencionális kiterjesztésre, a bemeneti fájlnév elemzése nélkül. A tartalék megoldás megakadályozza, hogy egy fel nem ismert értékhez automatikusan kiterjesztést rendeljünk.

import com.aspose.slides.Presentation;
import com.aspose.slides.SourceFormat;

Presentation presentation = new Presentation("sample.pptx");
try {
    String extension;
    switch (presentation.getSourceFormat()) {
        case SourceFormat.Ppt:
            extension = ".ppt";
            break;
        case SourceFormat.Pptx:
            extension = ".pptx";
            break;
        case SourceFormat.Pptm:
            extension = ".pptm";
            break;
        case SourceFormat.Pps:
            extension = ".pps";
            break;
        case SourceFormat.Ppsx:
            extension = ".ppsx";
            break;
        case SourceFormat.Ppsm:
            extension = ".ppsm";
            break;
        case SourceFormat.Pot:
            extension = ".pot";
            break;
        case SourceFormat.Potx:
            extension = ".potx";
            break;
        case SourceFormat.Potm:
            extension = ".potm";
            break;
        case SourceFormat.Odp:
            extension = ".odp";
            break;
        case SourceFormat.Otp:
            extension = ".otp";
            break;
        case SourceFormat.Fodp:
            extension = ".fodp";
            break;
        case SourceFormat.Xml:
            extension = ".xml";
            break;
        default:
            extension = null;
            break;
    }

    System.out.println(extension != null ? extension : "No extension mapping is available.");
} finally {
    presentation.dispose();
}

Ez a leképezés nem konvertál fájlt, és nem állítja helyre a folyamatos betöltés során elveszett régi PPS/POT altípusokat. A tényleges mentéshez adja meg explicit módon a SaveFormat‑t, vagy használja a Save Presentations in Their Original Format példában bemutatott konverziót.

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

Ez az önálló példa egy bemutatót hoz létre, és három fájlt ír a munkakönyvtárba, felülírva az azonos nevű fájlokat. Minden kimenetet újból megnyit mind útvonallal, mind memóriában lévő adatfolyammal. PPTX‑nél és ODP‑nél mindkét út jelenték a mentett formátumot. PPS‑nél a fájl útvonallal történő betöltés Pps‑t jelent, míg a fájlnév nélküli bájtok betöltése Ppt‑t.

import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

Presentation presentation = new Presentation();
try {
    int[] formats = { SaveFormat.Pptx, SaveFormat.Odp, SaveFormat.Pps };
    String[] extensions = { "pptx", "odp", "pps" };

    for (int i = 0; i < formats.length; i++) {
        String path = "roundtrip." + extensions[i];
        presentation.save(path, formats[i]);

        Presentation fromFile = new Presentation(path);
        try {
            byte[] bytes = Files.readAllBytes(Paths.get(path));
            try (ByteArrayInputStream stream = new ByteArrayInputStream(bytes)) {
                Presentation fromStream = new Presentation(stream);
                try {
                    System.out.println(extensions[i] + ": file=" + fromFile.getSourceFormat() + ", stream=" + fromStream.getSourceFormat());
                } finally {
                    fromStream.dispose();
                }
            }
        } finally {
            fromFile.dispose();
        }
    }
} catch (IOException exception) {
    System.err.println("Cannot read a saved presentation: " + exception.getMessage());
} finally {
    presentation.dispose();
}

Az alábbi táblázat összegzi a forrásformátum azonosítását a megfelelő kiterjesztésű bemutatókra. A nevek konstansokat jelölnek; a Java példák azok egész értékét írják ki:

Mentett formátum SourceFormat fájl útvonalból SourceFormat névtelen adatfolyamból
PPT Ppt Ppt
PPTX, PPTM Pptx, Pptm megfelelően Ugyanaz, mint fájl útvonal
PPS Pps Ppt
PPSX, PPSM Ppsx, Ppsm megfelelően Ugyanaz, mint fájl útvonal
POT Pot Ppt
POTX, POTM Potx, Potm megfelelően Ugyanaz, mint fájl útvonal
ODP, OTP Odp, Otp megfelelően Ugyanaz, mint fájl útvonal
FODP Fodp Fodp
PowerPoint XML Xml Xml

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

GYIK

Megváltozik-e a forrásformátum, ha egy PPTX‑ből betöltött bemutatót ODP‑ként mentjük?

Nem. A meglévő példány továbbra is Pptx‑ként jelentkezik. Az ODP‑ból betöltött példány Odp‑ként jelentkezik.

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

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

Melyik API‑t használjam, ha a bemutató már be van töltve?

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