Як зберігати презентації в C++

Як зберігати презентації в C++

Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx формат, використовуючи prs.save(path, SaveFormat::PPTX). Цей посібник охоплює правильний шаблон збереження, збереження в інший шлях і типові помилки, пов’язані зі збереженням.

Покроковий посібник

Крок 1: Зібрати та підключити бібліотеку

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 .

Крок 2: Відкрити або створити презентацію

Використовуйте стекове розміщення, щоб деструктор очищав автоматично. Викличте save() перед тим, як об’єкт вийде з області видимості.

#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;
}

Крок 3: Зберегти після всіх змін

Розмістіть save() виклик після завершення всіх змін, але перед Presentation виходить з області видимості.

#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;
}

Крок 4: Зберегти за іншим шляхом

Передайте інший шлях виводу, щоб створити новий файл без зміни оригіналу:

asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);

Це template.pptx файл не змінено; customized.pptx створюється (або перезаписується, якщо вже існує).


Крок 5: Перевірте результат

Після збереження перевірте, чи файл існує:

#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";

Підтримуваний формат збереження

ФорматЗначення EnumПідтримується
PPTX (Office Open XML)SaveFormat::PPTXТак
PDFN/AНі
HTMLN/AНі
SVGN/AНі
PNG / JPEGN/AНі
ODP (OpenDocument)N/AНі

Підтримується лише PPTX. Спроба зберегти у будь‑якому іншому форматі викличе виключення.


Типові проблеми та їх вирішення

Помилка «Доступ заборонено» під час запису

Вихідний файл відкрито в іншій програмі (наприклад, PowerPoint). Закрийте файл в інших програмах перед збереженням.

Файл створено, але він порожній або пошкоджений

Переконайтеся prs.save() викликається до Presentation об’єкт знищується. Після знищення внутрішній стан звільняється, і подальші виклики завершаться помилкою або дадуть некоректний результат.

Виняток під час збереження

Це трапляється, коли намагаються зберегти у форматі, відмінному від PPTX, або коли під час збереження використовується непідтримувана функція (наприклад, діаграми чи анімації).


Часті запитання

Чи можу я зберегти у той самий файл, який відкрив?

Так. Збереження у той самий шлях перезаписує оригінальний файл:

asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original

Чи можу я зберегти у буфер пам’яті замість файлу?

Збереження безпосередньо у std::vector<uint8_t> або std::ostream не підтримується в поточному API. Збережіть у тимчасовий файл і прочитайте байти:

#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);

Чи зберігає збереження вміст, який я не змінював?

Так. Невідомі XML‑частини з оригінального файлу зберігаються дослівно. Бібліотека лише серіалізує ті частини моделі документа, які вона розуміє, і пропускає будь‑який XML, який не розпізнає.


Див. також

 Українська