Як зберігати презентації в 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 | Так |
| N/A | Ні | |
| HTML | N/A | Ні |
| SVG | N/A | Ні |
| PNG / JPEG | N/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, який не розпізнає.