Jak zapisywać prezentacje w C++
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx format przy użyciu prs.save(path, SaveFormat::PPTX). Ten przewodnik opisuje prawidłowy wzorzec zapisu, zapisywanie do innej ścieżki oraz typowe błędy związane z zapisem.
Przewodnik krok po kroku
Krok 1: Zbuduj i połącz bibliotekę
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 .Krok 2: Otwórz lub utwórz prezentację
Użyj alokacji na stosie, aby destruktor czyścił automatycznie. Wywołaj save() przed tym, jak obiekt wyjdzie poza zakres.
#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;
}Krok 3: Zapisz po wszystkich modyfikacjach
Umieść save() wywołanie po zakończeniu wszystkich modyfikacji, ale przed Presentation wychodzi poza zakres.
#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;
}Krok 4: Zapisz do innej ścieżki
Podaj inną ścieżkę wyjściową, aby utworzyć nowy plik bez modyfikacji oryginału:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);Ten template.pptx plik nie jest modyfikowany; customized.pptx jest tworzony (lub nadpisywany, jeśli już istnieje).
Krok 5: Zweryfikuj wynik
Po zapisie sprawdź, czy plik istnieje:
#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";Obsługiwany format zapisu
| Format | Wartość wyliczenia | Obsługiwane |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat::PPTX | Tak |
| N/A | Nie | |
| HTML | N/A | Nie |
| SVG | N/A | Nie |
| PNG / JPEG | N/A | Nie |
| ODP (OpenDocument) | N/A | Nie |
Obsługiwany jest wyłącznie format PPTX. Próba zapisu w innym formacie spowoduje wyrzucenie wyjątku.
Typowe problemy i rozwiązania
Błąd odmowy dostępu przy zapisie
Plik wyjściowy jest otwarty w innej aplikacji (np. PowerPoint ma otwarty plik). Zamknij plik w innych aplikacjach przed zapisem.
Plik został utworzony, ale wydaje się pusty lub uszkodzony
Upewnij się prs.save() «<SEG_1»> jest wywoływane przed Presentation Obiekt «<SEG_2»> zostaje zniszczony. Po zniszczeniu wewnętrzny stan jest zwalniany, a kolejne wywołania zakończą się niepowodzeniem lub wygenerują nieprawidłowy wynik.
Wyjątek podczas zapisywania
Dzieje się to, gdy próbuje się zapisać w formacie innym niż PPTX lub używa nieobsługiwanej funkcji (takiej jak wykresy lub animacje) podczas zapisu.
Najczęściej zadawane pytania
Czy mogę zapisać do tego samego pliku, który otworzyłem?
Tak. Zapis do tej samej ścieżki nadpisuje oryginalny plik:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Czy mogę zapisać do bufora w pamięci zamiast do pliku?
«<SEG_3»> Zapisywanie bezpośrednio do std::vector<uint8_t> «<SEG_4»> lub std::ostream «<SEG_5»> nie jest obsługiwane w bieżącym API. Zapisz do pliku tymczasowego i odczytaj bajty:
#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);Czy zapis zachowuje zawartość, której nie zmodyfikowałem?
Tak. Nieznane części XML z oryginalnego pliku są zachowywane wprost. Biblioteka serializuje tylko te części modelu dokumentu, które rozumie, i przepuszcza wszelki XML, którego nie rozpoznaje.