Prezentációk alakzatainak kezelése C++-ban

Áttekintés

Ez a cikk bemutatja, hogyan dolgozhatunk alakzatokkal a prezentációkban az Aspose.Slides használatával. Bemutatja, hogyan találhatunk egy alakzatot egy dián, hogyan klónozhatjuk, hogyan távolíthatjuk el, hogyan rejthetjük el, hogyan változtathatjuk meg a sorrendjét, hogyan kérhetjük le az Interop alakzat-azonosítót, és hogyan állíthatunk be alternatív szöveget az azonosításhoz és további feldolgozáshoz.

Emellett bemutatja, hogyan érhetjük el az alakzatok elrendezési formátumait, hogyan renderelhetünk egy alakzatot SVG‑ként, hogyan igazíthatjuk az alakzatokat egy dián, és hogyan használhatjuk a flip tulajdonságokat a vízszintes és függőleges tükrözéshez. Továbbá a cikk tartalmaz egy rövid GYIK‑ot az alakzatok kombinálásáról, a rétegezési sorrendről és az alakzatok zárolásáról.

Alakzat megtalálása egy dián

Ez a téma egy egyszerű technikát mutat be, amely megkönnyíti a fejlesztők számára egy adott alakzat megtalálását a dián anélkül, hogy a belső azonosítót használnák. Fontos tudni, hogy a PowerPoint prezentációfájlok nem rendelkeznek olyan módszerrel, amely a belső egyedi azonosító mellett más módon azonosítaná az alakzatokat a dián. Úgy tűnik, a fejlesztők számára nehéz egy alakzatot megtalálni a belső egyedi azonosító használatával. Minden diára hozzáadott alakzathoz tartozik valamilyen alternatív szöveg. Javasoljuk a fejlesztőknek, hogy alternatív szöveget használjanak egy adott alakzat megtalálásához. Az MS PowerPoint segítségével megadhatja azoknak az objektumoknak az alternatív szövegét, amelyeket a jövőben módosítani kíván.

Miután beállította egy kívánt alakzat alternatív szövegét, megnyithatja a prezentációt az Aspose.Slides for C++ segítségével, és végigiterálhat a diára hozzáadott összes alakzaton. Minden iteráció során ellenőrizheti az alakzat alternatív szövegét, és a megfelelő alternatív szöveggel rendelkező alakzat lesz a keresett. A technika jobb bemutatásához létrehoztunk egy FindShape metódust, amely megoldja egy adott alakzat megtalálását egy dián, és egyszerűen visszaadja azt.

Alakzat klónozása

Alakzat klónozásához egy diára az Aspose.Slides for C++ használatával:

  1. Hozzon létre egy példányt a Presentation osztályból.
  2. Szerezze be egy dia referenciaját az indexének használatával.
  3. Hozzáférés a forrásdia alakzategyűjteményéhez.
  4. Adjon hozzá egy új diát a prezentációhoz.
  5. Klónozza az alakzatokat a forrásdia alakzategyűjteményéből az új diára.
  6. Mentse a módosított prezentációt PPTX fájlként.

Az alábbi példa egy csoportos alakzatot ad hozzá egy diához.

Alakzat eltávolítása

Az Aspose.Slides for C++ lehetővé teszi a fejlesztők számára, hogy bármely alakzatot eltávolítsanak. Egy alakzat eltávolításához bármely diáról kövesse az alábbi lépéseket:

  1. Hozzon létre egy példányt a Presentation osztályból.
  2. Hozzáférés az első diához.
  3. Keresse meg a megadott AlternativeText tulajdonságú alakzatot.
  4. Távolítsa el az alakzatot.
  5. Mentse el a fájlt a lemezen.

Alakzat elrejtése

Az Aspose.Slides for C++ lehetővé teszi a fejlesztők számára, hogy bármely alakzatot elrejtsenek. Egy alakzat elrejtéséhez bármely diáról kövesse az alábbi lépéseket:

  1. Hozzon létre egy példányt a Presentation osztályból.
  2. Hozzáférés az első diához.
  3. Keresse meg a megadott AlternativeText tulajdonságú alakzatot.
  4. Rejtse el az alakzatot.
  5. Mentse el a fájlt a lemezen.

Alakzat sorrendjének módosítása

Az Aspose.Slides for C++ lehetővé teszi a fejlesztők számára, hogy átrendezzék az alakzatokat. Az alakzat átrendezése meghatározza, melyik alakzat van elöl vagy hátul. Az alakzat átrendezéséhez bármely diáról kövesse az alábbi lépéseket:

  1. Hozzon létre egy példányt a Presentation osztályból.
  2. Hozzáférés az első diához.
  3. Adj hozzá egy alakzatot.
  4. Adj hozzá szöveget az alakzat szövegkeretébe.
  5. Adj hozzá egy másik alakzatot ugyanazzal a koordinátával.
  6. Rendezd át az alakzatokat.
  7. Mentse el a fájlt a lemezen.

Interop alakzat-azonosító lekérése

Az Aspose.Slides for C++ lehetővé teszi a fejlesztők számára, hogy egyedi alakzat-azonosítót szerezzék meg a diára vonatkozóan, szemben a UniqueId tulajdonsággal, amely a prezentáció szintjén biztosít egyedi azonosítót. Az OfficeInteropShapeId tulajdonság hozzá lett adva az IShape interfészekhez és a Shape osztályhoz. Az OfficeInteropShapeId tulajdonság által visszaadott érték megfelel a Microsoft.Office.Interop.PowerPoint.Shape objektum Id értékének. Az alábbiakban a mintakód látható.

AlternativeText tulajdonság beállítása

Az Aspose.Slides for C++ lehetővé teszi a fejlesztők számára, hogy bármely alakzat AlternateText értékét beállítsák. Az AlternateText beállításához kövesse az alábbi lépéseket:

  1. Hozzon létre egy példányt a Presentation osztályból.
  2. Hozzáférés az első diához.
  3. Adj hozzá egy tetszőleges alakzatot a diához.
  4. Végezzen némi műveletet az újonnan hozzáadott alakzattal.
  5. Járja be az alakzatokat, hogy megtaláljon egy adottat.
  6. Állítsa be az AlternativeText-et.
  7. Mentse el a fájlt a lemezen.

Elrendezési formátumok elérése egy alakzathoz

Az Aspose.Slides for C++ lehetővé teszi a fejlesztők számára, hogy elérjék egy alakzat elrendezési formátumait. Ez a cikk bemutatja, hogyan érheti el egy alakzat FillFormat és LineFormat tulajdonságait.

Az alábbiakban a mintakód látható.

Alakzat renderelése SVG‑ként

Az Aspose.Slides for C++ most támogatja egy alakzat SVG‑ként való renderelését. A WriteAsSvg metódus (és annak túlterhelése) hozzá lett adva a Shape osztályhoz és az IShape interfészhez. Ez a metódus lehetővé teszi az alakzat tartalmának SVG fájlként való mentését. Az alábbi kódrészlet bemutatja, hogyan exportálhatjuk egy dia alakzatát SVG fájlba.

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

Alakzatok igazítása

Az Aspose.Slides lehetővé teszi az alakzatok igazítását a dia margóival vagy egymáshoz viszonyítva. Ehhez egy túlterhelt SlidesUtil.AlignShapes() metódust adtunk hozzá. A ShapesAlignmentType felsorolás definiálja a lehetséges igazítási opciókat.

Példa 1

Az alábbi forráskód a 1, 2 és 4 indexű alakzatokat a dia felső szélén igazítja.

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

Példa 2

Az alábbi példa azt mutatja, hogyan igazítható a teljes alakzategyűjtemény a gyűjtemény legalsó alakzatához viszonyítva.

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

Flip tulajdonságok

Az Aspose.Slides-ben a ShapeFrame osztály biztosítja a vízszintes és függőleges tükrözés szabályozását az alakzat flipH és flipV tulajdonságain keresztül. Mindkét tulajdonság a NullableBool típusa, amely True értékkel jelzi a tükrözést, False a nem tükrözést, vagy NotDefined a alapértelmezett viselkedés használatát. Ezek az értékek az alakzat Frame tulajdonságán keresztül érhetők el.

A flip beállítások módosításához egy új ShapeFrame példányt hozunk létre az alakzat jelenlegi pozíciójával és méretével, a kívánt flipH és flipV értékekkel, valamint a forgatási szöggel. Ennek a példánynak a shape Frame tulajdonságához való hozzárendelése és a prezentáció mentése alkalmazza a tükrözési transzformációkat és a kimeneti fájlba írja őket.

Tegyük fel, hogy van egy sample.pptx fájlunk, amelynek első dia egyetlen alakzatot tartalmaz alapértelmezett flip beállításokkal, az alábbiakban látható.

A tükrözendő alakzat

A következő kódrészlet lekéri az alakzat jelenlegi flip tulajdonságait és vízszintesen és függőlegesen is tükrözi azt.

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

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

// Az alakzat vízszintes tükrözés tulajdonságának lekérése.
auto horizontalFlip = shape->get_Frame()->get_FlipH();
Console::WriteLine(u"Horizontal flip: " + ObjectExt::ToString(horizontalFlip));

// Az alakzat függőleges tükrözés tulajdonságának lekérése.
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; // Vízszintesen tükröz.
auto flipV = NullableBool::True; // Vízszintesen tükröz.
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();

A tükrözött alakzat

GYIK

Kombinálhatok‑e alakzatokat (unió/keresztezés/kivonás) egy dián, mint egy asztali szerkesztőben?
Nincs beépített Boolean művelet API. Megközelíthető azzal, hogy saját maga építi meg a kívánt körvonalat – például kiszámítja az eredményes geometriát (a GeometryPath használatával), és létrehoz egy új alakzatot ezzel a körvonallal, opcionálisan eltávolítva az eredetieket.

Hogyan szabályozhatom a rétegsorrendet (z‑order), hogy egy alakzat mindig a “tetején” maradjon?
Módosítsa a beszúrási/mozgatási sorrendet a dia shapes gyűjteményén belül. A kiszámítható eredményekért a z‑sorrendet a többi dia módosítás után finalizálja.

Le tudom‑e “zárolni” egy alakzatot, hogy a felhasználók ne szerkeszthessék PowerPointban?
Igen. Állítsa be a shape-level protection flags (pl. a kijelölés, mozgatás, átméretezés, szövegszerkesztés zárolását). Szükség esetén tükrözze a korlátozásokat a master vagy layout szinten. Vegye figyelembe, hogy ez UI‑szintű védelem, nem biztonsági funkció; erősebb védelemhez kombinálja fájlszintű korlátozásokkal, mint a csak‑olvasás ajánlás vagy jelszó.