Jak zapisywać prezentacje w C++

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

FormatWartość wyliczeniaObsługiwane
PPTX (Office Open XML)SaveFormat::PPTXTak
PDFN/ANie
HTMLN/ANie
SVGN/ANie
PNG / JPEGN/ANie
ODP (OpenDocument)N/ANie

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.


Zobacz także

 Polski