Správa tvarů v prezentaci v C++

Overview

Tento článek vysvětluje, jak pracovat s tvary v prezentacích pomocí Aspose.Slides. Ukazuje, jak najít tvar na snímku, klonovat jej, odstranit jej, skrýt jej, změnit jeho pořadí, získat jeho Interop shape ID a nastavit alternativní text pro identifikaci a další zpracování.

Také se zabývá tím, jak přistupovat k formátům rozvržení pro tvary, renderovat tvar jako SVG, zarovnávat tvary na snímku a používat vlastnosti překlápění pro horizontální a vertikální zrcadlení. Navíc článek obsahuje krátkou FAQ o kombinování tvarů, pořadí vrstev a uzamčení tvaru.

Nalezení tvaru na snímku

Toto téma popisuje jednoduchou techniku, která usnadňuje vývojářům najít konkrétní tvar na snímku bez použití jeho interního Id. Je důležité vědět, že soubory PowerPoint Presentation nemají žádný způsob, jak identifikovat tvary na snímku kromě interního jedinečného Id. Zdá se, že je pro vývojáře obtížné najít tvar pomocí jeho interního jedinečného Id. Všechny tvary přidané na snímky mají nějaký alternativní text. Doporučujeme vývojářům používat alternativní text pro vyhledání konkrétního tvaru. Můžete použít MS PowerPoint k definování alternativního textu pro objekty, které plánujete v budoucnu měnit.

Po nastavení alternativního textu libovolného požadovaného tvaru můžete otevřít tuto prezentaci pomocí Aspose.Slides for C++ a iterovat přes všechny tvary přidané na snímek. Během každé iterace můžete zkontrolovat alternativní text tvaru a tvar s odpovídajícím alternativním textem bude požadovaný tvar. Pro lepší demonstraci této techniky jsme vytvořili metodu, FindShape, která provádí hledání konkrétního tvaru na snímku a jednoduše vrací tento tvar.

Klonování tvaru

Chcete‑li klonovat tvar na snímek pomocí Aspose.Slides for C++:

  1. Vytvořte instanci třídy Presentation.
  2. Získejte referenci snímku pomocí jeho indexu.
  3. Přistupte k kolekci tvarů zdrojového snímku.
  4. Přidejte nový snímek do prezentace.
  5. Klonujte tvary z kolekce tvarů zdrojového snímku do nového snímku.
  6. Uložte upravenou prezentaci jako soubor PPTX.

Příklad níže přidává skupinový tvar na snímek.

Odstranění tvaru

Aspose.Slides for C++ umožňuje vývojářům odstranit libovolný tvar. Pro odstranění tvaru z libovolného snímku postupujte podle následujících kroků:

  1. Vytvořte instanci třídy Presentation.
  2. Přistupte k prvnímu snímku.
  3. Najděte tvar s konkrétním AlternativeText.
  4. Odstraňte tvar.
  5. Uložte soubor na disk.

Skrytí tvaru

Aspose.Slides for C++ umožňuje vývojářům skrýt libovolný tvar. Pro skrytí tvaru na libovolném snímku postupujte podle následujících kroků:

  1. Vytvořte instanci třídy Presentation.
  2. Přistupte k prvnímu snímku.
  3. Najděte tvar s konkrétním AlternativeText.
  4. Skryjte tvar.
  5. Uložte soubor na disk.

Změna pořadí tvarů

Aspose.Slides for C++ umožňuje vývojářům změnit pořadí tvarů. Přeskupení tvarů určuje, který tvar je vpředu a který vzadu. Pro přeskupení tvarů na libovolném snímku postupujte podle následujících kroků:

  1. Vytvořte instanci třídy Presentation.
  2. Přistupte k prvnímu snímku.
  3. Přidejte tvar.
  4. Přidejte text do textového rámce tvaru.
  5. Přidejte další tvar se stejnými souřadnicemi.
  6. Přeskupte tvary.
  7. Uložte soubor na disk.

Získání Interop Shape ID

Aspose.Slides for C++ umožňuje vývojářům získat jedinečný identifikátor tvaru v rámci snímku na rozdíl od vlastnosti UniqueId, která poskytuje jedinečný identifikátor v celém rozsahu prezentace. Vlastnost OfficeInteropShapeId byla přidána do rozhraní IShape i třídy Shape. Hodnota vrácená vlastností OfficeInteropShapeId odpovídá hodnotě Id objektu Microsoft.Office.Interop.PowerPoint.Shape. Níže je uveden ukázkový kód.

Nastavení vlastnosti AlternativeText

Aspose.Slides for C++ umožňuje vývojářům nastavit AlternateText libovolného tvaru. Pro nastavení AlternateText tvaru postupujte podle následujících kroků:

  1. Vytvořte instanci třídy Presentation.
  2. Přistupte k prvnímu snímku.
  3. Přidejte libovolný tvar na snímek.
  4. Proveďte požadovanou práci s nově přidaným tvarem.
  5. Procházejte tvary a najděte požadovaný tvar.
  6. Nastavte AlternativeText.
  7. Uložte soubor na disk.

Přístup k formátům rozvržení pro tvar

Aspose.Slides for C++ umožňuje vývojářům přistupovat k formátům rozvržení pro tvar. Tento článek ukazuje, jak můžete získat vlastnosti FillFormat a LineFormat pro tvar.

Níže je uveden ukázkový kód.

Renderování tvaru jako SVG

Nyní Aspose.Slides for C++ podporuje renderování tvaru jako SVG. Metoda WriteAsSvg (a její přetížení) byla přidána do třídy Shape a rozhraní IShape. Tato metoda umožňuje uložit obsah tvaru jako soubor SVG. Níže je ukázka kódu, jak exportovat tvar snímku do souboru SVG.

String outSvgFileName = u"SingleShape.svg";

auto pres = System::MakeObject<Presentation>(u"TestExportShapeToSvg.pptx");

auto stream = System::MakeObject<FileStream>(outSvgFileName, FileMode::Create, FileAccess::Write);
pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0)->WriteAsSvg(stream);

Zarovnání tvarů

Aspose.Slides umožňuje zarovnávat tvary buď vzhledem k okrajům snímku nebo vzhledem k sobě navzájem. K tomuto účelu byl přidán přetížený SlidesUtil.AlignShapes() metoda. Výčet ShapesAlignmentType definuje možné možnosti zarovnání.

Example 1

Zdrojový kód níže zarovnává tvary s indexy 1, 2 a 4 podél horní hrany snímku.

SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"example.pptx");

SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);
SharedPtr<IShape> shape1 = slide->get_Shapes()->idx_get(1);
SharedPtr<IShape> shape2 = slide->get_Shapes()->idx_get(2);
SharedPtr<IShape> shape3 = slide->get_Shapes()->idx_get(4);
SlideUtil::AlignShapes(ShapesAlignmentType::AlignTop, true, pres->get_Slides()->idx_get(0), 
System::MakeArray<int32_t>(
    {
        slide->get_Shapes()->IndexOf(shape1),
        slide->get_Shapes()->IndexOf(shape2),
        slide->get_Shapes()->IndexOf(shape3)
    }));

Example 2

Příklad níže ukazuje, jak zarovnat celou kolekci tvarů vzhledem k nejnižšímu tvaru v kolekci.

SharedPtr<Presentation> pres = MakeObject<Presentation>(u"example.pptx");
SlideUtil::AlignShapes(ShapesAlignmentType::AlignBottom, false, pres->get_Slides()->idx_get(0)->get_Shapes());

Vlastnosti překlápění

V Aspose.Slides poskytuje třída ShapeFrame řízení horizontálního a vertikálního zrcadlení tvarů pomocí vlastností flipH a flipV. Obě vlastnosti jsou typu NullableBool, což umožňuje hodnoty True pro překlápění, False pro žádné překlápění nebo NotDefined pro výchozí chování. Tyto hodnoty jsou přístupné z Frame tvaru.

Pro úpravu nastavení překlápění je vytvořena nová instance ShapeFrame s aktuální polohou a rozměry tvaru, požadovanými hodnotami pro flipH a flipV a úhlem otáčení. Přiřazením této instance k Frame tvaru a uložením prezentace se aplikují zrcadlové transformace a uloží se do výstupního souboru.

Řekněme, že máme soubor sample.pptx, ve kterém první snímek obsahuje jediný tvar s výchozím nastavením překlápění, jak je ukázáno níže.

The shape to be flipped

Následující ukázkový kód získá aktuální vlastnosti překlápění tvaru a překlápí jej horizontálně i vertikálně.

auto presentation = MakeObject<Presentation>(u"sample.pptx");

auto shape = presentation->get_Slide(0)->get_Shape(0);

// Získání horizontálního flipu tvaru.
auto horizontalFlip = shape->get_Frame()->get_FlipH();
Console::WriteLine(u"Horizontal flip: " + ObjectExt::ToString(horizontalFlip));

// Získání vertikálního flipu tvaru.
auto verticalFlip = shape->get_Frame()->get_FlipV();
Console::WriteLine(u"Vertical flip: " + ObjectExt::ToString(verticalFlip));

auto x = shape->get_Frame()->get_X();
auto y = shape->get_Frame()->get_Y();
auto width = shape->get_Frame()->get_Width();
auto height = shape->get_Frame()->get_Height();
auto flipH = NullableBool::True; // Překlopit horizontálně.
auto flipV = NullableBool::True; // Překlopit horizontálně.
auto rotation = shape->get_Frame()->get_Rotation();

shape->set_Frame(MakeObject<ShapeFrame>(x, y, width, height, flipH, flipV, rotation));

presentation->Save(u"output.pptx", SaveFormat::Pptx);
presentation->Dispose();

Výsledek:

The flipped shape

FAQ

Mohu kombinovat tvary (sjednocení/průnik/odčerpání) na snímku jako v desktopovém editoru?

Neexistuje vestavěné API pro Boolean operace. Můžete to přibližně simulovat tím, že si sami vytvoříte požadovaný obrys — například pomocí výpočtu výsledné geometrie (pomocí GeometryPath) a vytvoříte nový tvar s tímto konturem, případně odstraníte původní tvary.

Jak mohu řídit pořadí vrstev (z-order), aby tvar vždy zůstal „navrchu“?

Změňte pořadí vložení/přesunu v kolekci shapes snímku. Pro předvídatelné výsledky dokončete nastavení z‑orderu po všech ostatních úpravách snímku.

Mohu „uzamknout“ tvar, aby uživatelé nemohli v PowerPointu upravovat?

Ano. Nastavte vlajky ochrany na úrovni tvaru (např. zamknutí výběru, přesunu, změny velikosti, úprav textu). V případě potřeby aplikujte omezení i na master nebo rozvržení. Upozorňujeme, že jde o ochranu na úrovni UI, ne o bezpečnostní prvek; pro silnější ochranu kombinujte s omezeními na úrovni souboru, jako jsou doporučení pro jen‑čtení nebo hesla (/slides/cs/cpp/password-protected-presentation/).