Determinare il Formato Originale della Presentazione in Java
Panoramica
Dopo aver caricato una presentazione, chiama il metodo Presentation.getSourceFormat per determinare il suo formato originale. Il metodo è disponibile anche tramite IPresentation.getSourceFormat. Usalo quando l’elaborazione successiva dipende dal formato da cui è stata caricata l’istanza corrente.
Il formato di origine è distinto dal SaveFormat selezionato per un file di output. Il salvataggio in un altro formato non modifica il formato di origine dell’istanza esistente.
Leggere il Formato di Origine di un File
Questo esempio richiede un file sample.pptx esistente. Carica il file e seleziona una policy di elaborazione dell’applicazione usando Presentation.getSourceFormat, anziché il nome file. Modifica il percorso di input per provare altri formati. L’esempio stampa la policy selezionata; sostituisci i messaggi con la logica della tua applicazione.
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();
}
Riconoscere i Valori Supportati
La classe SourceFormat definisce costanti intere che distinguono i seguenti formati di presentazione. Le estensioni di seguito sono estensioni convenzionali, non una ricostruzione del nome file originale.
| Valore SourceFormat | Estensione | Formato |
|---|---|---|
Ppt |
.ppt |
Presentazione PowerPoint 97–2003 |
Pptx |
.pptx |
Presentazione Office Open XML |
Pptm |
.pptm |
Presentazione Office Open XML con macro |
Pps |
.pps |
Presentazione diapositiva PowerPoint 97–2003 |
Ppsx |
.ppsx |
Presentazione diapositiva Office Open XML |
Ppsm |
.ppsm |
Presentazione diapositiva Office Open XML con macro |
Pot |
.pot |
Modello PowerPoint 97–2003 |
Potx |
.potx |
Modello Office Open XML |
Potm |
.potm |
Modello Office Open XML con macro |
Odp |
.odp |
Presentazione OpenDocument |
Otp |
.otp |
Modello di presentazione OpenDocument |
Fodp |
.fodp |
Presentazione ODF Flat XML |
Xml |
.xml |
Presentazione PowerPoint XML |
Leggere il Formato di Origine da uno Stream
Questo esempio richiede un file sample.pps esistente. Leggere i suoi byte in uno stream di memoria simula un input ricevuto senza nome file, come un valore di database o un array di byte caricato. Il costruttore Presentation riceve solo lo stream.
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 e POT utilizzano lo stesso formato binario di base. Quando si carica tramite percorso file, l’estensione può aiutare a distinguere una presentazione o un modello. Senza un nome file, il contenuto legacy PPS e POT può essere segnalato come SourceFormat.Ppt; l’esempio PPS sopra stampa il valore intero di SourceFormat.Ppt.
Se la tua applicazione deve preservare la distinzione, conserva separatamente il nome file originale o i metadati del sottotipo. Un’estensione è un indizio utile per questi sottotipi legacy, ma non dovrebbe essere l’unico criterio per identificare contenuti di presentazione arbitrari.
Confrontare il Rilevamento Prima e Dopo il Caricamento
Usa PresentationFactory.getPresentationInfo e IPresentationInfo.getLoadFormat quando è necessario ispezionare un file prima di caricare il suo modello completo di oggetti di presentazione. Usa Presentation.getSourceFormat quando l’istanza è già esistente.
Questo esempio richiede sample.pptx e stampa i valori interi di LoadFormat.Pptx e SourceFormat.Pptx, rispettivamente. In produzione, scegli l’API appropriata al tuo stadio di elaborazione; una presentazione già caricata non necessita di una seconda ispezione solo per ottenere il suo formato di origine.
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();
}
I risultati utilizzano costanti provenienti da classi diverse: LoadFormat e SourceFormat. Non confrontare i loro valori numerici né presumere che ogni formato abbia risultati di rilevamento identici. PowerPoint XML può essere segnalato come LoadFormat.Unknown prima del caricamento e SourceFormat.Xml dopo il caricamento.
Mantenere Separati i Formati di Origine e di Output
Questo esempio richiede sample.pptx e scrive converted.odp. Stampa il valore intero di SourceFormat.Pptx sia prima sia dopo il salvataggio dell’istanza originale. Solo la nuova istanza caricata dall’output ODP segnala 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();
}
Una presentazione creata da zero con new Presentation() segnala SourceFormat.Pptx. Non ha un file di input: questo è il valore predefinito per un’istanza appena creata, non prova che sia stato caricato un file PPTX. Tieni traccia separatamente se la tua applicazione ha creato o caricato l’istanza, se tale distinzione è importante.
Mappare un Formato di Origine a un’Estensione
Il seguente esempio richiede sample.pptx. Mappa ogni valore attualmente supportato di SourceFormat a un’estensione convenzionale, senza analizzare il nome file di input. Il fallback evita di assegnare silenziosamente un’estensione a un valore non riconosciuto.
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();
}
Questa mappatura non converte un file né recupera un sottotipo legacy PPS/POT perso durante il caricamento da stream. Per il salvataggio effettivo, seleziona esplicitamente un SaveFormat, o usa la conversione mostrata in Save Presentations in Their Original Format.
Verificare i Formati Salvando e Riaprendo
Questo esempio autoconclusivo crea una presentazione e scrive tre file nella directory di lavoro, sovrascrivendo file con gli stessi nomi. Riapre ciascun output sia tramite percorso sia tramite uno stream di memoria. Per PPTX e ODP, entrambe le vie segnalano il formato salvato. Per PPS, il caricamento per percorso segnala Pps, mentre il caricamento degli stessi byte senza nome file segnala 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();
}
La tabella seguente riassume l’identificazione del formato di origine per presentazioni con estensioni corrispondenti. I nomi indicano costanti; gli esempi Java stampano i loro valori interi:
| Formato salvato | SourceFormat da un percorso file | SourceFormat da uno stream senza nome |
|---|---|---|
| PPT | Ppt |
Ppt |
| PPTX, PPTM | Pptx, Pptm rispettivamente |
Stesso del percorso file |
| PPS | Pps |
Ppt |
| PPSX, PPSM | Ppsx, Ppsm rispettivamente |
Stesso del percorso file |
| POT | Pot |
Ppt |
| POTX, POTM | Potx, Potm rispettivamente |
Stesso del percorso file |
| ODP, OTP | Odp, Otp rispettivamente |
Stesso del percorso file |
| FODP | Fodp |
Fodp |
| PowerPoint XML | Xml |
Xml |
Il contenuto PPS/POT è identificato come Ppt per stream senza nome. La tabella descrive l’identificazione del formato, non la conservazione di tutte le funzionalità della presentazione durante la conversione.
FAQ
Il salvataggio in ODP cambia il formato di origine di una presentazione caricata da PPTX?
No. L’istanza esistente segnala ancora Pptx. Un’istanza caricata dal file ODP salvato segnala Odp.
Uno stream può sempre distinguere una presentazione legacy, una presentazione diapositiva e un modello?
No. PPT, PPS e POT condividono lo stesso formato binario. Conserva separatamente il nome file o i metadati del sottotipo quando è necessario fare questa distinzione.
Quale API devo utilizzare se la presentazione è già caricata?
Leggi Presentation.getSourceFormat. Usa PresentationFactory.getPresentationInfo per l’ispezione prima del caricamento.