Bestäm det ursprungliga presentationsformatet i C++
Översikt
Efter att ha läst in en presentation, anropa Presentation::get_SourceFormat för att avgöra dess ursprungliga format. Metoden är också tillgänglig via IPresentation::get_SourceFormat. Använd den när efterföljande bearbetning beror på formatet som den aktuella instansen lästes in från.
Källformatet är annorlunda än det SaveFormat som valts för en utdatasfil. Att spara till ett annat format ändrar inte källformatet för den befintliga instansen.
Läs källformatet för en fil
Det här exemplet kräver en befintlig fil sample.pptx. Den laddar filen och väljer en applikationsbearbetningspolicy med Presentation::get_SourceFormat, istället för filnamnet. Ändra inmatningssökvägen för att prova andra format. Exemplet skriver ut den valda policyn; ersätt meddelandena med din applikationslogik.
#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;
}
Känna igen de stödjade värdena
Uppräkningen [SourceFormat] särskiljer följande presentationsformat. Följande filändelser är konventionella, inte en återuppbyggnad av det ursprungliga filnamnet.
| SourceFormat‑värde | Filändelse | Format |
|---|---|---|
Ppt |
.ppt |
PowerPoint 97–2003‑presentation |
Pptx |
.pptx |
Office Open XML‑presentation |
Pptm |
.pptm |
Makroaktiverad Office Open XML‑presentation |
Pps |
.pps |
PowerPoint 97–2003‑bildspel |
Ppsx |
.ppsx |
Office Open XML‑bildspel |
Ppsm |
.ppsm |
Makroaktiverat Office Open XML‑bildspel |
Pot |
.pot |
PowerPoint 97–2003‑mall |
Potx |
.potx |
Office Open XML‑mall |
Potm |
.potm |
Makroaktiverad Office Open XML‑mall |
Odp |
.odp |
OpenDocument‑presentation |
Otp |
.otp |
OpenDocument‑mall för presentation |
Fodp |
.fodp |
Flat XML ODF‑presentation |
Xml |
.xml |
PowerPoint XML‑presentation |
Läs källformatet för en ström
Det här exemplet kräver en befintlig fil sample.pps. Att läsa dess bytes in i en minnesström modellerar indata som mottagits utan filnamn, t.ex. ett databasvärde eller en uppladdad byte‑array. Konstruktorn för Presentation tar endast emot strömmen.
#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 och POT använder samma underliggande binära format. När du laddar via filväg kan filändelsen hjälpa till att skilja på ett bildspel eller en mall. Utan ett filnamn kan äldre PPS‑ och POT‑innehåll rapporteras som SourceFormat::Ppt; PPS‑exemplet ovan rapporterar Ppt.
Om din applikation måste bevara skillnaden, behåll det ursprungliga filnamnet eller metadata för undertyp separat. En filändelse är en användbar ledtråd för dessa äldre undertyper, men bör inte vara det enda underlaget för att identifiera godtyckligt presentationsinnehåll.
Jämför identifiering före och efter inläsning
Använd PresentationFactory::GetPresentationInfo och IPresentationInfo::get_LoadFormat när du behöver inspektera en fil innan du läser in hela presentationsobjektmodellen. Använd Presentation::get_SourceFormat när instansen redan finns.
Det här exemplet kräver sample.pptx och skriver ut Pptx för båda kontrollerna. I produktion, välj det API som passar din bearbetningsstadium; en redan inläst presentation behöver inte en andra inspektion enbart för att få dess källformat.
#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())));
Resultaten har olika uppräkningstyper: LoadFormat och SourceFormat. Jämför dem inte genom att kasta deras numeriska värden eller anta att varje format har identiska identifieringsresultat. PowerPoint XML kan rapporteras som LoadFormat::Unknown före inläsning och SourceFormat::Xml efter inläsning.
Håll käll- och utdataformat separata
Det här exemplet kräver sample.pptx och skriver converted.odp. Det skriver ut Pptx både före och efter att ha sparat den ursprungliga instansen. Endast den nya instansen som läses in från ODP‑utdata rapporterar 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())));
En presentation som skapas från grunden med MakeObject<Presentation>() rapporterar SourceFormat::Pptx. Den har ingen indatafil: detta är standardvärdet för en nyinstans, inte bevis på att en PPTX‑fil laddades. Följ om din applikation skapade eller läste in instansen separat om den skillnaden är viktig.
Karta ett källformat till en filändelse
Följande exempel kräver sample.pptx. Det mappar varje för närvarande stödjad [SourceFormat]-värde till en konventionell filändelse, utan att analysera indatafilnamnet. Fallback‑metoden undviker att tyst tilldela en filändelse till ett okänt värde.
#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);
Denna mappning konverterar inte en fil eller återställer en äldre PPS‑/POT‑undertyp som förlorats vid strömläsning. För faktisk sparning, välj ett [SaveFormat] explicit, eller använd konverteringen som visas i Save Presentations in Their Original Format.
Verifiera format genom att spara och öppna igen
Det här fristående exemplet skapar en presentation och skriver tre filer i arbetskatalogen, och skriver över filer med samma namn. Det öppnar varje utdata både via sökväg och genom en minnesström. För PPTX och ODP rapporterar båda vägarna det sparade formatet. För PPS rapporterar inläsning via sökväg Pps, medan inläsning av samma bytes utan ett filnamn rapporterar 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())));
}
Följande tabell sammanfattar identifiering av källformat för presentationer med matchande filändelser:
| Sparat format | SourceFormat från en filsökväg | SourceFormat från en namnlös ström |
|---|---|---|
| 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 |
Äldre PPS‑/POT‑innehåll normaliseras till Ppt för namnlösa strömmar. Tabellen beskriver formatidentifiering, inte bevarande av varje presentationsfunktion under konvertering.
FAQ
Ändrar sparning till ODP källformatet för en presentation som laddats från PPTX?
Nej. Den befintliga instansen rapporterar fortfarande Pptx. En instans som läses in från den sparade ODP‑filen rapporterar Odp.
Kan en ström alltid skilja på en äldre presentation, bildspel och mall?
Nej. PPT, PPS och POT delar det binära formatet. Behåll filnamn eller metadata för undertyp separat när den skillnaden krävs.
Vilket API bör jag använda om presentationen redan är inläst?
Läs Presentation::get_SourceFormat. Använd PresentationFactory::GetPresentationInfo för inspektion innan inläsning.