Az eredeti prezentáció formátumának meghatározása C++-ban
Áttekintés
Prezentáció betöltése után hívja meg a Presentation::get_SourceFormat metódust az eredeti formátum meghatározásához. A metódus az IPresentation::get_SourceFormat útján is elérhető. Használja, ha a későbbi feldolgozás a példány betöltésének formátumától függ.
A forrásformátum eltér a kimeneti fájlhoz kiválasztott SaveFormat‑tól. Más formátumba mentés nem változtatja meg a meglévő példány forrásformátumát.
Olvassa be egy fájl forrásformátumát
Ez a példa egy meglévő sample.pptx fájlt igényel. Betölti a fájlt, és a fájlnév helyett a Presentation::get_SourceFormat használatával választja ki az alkalmazás feldolgozási szabályát. A bemeneti útvonalat módosítva próbáljon ki más formátumokat. A példa kiírja a kiválasztott szabályt; cserélje le az üzeneteket saját alkalmazáslogikájára.
#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;
}
Ismerje fel a támogatott értékeket
A SourceFormat felsorolás a következő prezentációs formátumokat különbözteti meg. Az alábbi kiterjesztések konvencionálisak, nem az eredeti fájlnév újjáépítése.
| SourceFormat érték | Kiterjesztés | Formátum |
|---|---|---|
Ppt |
.ppt |
PowerPoint 97–2003 bemutató |
Pptx |
.pptx |
Office Open XML bemutató |
Pptm |
.pptm |
Makróval 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óval ellátott Office Open XML diavetítés |
Pot |
.pot |
PowerPoint 97–2003 sablon |
Potx |
.potx |
Office Open XML sablon |
Potm |
.potm |
Makróval 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ó |
Olvassa be egy stream forrásformátumát
Ez a példa egy meglévő sample.pps fájlt igényel. A fájl bájtjainak memóriastreambe olvasása olyan bemenetet szimulál, amely fájlnév nélkül érkezik, például adatbázisérték vagy feltöltött bájt tömb. A Presentation konstruktor csak a stream-et kapja.
#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())));
A PPT, PPS és POT ugyanazt az alapvető bináris formátumot használja. Fájlúton történő betöltéskor 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 a SourceFormat::Ppt‑ként jelentkezhet; a fentebb szereplő PPS példa a Ppt‑t jelzi.
Ha alkalmazásának meg kell őriznie a különbséget, tartsa meg az eredeti fájlnevet vagy az alttípus metaadatait külön. A kiterjesztés hasznos támpont lehet ezekhez a régi alttípusokhoz, de nem lehet az egyetlen alapja a tetszőleges prezentációs tartalom azonosításának.
Hasonlítsa össze a felismerést betöltés előtt és után
Használja a PresentationFactory::GetPresentationInfo és az IPresentationInfo::get_LoadFormat metódusokat, amikor egy fájlt a teljes prezentációs objektummodell betöltése előtt kell ellenőrizni. Használja a Presentation::get_SourceFormat metódust, ha a példány már létezik.
Ez a példa sample.pptx‑et igényel, és mindkét ellenőrzésnél Pptx‑et ír ki. Éles környezetben válassza a feldolgozási szakasznak megfelelő API‑t; egy már betöltött prezentációnak nincs szüksége második ellenőrzésre csak a forrásformátum lekérdezéséhez.
#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())));
Az eredmények különböző enumerációs típusúak: LoadFormat és SourceFormat. Ne hasonlítsa őket a numerikus értékek átalakításával, és ne feltételezze, hogy minden formátumnak azonos felismerési eredménye van. 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. Mind a mentés előtt, mind után Pptx‑et ír ki az eredeti példányból. Csak az ODP kimenetből betöltött új példány jelzi az Odp‑t.
#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())));
A MakeObject
Térképezze a forrásformátumot egy kiterjesztésre
A következő példa sample.pptx‑et igényel. Minden jelenleg támogatott SourceFormat értéket egy konvencionális kiterjesztésre térképez, a bemeneti fájlnév elemzése nélkül. A tartalék elkerüli, hogy egy fel nem ismerett értékhez csendben kiterjesztést rendeljünk.
#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);
Ez a térképezés nem konvertál fájlt, vagy nem állítja vissza a stream betöltése közben elveszett régi PPS/POT alttípust. Valódi mentéshez válasszon egy SaveFormat‑ot kifejezetten, vagy használja a Prezentációk mentése eredeti formátumban átváltást.
Ellenőrizze a formátumokat 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. Minden kimenetet újból megnyit fájlúton és memóriastreamen keresztül is. PPTX és ODP esetén mindkét mód a mentett formátumot jelzi. PPS esetén a fájlúton történő betöltés Pps‑t, míg a fájlnév nélküli bájtok betöltése Ppt‑t ad.
#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())));
}
Az alábbi táblázat összegzi a forrásformátum azonosítást a megfelelő kiterjesztésű prezentációk esetén:
| Mentett formátum | SourceFormat fájlúton | SourceFormat névtelen streame |
|---|---|---|
| PPT | Ppt |
Ppt |
| PPTX, PPTM | Pptx, Pptm respectively |
Same as file path |
| PPS | Pps |
Ppt |
| PPSX, PPSM | Ppsx, Ppsm respectively |
Same as file path |
| POT | Pot |
Ppt |
| POTX, POTM | Potx, Potm respectively |
Same as file path |
| ODP, OTP | Odp, Otp respectively |
Same as file path |
| FODP | Fodp |
Fodp |
| PowerPoint XML | Xml |
Xml |
A régi PPS/POT tartalom a névtelen streameknél Ppt‑re normalizálódik. A táblázat a formátum azonosítását írja le, nem pedig minden prezentációs jellemző megőrzését az átalakítás során.
GYIK
Megváltozik-e a forrásformátum, ha egy PPTX‑ből betöltött prezentációt ODP‑be mentünk?
Nem. A meglévő példány továbbra is Pptx‑et jelent. A mentett ODP fájlból betöltött példány Odp‑t jelent.
Képes egy stream mindig megkü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 használja. Ha a különbség fontos, tartsa meg a fájlnevet vagy az alttípus metaadatait külön.
Melyik API‑t kell használni, ha a prezentáció már be van töltve?
Olvassa a Presentation::get_SourceFormat metódust. Használja a PresentationFactory::GetPresentationInfo‑t a betöltés előtti ellenőrzéshez.