Προσδιορισμός της Αρχικής Μορφής Παρουσίασης σε Java

Επισκόπηση

Αφού φορτώσετε μια παρουσίαση, καλέστε τη μέθοδο Presentation.getSourceFormat για να προσδιορίσετε την αρχική της μορφή. Η μέθοδος είναι επίσης διαθέσιμη μέσω IPresentation.getSourceFormat. Χρησιμοποιήστε τη όταν η επόμενη επεξεργασία εξαρτάται από τη μορφή από την οποία φορτώθηκε το τρέχον αντικείμενο.

Η πηγή μορφή είναι διαφορετική από το SaveFormat που επιλέγεται για ένα αρχείο εξόδου. Η αποθήκευση σε άλλη μορφή δεν αλλάζει τη μορφή πηγής του υπάρχοντος αντικειμένου.

Ανάγνωση της μορφής πηγής ενός αρχείου

Αυτό το παράδειγμα απαιτεί ένα υπάρχον αρχείο sample.pptx. Φορτώνει το αρχείο και επιλέγει μια πολιτική επεξεργασίας εφαρμογής χρησιμοποιώντας Presentation.getSourceFormat, αντί για το όνομα αρχείου. Αλλάξτε τη διαδρομή εισόδου για να δοκιμάσετε άλλες μορφές. Το παράδειγμα εκτυπώνει την επιλεγμένη πολιτική· αντικαταστήστε τα μηνύματα με τη λογική της εφαρμογής σας.

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

Αναγνώριση των υποστηριζόμενων τιμών

Η κλάση SourceFormat ορίζει ακέραιες σταθερές που διακρίνουν τις παρακάτω μορφές παρουσίασης. Οι επεκτάσεις παρακάτω είναι συμβατικές επεκτάσεις, όχι μια ανακατασκευή του αρχικού ονόματος αρχείου.

Τιμή SourceFormat Επέκταση Μορφή
Ppt .ppt Παρουσίαση PowerPoint 97–2003
Pptx .pptx Παρουσίαση Office Open XML
Pptm .pptm Παρουσίαση Office Open XML με μακροεντολή
Pps .pps Παρουσίαση διαφάνειας PowerPoint 97–2003
Ppsx .ppsx Παρουσίαση διαφάνειας Office Open XML
Ppsm .ppsm Παρουσίαση διαφάνειας Office Open XML με μακροεντολή
Pot .pot Πρότυπο PowerPoint 97–2003
Potx .potx Πρότυπο Office Open XML
Potm .potm Πρότυπο Office Open XML με μακροεντολή
Odp .odp Παρουσίαση OpenDocument
Otp .otp Πρότυπο παρουσίασης OpenDocument
Fodp .fodp Παρουσίαση Flat XML ODF
Xml .xml Παρουσίαση PowerPoint XML

Ανάγνωση της μορφής πηγής από ροή

Αυτό το παράδειγμα απαιτεί ένα υπάρχον αρχείο sample.pps. Η ανάγνωση των ψηφιολέξεων του σε μια μνήμη ροής προσομοιώνει είσοδο που λαμβάνεται χωρίς όνομα αρχείου, όπως μια τιμή βάσης δεδομένων ή ένας μεταφορτωμένος πίνακας bytes. Ο κατασκευαστής Presentation λαμβάνει μόνο τη ροή.

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

Τα PPT, PPS και POT χρησιμοποιούν την ίδια υποκείμενη δυαδική μορφή. Κατά τη φόρτωση με διαδρομή αρχείου, η επέκταση μπορεί να βοηθήσει να διακρίνει μια παρουσίαση διαφάνειας ή πρότυπο. Χωρίς όνομα αρχείου, το παλαιό περιεχόμενο PPS και POT μπορεί να αναφερθεί ως SourceFormat.Ppt; το παραπάνω παράδειγμα PPS εκτυπώνει την ακέραια τιμή του SourceFormat.Ppt.

Εάν η εφαρμογή σας πρέπει να διατηρήσει τη διάκριση, κρατήστε το αρχικό όνομα αρχείου ή τα μεταδεδομένα υποτύπου ξεχωριστά. Μία επέκταση είναι χρήσιμος δείκτης για αυτά τα παλαιά υποτυπώματα, αλλά δεν πρέπει να αποτελεί τη μοναδική βάση για την αναγνώριση αυθαίρετου περιεχομένου παρουσίασης.

Σύγκριση ανίχνευσης πριν και μετά τη φόρτωση

Χρησιμοποιήστε το PresentationFactory.getPresentationInfo και το IPresentationInfo.getLoadFormat όταν χρειάζεται να εξετάσετε ένα αρχείο πριν τη φόρτωση του πλήρους μοντέλου αντικειμένων παρουσίασης. Χρησιμοποιήστε το Presentation.getSourceFormat όταν το αντικείμενο υπάρχει ήδη.

Αυτό το παράδειγμα απαιτεί το sample.pptx και εκτυπώνει τις ακέραιες τιμές των LoadFormat.Pptx και SourceFormat.Pptx, αντίστοιχα. Σε παραγωγή, επιλέξτε το API που ταιριάζει στο στάδιο επεξεργασίας· μια ήδη φορτωμένη παρουσίαση δεν χρειάζεται δεύτερη εξέταση μόνο για την απόκτηση της μορφής πηγής της.

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

Τα αποτελέσματα χρησιμοποιούν σταθερές από διαφορετικές κλάσεις: LoadFormat και SourceFormat. Μην συγκρίνετε τις αριθμητικές τους τιμές ή υποθέτετε ότι κάθε μορφή έχει ταυτόσια αποτελέσματα ανίχνευσης. Το PowerPoint XML μπορεί να αναφερθεί ως LoadFormat.Unknown πριν από τη φόρτωση και ως SourceFormat.Xml μετά τη φόρτωση.

Διατήρηση ξεχωριστών μορφών πηγής και εξόδου

Αυτό το παράδειγμα απαιτεί το sample.pptx και γράφει το converted.odp. Εκτυπώνει την ακέραια τιμή του SourceFormat.Pptx τόσο πριν όσο και μετά την αποθήκευση του αρχικού αντικειμένου. Μόνο το νέο αντικείμενο που φορτώθηκε από το αρχείο εξόδου ODP αναφέρει Odp.

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

Μια παρουσίαση που δημιουργείται από την αρχή με new Presentation() αναφέρει SourceFormat.Pptx. Δεν έχει αρχείο εισόδου: αυτή είναι η προεπιλογή για ένα νεοδημιουργημένο αντικείμενο, όχι απόδειξη ότι φορτώθηκε αρχείο PPTX. Παρακολουθήστε εάν η εφαρμογή σας δημιούργησε ή φόρτωσε το αντικείμενο ξεχωριστά εάν αυτή η διάκριση έχει σημασία.

Αντιστοίχιση μορφής πηγής σε επέκταση

Το παρακάτω παράδειγμα απαιτεί το sample.pptx. Αντιστοιχίζει κάθε τρέχουσα υποστηριζόμενη τιμή του SourceFormat σε μια συμβατική επέκταση, χωρίς να αναλύει το όνομα αρχείου εισόδου. Η εναλλακτική αποφεύγει την σιωπηρή εκχώρηση μιας επέκτασης σε μη αναγνωρισμένη τιμή.

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

Αυτή η αντιστοίχιση δεν μετατρέπει αρχείο ή ανακτά ένα παλαιό υποτύπο PPS/POT που χάθηκε κατά τη φόρτωση από ροή. Για πραγματική αποθήκευση, επιλέξτε ρητά ένα SaveFormat, ή χρησιμοποιήστε τη μετατροπή που εμφανίζεται στο Save Presentations in Their Original Format.

Επαλήθευση μορφών με αποθήκευση και επαναφόρτωση

Αυτό το αυτόνομο παράδειγμα δημιουργεί μια παρουσίαση και γράφει τρία αρχεία στον τρέχοντα φάκελο, αντικαθιστώντας αρχεία με τα ίδια ονόματα. Επαναφέρει κάθε έξοδο τόσο με διαδρομή όσο και μέσω μνήμης ροής. Για PPTX και ODP, και οι δύο διαδρομές αναφέρουν τη αποθηκευμένη μορφή. Για PPS, η φόρτωση με διαδρομή αναφέρει Pps, ενώ η φόρτωση των ίδιων bytes χωρίς όνομα αρχείου αναφέρει Ppt.

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();
}
Αποθηκευμένη μορφή SourceFormat από διαδρομή αρχείου SourceFormat από ροή χωρίς όνομα
PPT Ppt Ppt
PPTX, PPTM Pptx, Pptm αντίστοιχα Ιδία με τη διαδρομή αρχείου
PPS Pps Ppt
PPSX, PPSM Ppsx, Ppsm αντίστοιχα Ιδία με τη διαδρομή αρχείου
POT Pot Ppt
POTX, POTM Potx, Potm αντίστοιχα Ιδία με τη διαδρομή αρχείου
ODP, OTP Odp, Otp αντίστοιχα Ιδία με τη διαδρομή αρχείου
FODP Fodp Fodp
PowerPoint XML Xml Xml

Το περιεχόμενο PPS/POT αναγνωρίζεται ως Ppt για ροές χωρίς όνομα. Ο πίνακας περιγράφει την αναγνώριση μορφής, όχι τη διατήρηση κάθε χαρακτηριστικού παρουσίασης κατά τη μετατροπή.

FAQ

Αλλάζει η αποθήκευση σε ODP τη μορφή πηγής μιας παρουσίασης που φορτώθηκε από PPTX;

Όχι. Το υπάρχον αντικείμενο εξακολουθεί να αναφέρει Pptx. Ένα αντικείμενο που φορτώθηκε από το αποθηκευμένο αρχείο ODP αναφέρει Odp.

Μπορεί μια ροή πάντα να διαχωρίσει μια παλιά παρουσίαση, μια παρουσίαση διαφάνειας και ένα πρότυπο;

Όχι. Τα PPT, PPS και POT μοιράζονται τη δυαδική μορφή. Κρατήστε το όνομα αρχείου ή μεταδεδομένα υποτύπου ξεχωριστά όταν απαιτείται αυτή η διάκριση.

Ποιο API πρέπει να χρησιμοποιήσω αν η παρουσίαση είναι ήδη φορτωμένη;

Διαβάστε το Presentation.getSourceFormat. Χρησιμοποιήστε το PresentationFactory.getPresentationInfo για εξέταση πριν τη φόρτωση.