Bestäm det ursprungliga presentationsformatet i .NET
Översikt
Efter att en presentation har laddats, läs den skrivskyddade Presentation.SourceFormat egenskapen för att bestämma dess ursprungliga format. Egenskapen är också tillgänglig via IPresentation.SourceFormat. Använd den när efterföljande bearbetning beror på det format som den aktuella instansen laddades från.
Källformatet skiljer sig från det SaveFormat som valts för en utdatafil. Att spara till ett annat format ändrar inte källformatet för den befintliga instansen.
Läs källformatet för en fil
Detta exempel kräver en befintlig sample.pptx-fil. Det laddar filen och väljer en applikationsprocesspolicy med hjälp av Presentation.SourceFormat, snarare än filnamnet. Ändra inmatningssökvägen för att prova andra format. Exemplet skriver ut den valda policyn; ersätt meddelandena med din applikationslogik.
using System;
using Aspose.Slides;
using var presentation = new Presentation("sample.pptx");
switch (presentation.SourceFormat)
{
case SourceFormat.Ppt:
case SourceFormat.Pps:
case SourceFormat.Pot:
Console.WriteLine("Use the legacy PowerPoint processing policy.");
break;
case SourceFormat.Pptx:
Console.WriteLine("Use the standard PPTX processing policy.");
break;
default:
Console.WriteLine($"Use the general policy for {presentation.SourceFormat}.");
break;
}
Känna igen de stödjade värdena
Enumet SourceFormat skiljer mellan följande presentationsformat. Nedanstående filändelser är konventionella, inte en återuppbyggnad av det ursprungliga filnamnet.
| SourceFormat value | Extension | Format |
|---|---|---|
Ppt |
.ppt |
PowerPoint‑presentation 97–2003 |
Pptx |
.pptx |
Office Open XML‑presentation |
Pptm |
.pptm |
Makroaktiverad Office Open XML‑presentation |
Pps |
.pps |
PowerPoint‑bildspel 97–2003 |
Ppsx |
.ppsx |
Office Open XML‑bildspel |
Ppsm |
.ppsm |
Makroaktiverat Office Open XML‑bildspel |
Pot |
.pot |
PowerPoint‑mall 97–2003 |
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 |
Platt XML ODF‑presentation |
Xml |
.xml |
PowerPoint‑XML‑presentation |
Läs källformatet för en ström
Detta exempel kräver en befintlig sample.pps-fil. Att läsa dess byte till en minnesström modellerar indata som mottas utan filnamn, exempelvis ett databasvärde eller en uppladdad byte‑array. Presentation-konstruktorn tar bara emot strömmen.
using System;
using System.IO;
using Aspose.Slides;
var bytes = File.ReadAllBytes("sample.pps");
using var stream = new MemoryStream(bytes);
using var presentation = new Presentation(stream);
Console.WriteLine($"Source format: {presentation.SourceFormat}");
PPT, PPS och POT använder samma underliggande binära format. Vid inläsning via filsökväg kan filändelsen hjälpa till att skilja 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, spara det ursprungliga filnamnet eller subtyp‑metadata separat. En filändelse är en användbar ledtråd för dessa äldre subtyper, 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.LoadFormat när du behöver undersöka en fil innan du laddar dess fullständiga presentationsobjektmodell. Använd Presentation.SourceFormat när instansen redan finns.
Detta exempel kräver sample.pptx och skriver ut Pptx för båda kontrollerna. I produktion, välj det API som passar ditt bearbetningsstadium; en redan inläst presentation behöver inte en andra inspektion enbart för att få sitt källformat.
using System;
using Aspose.Slides;
var path = "sample.pptx";
var information = PresentationFactory.Instance.GetPresentationInfo(path);
Console.WriteLine($"Before loading: {information.LoadFormat}");
using var presentation = new Presentation(path);
Console.WriteLine($"After loading: {presentation.SourceFormat}");
Resultaten har olika enum‑typer: LoadFormat och SourceFormat. Jämför dem inte genom att kasta deras numeriska värden eller anta att varje format har identiska identifieringsresultat. I spar‑och‑öppna‑kontrollen som beskrivs nedan rapporterades PowerPoint XML som LoadFormat.Unknown före inläsning och SourceFormat.Xml efter inläsning.
Håll käll- och utdataformat separata
Detta exempel kräver sample.pptx och skriver converted.odp. Det skriver ut Pptx både före och efter att den ursprungliga instansen sparats. Endast den nya instansen som laddas från ODP‑utdata rapporterar Odp.
using System;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
Console.WriteLine($"Before saving: {presentation.SourceFormat}");
presentation.Save("converted.odp", SaveFormat.Odp);
Console.WriteLine($"After saving: {presentation.SourceFormat}");
using var reopened = new Presentation("converted.odp");
Console.WriteLine($"Reopened output: {reopened.SourceFormat}");
En presentation som skapas från grunden med new Presentation() rapporterar SourceFormat.Pptx. Den har ingen indatafil: detta är standardvärdet för en nyinstans, inte ett bevis på att en PPTX‑fil laddades. Håll reda på om din applikation skapade eller laddade instansen separat om den skillnaden är viktig.
Mappa 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 indatafilens namn. Fallback‑mekanismen undviker att tyst tilldela en filändelse till ett ej känt värde.
using System;
using Aspose.Slides;
using var presentation = new Presentation("sample.pptx");
var extension = presentation.SourceFormat switch
{
SourceFormat.Ppt => ".ppt",
SourceFormat.Pptx => ".pptx",
SourceFormat.Pptm => ".pptm",
SourceFormat.Pps => ".pps",
SourceFormat.Ppsx => ".ppsx",
SourceFormat.Ppsm => ".ppsm",
SourceFormat.Pot => ".pot",
SourceFormat.Potx => ".potx",
SourceFormat.Potm => ".potm",
SourceFormat.Odp => ".odp",
SourceFormat.Otp => ".otp",
SourceFormat.Fodp => ".fodp",
SourceFormat.Xml => ".xml",
_ => null
};
Console.WriteLine(extension ?? "No extension mapping is available.");
Denna mappning konverterar inte en fil eller återställer en äldre PPS/POT‑subtyp som gick förlorad vid ströminläsning. För faktiskt sparande, 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
Detta fristående exempel skapar en presentation och skriver tre filer i arbetskatalogen, vilket 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 byte utan filnamn rapporterar Ppt.
using System;
using System.IO;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var formats = new[] { SaveFormat.Pptx, SaveFormat.Odp, SaveFormat.Pps };
foreach (var format in formats)
{
var path = $"roundtrip.{format.ToString().ToLowerInvariant()}";
presentation.Save(path, format);
using var fromFile = new Presentation(path);
var bytes = File.ReadAllBytes(path);
using var stream = new MemoryStream(bytes);
using var fromStream = new Presentation(stream);
Console.WriteLine($"{format}: file={fromFile.SourceFormat}, stream={fromStream.SourceFormat}");
}
Samma kontroll med alla ovanstående format gav dessa resultat för genererade 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 respektive |
Samma som filsökväg |
| PPS | Pps |
Ppt |
| PPSX, PPSM | Ppsx, Ppsm respektive |
Samma som filsökväg |
| POT | Pot |
Ppt |
| POTX, POTM | Potx, Potm respektive |
Samma som filsökväg |
| ODP, OTP | Odp, Otp respektive |
Samma som filsökväg |
| FODP | Fodp |
Fodp |
| PowerPoint XML | Xml |
Xml |
I dessa kontroller var den enda normaliseringen av källformat PPS/POT till Ppt för namnlösa strömmar. Tabellen beskriver formatidentifiering, inte bevarande av varje presentationsfunktion under konvertering.
Vanliga frågor
Ändrar sparande till ODP källformatet för en presentation som laddats från PPTX?
Nej. Den befintliga instansen rapporterar fortfarande Pptx. En instans som laddas från den sparade ODP‑filen rapporterar Odp.
Kan en ström alltid skilja en äldre presentation, ett bildspel och en mall?
Nej. PPT, PPS och POT delar det binära formatet. Spara filnamn eller subtyp‑metadata separat när den skillnaden krävs.
Vilket API ska jag använda om presentationen redan är inläst?
Läs Presentation.SourceFormat. Använd PresentationFactory.GetPresentationInfo för inspektion före inläsning.