Jak vytvořit prezentace v C++

Jak vytvořit prezentace v C++

Aspose.Slides FOSS for C++ vám umožňuje vytvářet prezentace PowerPoint kompletně v C++ bez závislosti na Microsoft Office. Tento průvodce ukazuje, jak vytvořit novou prezentaci, přidat snímky a tvary, formátovat text a uložit výsledek.

Průvodce krok za krokem

Krok 1: Přidejte knihovnu do svého projektu CMake

Použijte CMake FetchContent k integraci knihovny přímo z GitHubu. Je vyžadováno C++20 nebo novější.

cmake_minimum_required(VERSION 3.20)
project(my_slides_app LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include(FetchContent)
FetchContent_Declare(
    aspose_slides_foss
    GIT_REPOSITORY https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
    GIT_TAG main
)
FetchContent_MakeAvailable(aspose_slides_foss)

add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE aspose_slides_foss)

Nejsou vyžadovány žádné další systémové balíčky.


Krok 2: Zahrňte požadované hlavičky

#include <Aspose/Slides/Foss/presentation.h>

Všechny typy jsou umístěny v jmenném prostoru Aspose::Slides::Foss. Pro stručnost níže uvedené příklady používají alias jmenného prostoru:

namespace asf = Aspose::Slides::Foss;

Krok 3: Vytvořit prezentaci

Vytvořte Presentation na zásobníku. Nová prezentace začíná jedním prázdným snímkem.

#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    std::cout << "Slides in new presentation: " << prs.slides().size() << "\n";
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Důležité: Použijte alokaci na zásobníku nebo std::unique_ptr, aby destruktor automaticky uvolnil interní zdroje.


Krok 4: Přístup k snímku

První snímek má index 0. Prázdná prezentace má přesně jeden snímek.

namespace asf = Aspose::Slides::Foss;

asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);

Krok 5: Přidat tvar

Použijte slide.shapes().add_auto_shape() k přidání AutoShape. Parametry jsou (shape_type, x, y, width, height) všechny v bodech (1 bod = 1/72 palce; standardní snímek je 720 × 540 pt).

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    // Rectangle at (50, 50) with 400 wide and 120 tall
    auto& shape = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 400, 120);

    // Set text on the shape's text frame
    shape.text_frame()->set_text("Hello from Aspose.Slides FOSS!");

    prs.save("with-shape.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Krok 6: Uložit prezentaci

Zavolejte prs.save(path, SaveFormat::PPTX) před tím, než Presentation opustí rozsah. PPTX je jediný podporovaný výstupní formát.

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

Soubor je zapisován atomicky; pokud dojde k chybě před tímto voláním, nevytvoří se žádný výstupní soubor.


Kompletní funkční příklad

Následující program vytvoří prezentaci se dvěma snímky, na prvním snímku s tvarem nadpisu a na druhém se tabulkou.

#include <Aspose/Slides/Foss/presentation.h>
#include <vector>
#include <string>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;

    // --- Slide 1: title shape ---
    auto& slide1 = prs.slides()[0];
    auto& title = slide1.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 40, 40, 640, 80);
    title.text_frame()->set_text("Q1 Results: Executive Summary");
    auto& fmt = title.text_frame()->paragraphs()[0].portions()[0].portion_format();
    fmt.set_font_height(32);
    fmt.set_font_bold(asf::NullableBool::TRUE);
    fmt.fill_format().set_fill_type(asf::FillType::SOLID);
    fmt.fill_format().solid_fill_color().set_color(
        asf::Color::from_argb(255, 0, 70, 127));

    // --- Slide 2: table ---
    prs.slides().add_empty_slide(&prs.layout_slides()[0]);
    auto& slide2 = prs.slides()[1];
    std::vector<double> col_w = {200.0, 120.0, 120.0};
    std::vector<double> row_h = {40.0, 40.0, 40.0};
    auto& table = slide2.shapes().add_table(40, 40, col_w, row_h);

    std::vector<std::string> headers = {"Region", "Revenue", "Growth"};
    std::vector<std::vector<std::string>> data = {
        {"North", "$1.2M", "+8%"},
        {"South", "$0.9M", "+4%"},
    };
    for (size_t col = 0; col < headers.size(); ++col) {
        table.rows()[0][col].text_frame()->set_text(headers[col]);
    }
    for (size_t r = 0; r < data.size(); ++r) {
        for (size_t c = 0; c < data[r].size(); ++c) {
            table.rows()[r + 1][c].text_frame()->set_text(data[r][c]);
        }
    }

    prs.save("q1-results.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Běžné problémy a opravy

Segfault nebo double-free při zničení Presentation

Ukládáte odkaz nebo ukazatel na snímek nebo tvar poté, co byl Presentation zničen. Všechny odkazy vrácené slides(), shapes() atd. jsou neplatné, když se spustí destruktor Presentation. Udržujte Presentation naživu po celou dobu, kdy používáte jeho podřízené objekty.

SaveFormat::PPTX is not a function chyba kompilátoru

SaveFormat::PPTX je hodnota výčtu, nikoli funkce. Použijte ji jako prs.save("file.pptx", asf::SaveFormat::PPTX).

Chyba linkeru: nedefinovaná reference na Aspose::Slides::Foss::Presentation

Zajistěte, aby vaše CMakeLists.txt odkazovala na knihovnu s target_link_libraries(my_app PRIVATE aspose_slides_foss).


Často kladené otázky

Jaká je výchozí velikost snímku?

Nový Presentation() vytváří snímky ve standardní velikosti 10 × 7,5 palce (720 × 540 bodů). Změna velikosti snímku zatím není v této edici podporována.

Mohu přidat více než jeden snímek?

Ano. Zavolejte prs.slides().add_empty_slide(&prs.layout_slides()[0]) pro přidání prázdného snímku a přístup k němu podle indexu:

prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];

Mohu otevřít existující soubor a přidat snímky?

Ano:

asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);

Do jakých formátů mohu uložit?

Pouze SaveFormat::PPTX je podporováno. Export do PDF, HTML, SVG nebo obrázků není v této edici k dispozici.


Viz také

 Čeština