Введение

Aspose.Slides FOSS for C++ (aspose_slides_foss) - бесплатная библиотека C++20 с открытым исходным кодом для создания и манипулирования презентациями PowerPoint программно. Построенная полностью на оригинальном языке C++, без внешних зависимостей времени выполнения, выходящих за рамки CMake 3.20 +, она дает разработчикам полный контроль над файлами PPTX без необходимости использовать Microsoft Office или какое-либо собственное программное обеспечение.

Библиотека выпускается под лицензией MIT, что делает ее подходящей как для коммерческих, так и некоммерческих проектов. Общественный API находится в Aspose::Slides::Foss namespace и предоставляет богатую объектную модель, охватывающую презентации, слайды, формы, таблицы, текстовые рамки, свойства документов, комментарии и экспорт PPTX.

В этом посте мы рассмотрим основные API-поверхности: классы и методы, которые вы будете использовать чаще всего при создании, форматировании и сохранении презентаций.


Что входит в него?

Презентация и управление слайдами

В связи с этим Presentation создание нового экземпляра дает вам слайд по умолчанию, который немедленно готов к содержанию. Вы получаете доступ к слайдам через SlideCollection возвращенный slides(), который поддерживает индексированный доступ, итерацию, удаление и переупорядочение.

#include <Aspose/Slides/Foss/presentation.h>
using namespace Aspose::Slides::Foss;

Presentation pres;
auto& slide = pres.slides()[0]; // first slide
// Work with the slide...
pres.save("output.pptx", SaveFormat::PPTX);

Формы и автоформы

Каждый слайд показывает ShapeCollection через его shapes() Коллекция предоставляет заводские методы добавления различных типов форм: add_auto_shape для стандартных геометрических форм (простоугольники, эллипсы, треуглые), add_connector для соединителей линий, add_table для таблиц, и add_picture_frame для изображений.

auto& slide = pres.slides()[0];

// Add a rectangle
auto& rect = slide.shapes().add_auto_shape(
    ShapeType::RECTANGLE, 50, 50, 300, 100);

// Add an ellipse
auto& ellipse = slide.shapes().add_auto_shape(
    ShapeType::ELLIPSE, 400, 50, 150, 150);

// Add a connector between shapes
auto& conn = slide.shapes().add_connector(
    ShapeType::BENT_CONNECTOR3, 0, 0, 1, 1);

В связи с этим ShapeCollection также поддерживает size(), remove(), remove_at(), reorder(), index_of(), и clear() для управления формой после создания.

Форматирование текста и абзацев

Формы могут хранить текст через: TextFrame.Используйте . add_text_frame() в отношении AutoShape присоединить текст или получить доступ к существующему кадру через text_frame().Текст разделен на абзацы, каждый из которых содержит одну или несколько частей. BasePortionFormat класс раскрывает свойства стилизации шрифта, включая толстый, курсивный, подчеркнутый тип, капитализацию, прокладку и цвет шрифта.

auto& shape = pres.slides()[0].shapes().add_auto_shape(
    ShapeType::RECTANGLE, 50, 50, 300, 100, false);
shape.add_text_frame("Hello, world!");
auto text = shape.text_frame()->text(); // "Hello, world!"

Наполнение, градиент и визуальные эффекты

Каждая форма обеспечивает FillFormat доступно через: fill_format().Вы можете установить твердые заполнения, градиентные заполнители или шаблоны заполнителей через set_fill_type() Склона заполнения конфигурируется через GradientFormat объект, который поддерживает линейные углы, градиент формы и цвет останавливается через GradientStopCollection.

auto& shape = slide.shapes().add_auto_shape(
    ShapeType::RECTANGLE, 50, 50, 300, 150);
shape.fill_format().set_fill_type(FillType::GRADIENT);
auto& gf = shape.fill_format().gradient_format();
gf.set_gradient_shape(GradientShape::LINEAR);
gf.set_linear_gradient_angle(45);
gf.gradient_stops().add(0.0f, Color::blue);
gf.gradient_stops().add(1.0f, Color::red);

В связи с этим EffectFormat класс (доступ через effect_format()) добавляет эффект яркости, внешней тени и мягких краев.enable_glow_effect(), enable_outer_shadow_effect(), enable_soft_edge_effect()) и настраивается через возвращенный объект.

Таблицы

Таблицы создаются с помощью: add_table() Вы предоставляете ширины столбцов и высоты строк как векторы. Table объекты экспонируют rows() и в том числе: columns() коллекции и индивидуальные Cell объекты поддерживают текст через TextFrame.

std::vector<double> col_widths = {100, 150, 200};
std::vector<double> row_heights = {40, 40, 40};
auto& table = slide.shapes().add_table(
    50, 50, col_widths, row_heights);
// table.rows().size() == 3
// table.columns().size() == 3

Свойства и комментарии документа

В связи с этим DocumentProperties class позволяет задавать метаданные, такие как название, автор, предмет, ключевые слова, категория, номер пересмотра и временной отметка. Доступ к нему через объект презентации.

Комментарии управляются через: CommentAuthorCollection и в том числе: CommentCollection.- Ты добавляешь авторов с … add_author(), а затем прикрепите комментарии к конкретным слайдам на определенных координатах.

Presentation pres;
auto& author = pres.comment_authors().add_author("Alice", "A");
auto& slide = pres.slides()[0];
auto& comment = author.comments().add_comment(
    "Review note", slide, PointF(2.0f, 3.0f), now);

Быстрый старт .

Строительство с источника

Библиотека требует CMake 3.20+ и компилятора, поддерживающего C++20. Клонировать репозиторий и создавать:

git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

Минимальный пример

#include <Aspose/Slides/Foss/presentation.h>
using namespace Aspose::Slides::Foss;

int main() {
    Presentation pres;
    auto& slide = pres.slides()[0];

    // Add a shape with text
    auto& shape = slide.shapes().add_auto_shape(
        ShapeType::RECTANGLE, 50, 50, 300, 100, false);
    shape.add_text_frame("Hello from Aspose.Slides FOSS!");

    // Apply a solid fill
    shape.fill_format().set_fill_type(FillType::SOLID);
    shape.fill_format().solid_fill_color().set_color(Color::blue);

    // Save
    pres.save("hello.pptx", SaveFormat::PPTX);
    return 0;
}

Поддерживаемые форматы

В связи с этим SaveFormat enum определяет все экспортные цели. В исходном коде подтверждены следующие форматы:

Формат:РасширениеЧитайте .Написать .
PPTX.pptx (англ.)Да , я знаю .
PPT.pptПланируется
PPSX.ppsx (полное название)Планируется
PPTM.pptmПланируется
PPSM.ppsm - это имя.Планируется
POTX.- Покс .Планируется
POTM.- Поп.Планируется
POT. горшокПланируется
PPS.pps (почти)Планируется
ODP.odp (полное название)Планируется
OTP.отпПланируется
FODP.fodp (по-английски)Планируется
PDF.pdf - Справочник по образованиюПланируется
XPS.xpsПланируется
HTML.html - этоПланируется
HTML5.html - этоПланируется
TIFF.- Тыф .Планируется
GIF.gif - это …Планируется
SWF.swf (свф)Планируется
MD.mdПланируется
XML.xml (всего в строке)Планируется

Примечание: В настоящее время реализуется только экспорт PPTX. SaveFormat В настоящее время существуют несколько вариантов, которые могут быть использованы для перспективной совместимости, но еще не функциональны. save() метод всегда производит выход PPTX независимо от параметра формата.


Открытый исходный код и лицензирование

Aspose.Slides FOSS for C++ is released under the MIT license. You can use it freely in personal projects, commercial applications, and redistributed libraries. There are no API keys, watermarks, or usage limits. The full source code is available on GitHub at https://github.com/aspose-slides-foss/Aspose.Slides FOSS-for-Cpp.


Начинать

Готовы ли вы интегрировать Aspose.Slides FOSS в свой проект C++? Вот ключевые ресурсы:

  • Документация: https://docs.aspose.org/slides/cpp/ для руководств разработчиков, учебных пособий и концептуальных обзоров.
  • База знаний: https://kb.aspose.org/slides/cpp/ для часто задаваемых вопросов и статей, содержащих инструкции по выполнению общих задач.
  • Ссылка на API: https://reference.aspose.org/slides/cpp/ для классификации по классам полной публичной API.