Як завантажити презентації у C++
Aspose.Slides FOSS for C++ дозволяє відкривати будь‑який .pptx файл, переглядати його вміст і або зберігати його назад у 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: Відкрити існуючу презентацію
Передайте шлях до файлу конструктору Presentation. Деструктор виконує очищення.
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("input.pptx");
std::cout << "Slide count: " << prs.slides().size() << "\n";
prs.save("output.pptx", asf::SaveFormat::PPTX);
return 0;
}Невідомі XML‑частини у вихідному файлі зберігаються дослівно: бібліотека ніколи не видаляє вміст, який вона ще не розуміє.
Крок 3: Перевірити слайди
Ітеруйте всі слайди та виведіть кількість їхніх фігур:
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("deck.pptx");
for (size_t i = 0; i < prs.slides().size(); ++i) {
auto& slide = prs.slides()[i];
std::cout << "Slide " << i << ": "
<< slide.shapes().size() << " shapes\n";
}
return 0;
}Крок 4: Зчитати текст форми
Перебирайте форми та зчитайте текст із форм, які мають TextFrame:
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("deck.pptx");
for (size_t i = 0; i < prs.slides().size(); ++i) {
auto& slide = prs.slides()[i];
for (size_t j = 0; j < slide.shapes().size(); ++j) {
auto& shape = slide.shapes()[j];
if (shape.has_text_frame()) {
auto text = shape.text_frame()->text();
if (!text.empty()) {
std::cout << " Shape text: " << text << "\n";
}
}
}
}
return 0;
}Крок 5: Читання властивостей документа
Отримати доступ до основних властивостей документа з prs.document_properties():
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("deck.pptx");
auto& props = prs.document_properties();
std::cout << "Title: " << props.title() << "\n";
std::cout << "Author: " << props.author() << "\n";
std::cout << "Subject: " << props.subject() << "\n";
return 0;
}Крок 6: Збереження у зворотному циклі
Після перевірки або зміни презентації збережіть її назад у формат PPTX:
prs.save("output.pptx", asf::SaveFormat::PPTX);Збереження за іншим шляхом створює новий файл. Збереження за тим же шляхом перезаписує оригінал.
Поширені проблеми та виправлення
Файл не знайдено або не вдається відкрити
Перевірте, чи правильний шлях до файлу .pptx відносно робочого каталогу. Використовуйте std::filesystem::path для надійного формування шляху:
#include <filesystem>
auto path = std::filesystem::path(__FILE__).parent_path() / "assets" / "deck.pptx";
asf::Presentation prs(path.string());Виняток: Формат файлу не підтримується
Бібліотека підтримує лише .pptx (Office Open XML). Файли старого формату .ppt (бінарний PowerPoint 97-2003) не підтримуються.
Shape не має text_frame
Деякі форми (Connectors, PictureFrames, GroupShapes) не мають текстового кадру. Перевіряйте за допомогою shape.has_text_frame() перед доступом до тексту.
Поширені запитання
Чи зберігає завантаження весь оригінальний вміст?
Так. Невідомі частини XML зберігаються дослівно під час збереження у режимі round‑trip. Бібліотека серіалізує лише ті частини моделі документа, які вона розуміє, і пропускає будь‑який XML, який вона не розпізнає.
Чи можу я завантажити PPTX, захищений паролем?
Презентації, захищені паролем (зашифровані), не підтримуються у цьому випуску.
Чи можу я витягнути вбудовані зображення?
Отримайте доступ до колекції зображень: prs.images() повертає ImageCollection. Кожне зображення має методи width(), height() та binary_data() для читання необроблених даних зображення.
Чи підтримується завантаження з буфера в пам’яті?
Завантаження з std::vector<uint8_t> або std::istream не доступне у поточному API. Спочатку запишіть байти у тимчасовий файл, а потім передайте шлях до конструктора Presentation.