Jak zapisać prezentacje w C++
Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx Format używający prs.save(path, SaveFormat::PPTX).Ten przewodnik obejmuje poprawny wzór oszczędności, osłabienie na innej ścieżce i powszechne błędy związane z osadzeniem.
Przewodnik krok po kroku
Krok 1: Zbuduj i łączy 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 utworz prezentację
Użyj przydziału stack, aby destruktor automatycznie się wyczyścił. save() przed obiektem, który wychodzi z zakresu.
#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 zmianach
Miejsce The save() Wszelkie zmiany są już zakończone, ale przed rozpoczęciem Presentation Wyjeżdża z zakresu.
#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: Uszczędzaj na inny sposób
Przejdź inną drogę wyjścia, aby utworzyć nowy plik bez modyfikacji oryginału:
asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);i The template.pptx plik nie jest zmieniony; customized.pptx Jest stworzony (lub jest nadpisany, jeśli istnieje).
Krok 5: Sprawdź wyjście
Po zapisaniu, 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";Wspierane formaty Save
| Formatowanie | Enum wartości | Wspierane |
|---|---|---|
| PPTX (Office Open XML) – otwarte usługi w języku angielskim | SaveFormat::PPTX | Tak |
| N/A | Nie | |
| HTML | N/A | Nie |
| SVG | N/A | Nie |
| PNG / JPEG | N/A | Nie |
| ODP (OpenDocument) – dokumenty otwarte | N/A | Nie |
Tylko PPTX jest obsługiwany. starając się zapisać w dowolnym innym formacie, wyrzuci wyjątek.
Wspólne problemy i rozwiązania
Pozwolenie na odrzucone błędy w pisaniu
Plik wyjściowy jest otwarty w innej aplikacji (np. PowerPoint ma otworzony plik).
Plik jest utworzony, ale wydaje się puste lub zepsute.
Bezpieczeństwo prs.save() Został wezwany przed Presentation Po zniszczeniu, wewnętrzny stan jest uwalniany i następne połączenia nie powiodą się lub wytwarzają nieprawidłowy wynik.
Wyjątek w przypadku oszczędności
Dzieje się tak, gdy próbujesz zapisać format inny niż PPTX lub podczas przechowywania używając nieopartej funkcji (takich jak wykresy lub animacje).
Często zadawane pytania
Czy mogę przechowywać na tym samym pliku, który otworzyłem?
Tak. oszczędzanie na tej samej drodze przekracza oryginalny plik:
asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original
Czy mogę przechowywać pamięć w buferze zamiast pliku?
Oszczędność bezpośrednio do A std::vector<uint8_t> lub std::ostream nie jest obsługiwany w bieżącym API. Zapisz do pliku tymczasowego i przeczytaj 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 oszczędność zachowuje treść, której nie zmieniłem?
Nieznane części XML z oryginalnego pliku są zachowane w wersji słownej. biblioteka serializuje tylko te części modelu dokumentu, który rozumie i przechodzi przez dowolny XML, którego nie rozpoznaje.