Καθορίστε την Αρχική Μορφή Παρουσίασης σε C++
Επισκόπηση
Αφού φορτώσετε μια παρουσίαση, καλέστε Presentation::get_SourceFormat για να προσδιορίσετε την αρχική της μορφή. Η μέθοδος είναι επίσης διαθέσιμη μέσω του IPresentation::get_SourceFormat. Χρησιμοποιήστε την όταν η επακόλουθη επεξεργασία εξαρτάται από τη μορφή από την οποία φορτώθηκε η τρέχουσα παρουσίαση.
Η πηγαία μορφή είναι διαφορετική από το SaveFormat που έχει επιλεχθεί για ένα αρχείο εξόδου. Η αποθήκευση σε άλλη μορφή δεν αλλάζει τη πηγαία μορφή της υπάρχουσας παρουσίασης.
Ανάγνωση του Source Format ενός Αρχείου
Αυτό το παράδειγμα απαιτεί ένα υπάρχον αρχείο sample.pptx. Φορτώνει το αρχείο και επιλέγει μια πολιτική επεξεργασίας εφαρμογής χρησιμοποιώντας το Presentation::get_SourceFormat, αντί του ονόματος αρχείου. Αλλάξτε τη διαδρομή εισόδου για να δοκιμάσετε άλλες μορφές. Το παράδειγμα εκτυπώνει την επιλεγμένη πολιτική· αντικαταστήστε τα μηνύματα με τη λογική της εφαρμογής σας.
#include <DOM/Presentation.h>
#include <DOM/SourceFormat.h>
#include <system/console.h>
#include <system/object_ext.h>
#include <system/string.h>
using namespace Aspose::Slides;
using namespace System;
auto presentation = MakeObject<Presentation>(u"sample.pptx");
switch (presentation->get_SourceFormat())
{
case SourceFormat::Ppt:
case SourceFormat::Pps:
case SourceFormat::Pot:
Console::WriteLine(u"Use the legacy PowerPoint processing policy.");
break;
case SourceFormat::Pptx:
Console::WriteLine(u"Use the standard PPTX processing policy.");
break;
default:
Console::WriteLine(String::Format(u"Use the general policy for {0}.", ObjectExt::ToString(presentation->get_SourceFormat())));
break;
}
Αναγνώριση των Υποστηριζόμενων Τιμών
Η απαρίθμηση 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 |
Ανάγνωση του Source Format από Ροή
Αυτό το παράδειγμα απαιτεί ένα υπάρχον αρχείο sample.pps. Η ανάγνωση των byte του σε μια ροή μνήμης μοντελοποιεί είσοδο που λήφθηκε χωρίς όνομα αρχείου, όπως μια τιμή βάσης δεδομένων ή ένας ανεβασμένος πίνακας byte. Ο κατασκευαστής Presentation δέχεται μόνο τη ροή.
#include <DOM/Presentation.h>
#include <DOM/SourceFormat.h>
#include <system/console.h>
#include <system/object_ext.h>
#include <system/string.h>
#include <system/io/file.h>
#include <system/io/memory_stream.h>
using namespace Aspose::Slides;
using namespace System;
using namespace System::IO;
auto bytes = File::ReadAllBytes(u"sample.pps");
auto stream = MakeObject<MemoryStream>(bytes);
auto presentation = MakeObject<Presentation>(stream);
Console::WriteLine(String::Format(u"Source format: {0}", ObjectExt::ToString(presentation->get_SourceFormat())));
Τα PPT, PPS και POT χρησιμοποιούν την ίδια υποκείμενη δυαδική μορφή. Κατά τη φόρτωση με διαδρομή αρχείου, η επέκταση μπορεί να βοηθήσει στον διαχωρισμό μιας παρουσίασης διαφάνειας ή προτύπου. Χωρίς όνομα αρχείου, το περιεχόμενο παλαιών PPS και POT μπορεί να αναφερθεί ως SourceFormat::Ppt; το παράδειγμα PPS παραπάνω αναφέρει Ppt.
Αν η εφαρμογή σας πρέπει να διατηρήσει αυτή τη διάκριση, κρατήστε το αρχικό όνομα αρχείου ή τα μεταδεδομένα υποτύπου χωριστά. Η επέκταση είναι χρήσιμη υπόδειξη για αυτά τα παλιά υποτύπους, αλλά δεν πρέπει να αποτελεί τη μόνη βάση για την ταυτοποίηση αυθαίρετου περιεχομένου παρουσίασης.
Σύγκριση Ανίχνευσης Πριν και Μετά τη Φόρτωση
Χρησιμοποιήστε το PresentationFactory::GetPresentationInfo και το IPresentationInfo::get_LoadFormat όταν χρειάζεται να ελέγξετε ένα αρχείο πριν φορτώσετε το πλήρες αντικειμενοστραφές μοντέλο της παρουσίασης. Χρησιμοποιήστε το Presentation::get_SourceFormat όταν η παρουσίαση υπάρχει ήδη.
Αυτό το παράδειγμα απαιτεί sample.pptx και εκτυπώνει Pptx και για τις δύο ελέγχους. Σε παραγωγή, επιλέξτε το API που ταιριάζει στο στάδιο επεξεργασίας· μια παρουσίαση που έχει ήδη φορτωθεί δεν χρειάζεται δεύτερο έλεγχο μόνο για την απόκτηση της πηγαίας μορφής.
#include <DOM/Presentation.h>
#include <DOM/SourceFormat.h>
#include <system/console.h>
#include <system/object_ext.h>
#include <system/string.h>
#include <DOM/PresentationFactory.h>
#include <DOM/IPresentationInfo.h>
#include <LoadFormat.h>
using namespace Aspose::Slides;
using namespace System;
auto path = String(u"sample.pptx");
auto information = PresentationFactory::get_Instance()->GetPresentationInfo(path);
Console::WriteLine(String::Format(u"Before loading: {0}", ObjectExt::ToString(information->get_LoadFormat())));
auto presentation = MakeObject<Presentation>(path);
Console::WriteLine(String::Format(u"After loading: {0}", ObjectExt::ToString(presentation->get_SourceFormat())));
Τα αποτελέσματα έχουν διαφορετικούς τύπους απαρίθμησης: LoadFormat και SourceFormat. Μην τα συγκρίνετε μετατρέποντας τις αριθμητικές τους τιμές ή υποθέτετε ότι κάθε μορφή έχει ταυτόσημα αποτελέσματα ανίχνευσης. Το PowerPoint XML μπορεί να αναφερθεί ως LoadFormat::Unknown πριν τη φόρτωση και ως SourceFormat::Xml μετά τη φόρτωση.
Διατήρηση των Πηγών και των Μορφών Εξόδου Ξεχωριστά
Αυτό το παράδειγμα απαιτεί sample.pptx και γράφει converted.odp. Εκτυπώνει Pptx τόσο πριν όσο και μετά την αποθήκευση της αρχικής παρουσίασης. Μόνο η νέα παρουσίαση που φορτώθηκε από το αρχείο εξόδου ODP αναφέρει Odp.
#include <DOM/Presentation.h>
#include <DOM/SourceFormat.h>
#include <system/console.h>
#include <system/object_ext.h>
#include <system/string.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace System;
using namespace Aspose::Slides::Export;
auto presentation = MakeObject<Presentation>(u"sample.pptx");
Console::WriteLine(String::Format(u"Before saving: {0}", ObjectExt::ToString(presentation->get_SourceFormat())));
presentation->Save(u"converted.odp", SaveFormat::Odp);
Console::WriteLine(String::Format(u"After saving: {0}", ObjectExt::ToString(presentation->get_SourceFormat())));
auto reopened = MakeObject<Presentation>(u"converted.odp");
Console::WriteLine(String::Format(u"Reopened output: {0}", ObjectExt::ToString(reopened->get_SourceFormat())));
Μια παρουσίαση που δημιουργείται από το μηδέν με MakeObject<Presentation>() αναφέρει SourceFormat::Pptx. Δεν υπάρχει αρχείο εισόδου: αυτή είναι η προεπιλεγμένη τιμή για μια νέα παρουσίαση, όχι απόδειξη ότι φορτώθηκε αρχείο PPTX. Παρακολουθείτε εάν η εφαρμογή σας δημιούργησε ή φόρτωσε την παρουσίαση ξεχωριστά εάν αυτή η διάκριση έχει σημασία.
Αντιστοίχιση Source Format σε Επέκταση
Το παρακάτω παράδειγμα απαιτεί sample.pptx. Αντιστοιχεί κάθε τρέχουσα υποστηριζόμενη τιμή του SourceFormat σε μια συμβατική επέκταση, χωρίς να αναλύει το όνομα αρχείου εισόδου. Η εναλλακτική λύση αποτρέπει την αθόρυβη ανάθεση επέκτασης σε μη αναγνωρισμένη τιμή.
#include <DOM/Presentation.h>
#include <DOM/SourceFormat.h>
#include <system/console.h>
#include <system/object_ext.h>
#include <system/string.h>
using namespace Aspose::Slides;
using namespace System;
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto extension = String::Empty;
switch (presentation->get_SourceFormat())
{
case SourceFormat::Ppt:
extension = u".ppt";
break;
case SourceFormat::Pptx:
extension = u".pptx";
break;
case SourceFormat::Pptm:
extension = u".pptm";
break;
case SourceFormat::Pps:
extension = u".pps";
break;
case SourceFormat::Ppsx:
extension = u".ppsx";
break;
case SourceFormat::Ppsm:
extension = u".ppsm";
break;
case SourceFormat::Pot:
extension = u".pot";
break;
case SourceFormat::Potx:
extension = u".potx";
break;
case SourceFormat::Potm:
extension = u".potm";
break;
case SourceFormat::Odp:
extension = u".odp";
break;
case SourceFormat::Otp:
extension = u".otp";
break;
case SourceFormat::Fodp:
extension = u".fodp";
break;
case SourceFormat::Xml:
extension = u".xml";
break;
default:
break;
}
Console::WriteLine(extension.IsEmpty() ? u"No extension mapping is available." : extension);
Αυτή η αντιστοίχηση δεν μετατρέπει αρχείο ούτε επαναφέρει ένα παλιό υποτύπο PPS/POT που χάθηκε κατά τη φόρτωση της ροής. Για πραγματική αποθήκευση, επιλέξτε ένα SaveFormat ρητά, ή χρησιμοποιήστε τη μετατροπή που φαίνεται στην ενότητα Save Presentations in Their Original Format.
Επαλήθευση Μορφών με Αποθήκευση και Επαναφόρτωση
Αυτό το αυτόνομο παράδειγμα δημιουργεί μια παρουσίαση και γράφει τρία αρχεία στον τρέχοντα φάκελο εργασίας, αντικαθιστώντας αρχεία με τα ίδια ονόματα. Επαναφορά κάθε εξόδου τόσο με διαδρομή όσο και μέσω ροής μνήμης. Για PPTX και ODP, και οι δύο διαδρομές αναφέρουν τη αποθηκευμένη μορφή. Για PPS, η φόρτωση με διαδρομή αναφέρει Pps, ενώ η φόρτωση των ίδιων byte χωρίς όνομα αρχείου αναφέρει Ppt.
#include <DOM/Presentation.h>
#include <DOM/SourceFormat.h>
#include <system/console.h>
#include <system/object_ext.h>
#include <system/string.h>
#include <Export/SaveFormat.h>
#include <system/array.h>
#include <system/io/file.h>
#include <system/io/memory_stream.h>
using namespace Aspose::Slides;
using namespace System;
using namespace Aspose::Slides::Export;
using namespace System::IO;
auto presentation = MakeObject<Presentation>();
auto formats = MakeArray<SaveFormat>({SaveFormat::Pptx, SaveFormat::Odp, SaveFormat::Pps});
for (auto format : formats)
{
auto formatName = ObjectExt::ToString(format);
auto path = String::Format(u"roundtrip.{0}", formatName.ToLowerInvariant());
presentation->Save(path, format);
auto fromFile = MakeObject<Presentation>(path);
auto bytes = File::ReadAllBytes(path);
auto stream = MakeObject<MemoryStream>(bytes);
auto fromStream = MakeObject<Presentation>(stream);
Console::WriteLine(String::Format(u"{0}: file={1}, stream={2}", formatName, ObjectExt::ToString(fromFile->get_SourceFormat()), ObjectExt::ToString(fromStream->get_SourceFormat())));
}
| Αποθηκευμένη μορφή | 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 για ροές χωρίς όνομα. Ο πίνακας περιγράφει την ταυτοποίηση μορφής, όχι τη διατήρηση κάθε δυνατότητας παρουσίασης κατά τη μετατροπή.
Συχνές Ερωτήσεις
Αλλάζει η αποθήκευση σε ODP τη πηγαία μορφή μιας παρουσίασης που φορτώθηκε από PPTX;
Όχι. Η υπάρχουσα παρουσίαση εξακολουθεί να αναφέρει Pptx. Μια παρουσίαση που φορτώθηκε από το αποθηκευμένο αρχείο ODP αναφέρει Odp.
Μπορεί μια ροή πάντα να διακρίνει μια παλιά παρουσίαση, παρουσίαση διαφάνειας και πρότυπο;
Όχι. Τα PPT, PPS και POT μοιράζονται την ίδια δυαδική μορφή. Διατηρήστε το όνομα αρχείου ή τα μεταδεδομένα υποτύπου χωριστά όταν απαιτείται αυτή η διάκριση.
Ποιο API πρέπει να χρησιμοποιήσω αν η παρουσίαση είναι ήδη φορτωμένη;
Διαβάστε το Presentation::get_SourceFormat. Χρησιμοποιήστε το PresentationFactory::GetPresentationInfo για έλεγχο πριν τη φόρτωση.