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

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

Aspose.Slides FOSS for C++ lets you open any .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: Читання тексту форми

Перебирайте форми та читайте текст з форм, які мають a 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: Збереження у режимі round‑trip

Після перегляду або зміни презентації збережіть її назад у PPTX:

prs.save("output.pptx", asf::SaveFormat::PPTX);

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


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

Файл не знайдено або не вдається відкрити

Перевірте, що шлях до the .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) лише. Заcтарілі .ppt (binary PowerPoint 97-2003) файли не підтримуються.

Фігура не має text_frame

Деякі форми (Connectors, PictureFrames, GroupShapes) не мають текстового кадру. Захищайте за допомогою shape.has_text_frame() перед доступом до тексту.


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

Чи зберігає завантаження весь оригінальний вміст?

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

Чи можу я завантажити PPTX, захищений паролем?

Презентації, захищені паролем (зашифровані), не підтримуються в цій версії.

Чи можу я витягти вбудовані зображення?

Отримайте доступ до колекції зображень: prs.images() повертає ImageCollection. Кожне зображення має a width(), height(), і binary_data() метод читання необроблених даних зображення.

Чи підтримується завантаження з буфера в пам’яті?

Завантаження з a std::vector<uint8_t> або std::istream не доступний у поточному API. Запишіть байти у тимчасовий файл спочатку, а потім передайте шлях до Presentation конструктора.


Див. також

 Українська