Wprowadzenie

Aspose.Slides FOSS dla C++ (aspose_slides_foss) jest darmową, otwarto-źródłową biblioteką C++20 do programowego tworzenia i manipulacji prezentacjami PowerPoint. Zbudowana w całości w natywnym C++ bez zewnętrznych zależności uruchomieniowych poza CMake 3.20+, daje programistom pełną kontrolę nad plikami PPTX bez konieczności posiadania Microsoft Office ani innego oprogramowania własnościowego.

Biblioteka jest udostępniona na licencji MIT, co czyni ją odpowiednią zarówno dla projektów komercyjnych, jak i niekomercyjnych. Publiczny API znajduje się w przestrzeni nazw Aspose::Slides::Foss i oferuje bogaty model obiektowy obejmujący prezentacje, slajdy, kształty, tabele, ramki tekstowe, właściwości dokumentu, komentarze oraz eksport do PPTX.

Ten post przechodzi przez podstawowy interfejs API: klasy i metody, które będziesz używać najczęściej przy tworzeniu, formatowaniu i zapisywaniu prezentacji.


Co zawiera

Zarządzanie prezentacjami i slajdami

Klasa Presentation jest punktem wejścia. Utworzenie nowej instancji daje Ci domyślny slajd, który jest od razu gotowy na zawartość. Dostęp do slajdów uzyskujesz poprzez SlideCollection zwracany przez slides(), który obsługuje dostęp indeksowy, iterację, usuwanie i zmianę kolejności.

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

Kształty i AutoShapes

Każdy slajd udostępnia ShapeCollection poprzez dostęp shapes(). Kolekcja zapewnia metody fabryczne do dodawania różnych typów kształtów: add_auto_shape dla standardowych kształtów geometrycznych (prostokąty, elipsy, trójkąty), add_connector dla łączników linii, add_table dla tabel oraz add_picture_frame dla obrazów.

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

Klasa ShapeCollection obsługuje również size(), remove(), remove_at(), reorder(), index_of() i clear() do zarządzania kształtami po ich utworzeniu.

Formatowanie tekstu i akapitów

Kształty mogą zawierać tekst za pomocą TextFrame. Użyj add_text_frame() na AutoShape, aby dołączyć treść tekstową, lub uzyskaj dostęp do istniejącej ramki poprzez text_frame(). Tekst jest organizowany w akapity, z których każdy zawiera jedną lub więcej części. Klasa BasePortionFormat udostępnia właściwości formatowania czcionki, w tym pogrubienie, kursywę, rodzaj podkreślenia, kapitalizację, przekreślenie i kolor czcionki.

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!"

Wypełnienie, gradient i efekty wizualne

Każdy kształt udostępnia FillFormat dostępny poprzez fill_format(). Możesz ustawić wypełnienia jednolite, gradientowe lub wzorcowe za pomocą metody set_fill_type(). Wypełnienia gradientowe konfiguruje się za pomocą obiektu GradientFormat, który obsługuje kąty liniowe, kształt gradientu i przystanki kolorów poprzez 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);

Klasa EffectFormat (dostępna poprzez effect_format()) dodaje efekty poświaty, zewnętrznego cienia i miękkich krawędzi. Każdy efekt jest włączany dedykowaną metodą (enable_glow_effect(), enable_outer_shadow_effect(), enable_soft_edge_effect()) i konfigurowany za pomocą zwróconego obiektu.

Tabele

Tabele są tworzone za pomocą add_table() w kolekcji kształtów. Podajesz szerokości kolumn i wysokości wierszy jako wektory. Zwrócony obiekt Table udostępnia kolekcje rows() i columns(), a poszczególne obiekty Cell obsługują zawartość tekstową poprzez 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

Właściwości dokumentu i komentarze

Klasa DocumentProperties umożliwia ustawienie metadanych, takich jak tytuł, autor, temat, słowa kluczowe, kategoria, numer wersji i znaczniki czasu. Uzyskaj do niej dostęp za pośrednictwem obiektu prezentacji.

Komentarze są zarządzane za pośrednictwem CommentAuthorCollection i CommentCollection. Dodajesz autorów za pomocą add_author(), a następnie dołączasz komentarze do konkretnych slajdów w określonych współrzędnych.

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

Szybki start

Budowanie ze źródeł

Biblioteka wymaga CMake 3.20+ oraz kompilatora obsługującego C++20. Sklonuj repozytorium i zbuduj:

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

Minimalny przykład

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

Obsługiwane formaty

Wyliczenie SaveFormat definiuje wszystkie cele eksportu. Następujące formaty są potwierdzone w kodzie źródłowym:

FormatRozszerzenieOdczytZapis
PPTX.pptx–Tak
PPT.ppt–Planned
PPSX.ppsx–Planned
PPTM.pptm–Planned
PPSM.ppsm–Planned
POTX.potx–Planned
POTM.potm–Planned
POT.pot–Planned
PPS.pps–Planned
ODP.odp–Planned
OTP.otp–Planned
FODP.fodp–Planned
PDF.pdf–Planned
XPS.xps–Planned
HTML.html–Planned
HTML5.html–Planned
TIFF.tiff–Planned
GIF.gif–Planned
SWF.swf–Planned
MD.md–Planned
XML.xml–Planned

Uwaga: Obecnie zaimplementowano tylko eksport PPTX. Inne wartości formatu istnieją w SaveFormat enumeracji w celu zachowania kompatybilności w przyszłości, ale nie są jeszcze funkcjonalne. Metoda save() zawsze generuje wyjście PPTX niezależnie od parametru formatu.


Open Source i licencjonowanie

Aspose.Slides FOSS dla C++ jest wydany na licencji MIT. Możesz go używać swobodnie w projektach prywatnych, aplikacjach komercyjnych i rozpowszechnianych bibliotekach. Nie ma API kluczy, znaków wodnych ani limitów użytkowania. Pełny kod źródłowy jest dostępny na GitHub pod adresem https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.


Rozpoczęcie

Gotowy, aby zintegrować Aspose.Slides FOSS ze swoim projektem C++? Oto kluczowe zasoby:

Powiązane zasoby