Come salvare le presentazioni in C++
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx formato usando prs.save(path, SaveFormat::PPTX). Questa guida copre il modello di salvataggio corretto, il salvataggio in un percorso diverso e gli errori comuni relativi al salvataggio.
Guida passo-passo
Passo 1: Compilare e collegare la libreria
git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .Passo 2: Apri o crea una presentazione
Usa l’allocazione sullo stack in modo che il distruttore pulisca automaticamente. Chiama save() prima che l’oggetto esca dallo scope.
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
// Create new
{
asf::Presentation prs;
prs.save("new.pptx", asf::SaveFormat::PPTX);
}
// Open existing
{
asf::Presentation prs("input.pptx");
prs.save("output.pptx", asf::SaveFormat::PPTX);
}
return 0;
}Passo 3: Salva dopo tutte le modifiche
Posiziona il save() chiamata dopo che tutte le modifiche sono complete, ma prima del Presentation esce dallo scope.
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
auto& shape = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 50, 300, 100);
shape.text_frame()->set_text("Hello, World!");
prs.save("output.pptx", asf::SaveFormat::PPTX);
return 0;
}Passo 4: Salva in un percorso diverso
Fornisci un percorso di output diverso per creare un nuovo file senza modificare l’originale:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Il template.pptx file non è modificato; customized.pptx viene creato (o sovrascritto se esiste già).
Passo 5: Verifica l’output
Dopo il salvataggio, verifica che il file esista:
#include <filesystem>
#include <iostream>
auto output = std::filesystem::path("output.pptx");
std::cout << "Saved: " << std::filesystem::exists(output)
<< ", size: " << std::filesystem::file_size(output) << " bytes\n";Formato di salvataggio supportato
| Formato | Valore Enum | Supportato |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Sì |
| N/A | No | |
| HTML | N/A | No |
| SVG | N/A | No |
| PNG / JPEG | N/A | No |
| ODP (OpenDocument) | N/A | No |
È supportato solo PPTX. Tentare di salvare in qualsiasi altro formato genererà un’eccezione.
Problemi comuni e soluzioni
Errore di permesso negato durante la scrittura
Il file di output è aperto in un’altra applicazione (ad esempio, PowerPoint ha il file aperto). Chiudi il file nelle altre applicazioni prima di salvare.
Il file viene creato ma appare vuoto o corrotto
Assicurati prs.save() viene chiamato prima del Presentation l’oggetto viene distrutto. Dopo la distruzione, lo stato interno viene rilasciato e le chiamate successive falliranno o produrranno output non valido.
Eccezione durante il salvataggio
Ciò si verifica quando si tenta di salvare in un formato diverso da PPTX, o quando si utilizza una funzionalità non supportata (come grafici o animazioni) durante il salvataggio.
Domande frequenti
Posso salvare nello stesso file che ho aperto?
Sì. Salvare nello stesso percorso sovrascrive il file originale:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Posso salvare in un buffer di memoria invece che in un file?
Salvataggio diretto su un std::vector<uint8_t> o std::ostream non è supportato nell’API corrente. Salva in un file temporaneo e leggi i byte:
#include <filesystem>
#include <fstream>
#include <vector>
auto tmp = std::filesystem::temp_directory_path() / "temp.pptx";
prs.save(tmp.string(), asf::SaveFormat::PPTX);
std::ifstream in(tmp, std::ios::binary);
std::vector<uint8_t> bytes((std::istreambuf_iterator<char>(in)),
std::istreambuf_iterator<char>());
std::filesystem::remove(tmp);Il salvataggio preserva il contenuto che non ho modificato?
Sì. Le parti XML sconosciute del file originale vengono preservate alla lettera. La libreria serializza solo le parti del modello di documento che comprende e passa attraverso qualsiasi XML non riconosciuto.