Prezentációs alakzatok kezelése .NET-ben
Áttekintés
Ez a cikk bemutatja, hogyan dolgozhatunk alakzatokkal a bemutatókban az Aspose.Slides segítségével. Megmutatja, hogyan lehet alakzatot keresni egy dián, klónozni, eltávolítani, elrejteni, megváltoztatni a sorrendet, lekérni az Interop alakzat ID-ját, illetve alternatív szöveget beállítani az azonosításhoz és a további feldolgozáshoz.
A cikk továbbá azt is bemutatja, hogyan érhetők el az alakzatok elrendezési formátumai, hogyan renderelhető egy alakzat SVG-ként, hogyan igazíthatók az alakzatok egy dián, és hogyan használhatók a flip tulajdonságok vízszintes és függőleges tükrözéshez. Emellett rövid GYIK-ot tartalmaz az alakzatok egyesítéséről, rétegezési sorrendről és az alakzatok zárolásáról.
Alakzat keresése 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óját kellene használniuk. Fontos tudni, hogy a PowerPoint bemutató fájlok nem rendelkeznek olyan módszerrel, amellyel a dián lévő alakzatokat azonosítani lehetne, kivéve a belső egyedi azonosítót. A fejlesztőknek nehézséget okozhat egy alakzat megtalálása a belső egyedi azonosítóval. Minden diára hozzáadott alakzathoz van alternatív szöveg (Alt Text). Javasoljuk, hogy a fejlesztők az alternatív szöveget használják egy adott alakzat megtalálásához. A Microsoft PowerPoint segítségével megadhatja az objektumok alternatív szövegét, amelyeket később szeretne módosítani.
Miután beállította egy kívánt alakzat alternatív szövegét, megnyithatja a bemutatót az Aspose.Slides for .NET használatával, és végigiterálhat a dián található összes alakzaton. Minden iteráció során ellenőrizheti az alakzat alternatív szövegét, és a megfelelőt tartalmazó alakzat lesz a keresett. A technika jobb bemutatására létrehoztunk egy FindShape metódust, amely megtalálja a specifikus alakzatot egy dián, és visszaadja azt.
public static void Run()
{
// Példányosít egy Presentation osztályt, amely a bemutató fájlt képviseli
using (Presentation p = new Presentation("FindingShapeInSlide.pptx"))
{
ISlide slide = p.Slides[0];
// A megtalálni kívánt alakzat alternatív szövege
IShape shape = FindShape(slide, "Shape1");
if (shape != null)
{
Console.WriteLine("Shape Name: " + shape.Name);
}
}
}
// Metódus implementációja, amely egy diában alakzatot keres az alternatív szövege alapján
public static IShape FindShape(ISlide slide, string alttext)
{
// Az összes alakzat bejárása a dián belül
for (int i = 0; i < slide.Shapes.Count; i++)
{
// Ha a dián lévő alternatív szöveg megegyezik a szükségesvel, akkor
// Visszaadja az alakzatot
if (slide.Shapes[i].AlternativeText.CompareTo(alttext) == 0)
return slide.Shapes[i];
}
return null;
}
Alakzat klónozása
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia referenciáját az indexének használatával.
- Érje el a forrásdia alakzatgyűjteményét.
- Adjon hozzá egy új diát a bemutatóhoz.
- Klónozza az alakzatokat a forrásdia gyűjteményéből az új diára.
- Mentse a módosított bemutatót PPTX fájlként.
Az alábbi példa egy csoportos alakzatot ad hozzá egy diához.
// Presentation osztály példányosítása
using (Presentation srcPres = new Presentation("Source Frame.pptx"))
{
IShapeCollection sourceShapes = srcPres.Slides[0].Shapes;
ILayoutSlide blankLayout = srcPres.Masters[0].LayoutSlides.GetByType(SlideLayoutType.Blank);
ISlide destSlide = srcPres.Slides.AddEmptySlide(blankLayout);
IShapeCollection destShapes = destSlide.Shapes;
destShapes.AddClone(sourceShapes[1], 50, 150 + sourceShapes[0].Height);
destShapes.AddClone(sourceShapes[2]);
destShapes.InsertClone(0, sourceShapes[0], 50, 150);
// A PPTX fájl mentése lemezre
srcPres.Save("CloneShape_out.pptx", SaveFormat.Pptx);
}
Alakzat eltávolítása
Aspose.Slides for .NET lehetővé teszi a fejlesztők számára, hogy bármely alakzatot eltávolítsanak. Az alakzat eltávolításához egy dián kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a
Presentationosztályból. - Nyissa meg az első diát.
- Keresse meg a megfelelő AlternativeText‑el rendelkező alakzatot.
- Távolítsa el az alakzatot.
- Mentse a fájlt a lemezre.
// Presentation objektum létrehozása
Presentation pres = new Presentation();
// Az első dia lekérése
ISlide sld = pres.Slides[0];
// Téglalap típusú autoshape hozzáadása
IShape shp1 = sld.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 40, 150, 50);
IShape shp2 = sld.Shapes.AddAutoShape(ShapeType.Moon, 160, 40, 150, 50);
String alttext = "User Defined";
int iCount = sld.Shapes.Count;
for (int i = 0; i < iCount; i++)
{
AutoShape ashp = (AutoShape)sld.Shapes[0];
if (String.Compare(ashp.AlternativeText, alttext, StringComparison.Ordinal) == 0)
{
sld.Shapes.Remove(ashp);
}
}
// A prezentáció mentése a lemezre
pres.Save("RemoveShape_out.pptx", SaveFormat.Pptx);
Alakzat elrejtése
Aspose.Slides for .NET lehetővé teszi a fejlesztők számára, hogy bármely alakzatot elrejtjenek. Az alakzat elrejtéséhez egy dián kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a
Presentationosztályból. - Nyissa meg az első diát.
- Keresse meg a megfelelő AlternativeText‑el rendelkező alakzatot.
- Rejtse el az alakzatot.
- Mentse a fájlt a lemezre.
// A PPTX-et képviselő Presentation osztály példányosítása
Presentation pres = new Presentation();
// Az első dia lekérése
ISlide sld = pres.Slides[0];
// Téglalap típusú autoshape hozzáadása
IShape shp1 = sld.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 40, 150, 50);
IShape shp2 = sld.Shapes.AddAutoShape(ShapeType.Moon, 160, 40, 150, 50);
String alttext = "User Defined";
int iCount = sld.Shapes.Count;
for (int i = 0; i < iCount; i++)
{
AutoShape ashp = (AutoShape)sld.Shapes[i];
if (String.Compare(ashp.AlternativeText, alttext, StringComparison.Ordinal) == 0)
{
ashp.Hidden = true;
}
}
// A prezentáció mentése lemezre
pres.Save("Hiding_Shapes_out.pptx", SaveFormat.Pptx);
Alakzat sorrendjének módosítása
Aspose.Slides for .NET lehetővé teszi a fejlesztők számára az alakzatok újrarendezését. A sorrend megadja, hogy melyik alakzat van elöl vagy hátul. Az alakzat újrarendezéséhez egy dián kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a
Presentationosztályból. - Nyissa meg az első diát.
- Adjon hozzá egy alakzatot.
- Adjon szöveget az alakzat szövegkeretébe.
- Adjon hozzá egy másik alakzatot ugyanazzal a koordinátával.
- Rendezze át az alakzatokat.
- Mentse a fájlt a lemezre.
Presentation presentation1 = new Presentation("HelloWorld.pptx");
ISlide slide = presentation1.Slides[0];
IAutoShape shp3 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 200, 365, 400, 150);
shp3.FillFormat.FillType = FillType.NoFill;
shp3.AddTextFrame(" ");
ITextFrame txtFrame = shp3.TextFrame;
IParagraph para = txtFrame.Paragraphs[0];
IPortion portion = para.Portions[0];
portion.Text="Watermark Text Watermark Text Watermark Text";
shp3 = slide.Shapes.AddAutoShape(ShapeType.Triangle, 200, 365, 400, 150);
slide.Shapes.Reorder(2, shp3);
presentation1.Save( "Reshape_out.pptx", SaveFormat.Pptx);
Interop alakzat ID lekérése
Az Aspose.Slides for .NET lehetővé teszi a fejlesztők számára, hogy egyedi alakzatazonosítót kapjanak a dia szintjén, szemben a UniqueId tulajdonsággal, amely a bemutató szintjén biztosít egyedi azonosítót. Az OfficeInteropShapeId tulajdonság az IShape interfészekhez és a Shape osztályhoz került hozzáadásra. Az OfficeInteropShapeId értéke megegyezik a Microsoft.Office.Interop.PowerPoint.Shape objektum Id értékével. Az alábbiakban egy példakód látható.
public static void Run()
{
using (Presentation presentation = new Presentation("Presentation.pptx"))
{
// Egyedi alakzat azonosító lekérése a dia hatókörében
long officeInteropShapeId = presentation.Slides[0].Shapes[0].OfficeInteropShapeId;
}
}
Alakzat alternatív szövegének beállítása
Az Aspose.Slides for .NET lehetővé teszi, hogy a fejlesztők beállítsák bármely alakzat AlternateText értékét. A bemutatóban lévő alakzatok megkülönböztethetők az AlternativeText vagy a Shape Name (alakzatnév) tulajdonság alapján. Az AlternativeText tulajdonságot olvashatja vagy beállíthatja az Aspose.Slides vagy a Microsoft PowerPoint segítségével. Ennek a tulajdonságnak a használatával címkézhet egy alakzatot, és különböző műveleteket végezhet, például alakzat eltávolítása, alakzat elrejtése vagy alakzatok átrendezése a dián. Az AlternateText beállításához kövesse az alábbi lépéseket:
- Hozzon létre egy példányt a
Presentationosztályból. - Nyissa meg az első diát.
- Adjon hozzá bármilyen alakzatot a diához.
- Végezzen némi műveletet az újonnan hozzáadott alakzattal.
- Járja be az alakzatokat a keresett alakzat megtalálásához.
- Állítsa be az AlternativeText értéket.
- Mentse a fájlt a lemezre.
// A PPTX-et képviselő Presentation osztály példányosítása
Presentation pres = new Presentation();
// Az első dia lekérése
ISlide sld = pres.Slides[0];
// Téglalap típusú autoshape hozzáadása
IShape shp1 = sld.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 40, 150, 50);
IShape shp2 = sld.Shapes.AddAutoShape(ShapeType.Moon, 160, 40, 150, 50);
shp2.FillFormat.FillType = FillType.Solid;
shp2.FillFormat.SolidFillColor.Color = Color.Gray;
for (int i = 0; i < sld.Shapes.Count; i++)
{
var shape = sld.Shapes[i] as AutoShape;
if (shape != null)
{
AutoShape ashp = shape;
ashp.AlternativeText = "User Defined";
}
}
// A prezentáció mentése lemezre
pres.Save("Set_AlternativeText_out.pptx", SaveFormat.Pptx);
Alakzat elrendezési formátumainak elérése
Az Aspose.Slides for .NET egyszerű API-t biztosít az alakzat elrendezési formátumainak eléréséhez. Ez a cikk bemutatja, hogyan érheti el az elrendezési formátumokat.
Az alábbi példakód látható.
using (Presentation pres = new Presentation("pres.pptx"))
{
foreach (ILayoutSlide layoutSlide in pres.LayoutSlides)
{
IFillFormat[] fillFormats = layoutSlide.Shapes.Select(shape => shape.FillFormat).ToArray();
ILineFormat[] lineFormats = layoutSlide.Shapes.Select(shape => shape.LineFormat).ToArray();
}
}
Alakzat renderelése SVG-ként
Az Aspose.Slides for .NET most már támogatja az alakzat SVG-ként való renderelését. A WriteAsSvg metódus (és annak túlterhelése) a Shape osztályhoz és az IShape interfészhez került hozzáadásra. Ez a metódus lehetővé teszi az alakzat tartalmának SVG fájlba mentését. Az alábbi kódrészlet bemutatja, hogyan exportálhatja a dia alakzatát SVG fájlba.
public static void Run()
{
string outSvgFileName = "SingleShape.svg";
using (Presentation pres = new Presentation("TestExportShapeToSvg.pptx"))
{
using (Stream stream = new FileStream(outSvgFileName, FileMode.Create, FileAccess.Write))
{
pres.Slides[0].Shapes[0].WriteAsSvg(stream);
}
}
}
Alakzat igazítása
A SlidesUtil.AlignShape() túlterhelt metódus segítségével
- igazíthatja az alakzatokat a dia margójához képest. Lásd Példa 1.
- igazíthatja az alakzatokat egymáshoz képest. Lásd Példa 2.
A ShapesAlignmentType felsorolás meghatározza a rendelkezésre álló igazítási lehetőségeket.
Példa 1
Ez a C# kód megmutatja, hogyan igazíthatók a 1, 2 és 4 indexű alakzatok a dia felső szélén: Az alábbi forráskód a 1, 2 és 4 indexű alakzatokat a dia felső szélén igazítja.
using (Presentation pres = new Presentation("example.pptx"))
{
ISlide slide = pres.Slides[0];
IShape shape1 = slide.Shapes[1];
IShape shape2 = slide.Shapes[2];
IShape shape3 = slide.Shapes[4];
SlideUtil.AlignShapes(ShapesAlignmentType.AlignTop, true, pres.Slides[0], new int[]
{
slide.Shapes.IndexOf(shape1),
slide.Shapes.IndexOf(shape2),
slide.Shapes.IndexOf(shape3)
});
}
Példa 2
Ez a C# kód megmutatja, hogyan igazítható egy teljes alakzatsorozat a sorozat alján lévő alakzathoz képest:
using (Presentation pres = new Presentation("example.pptx"))
{
SlideUtil.AlignShapes(ShapesAlignmentType.AlignBottom, false, pres.Slides[0].Shapes);
}
Flip tulajdonságok
Az Aspose.Slides-ben a ShapeFrame osztály lehetővé teszi a alakzatok vízszintes és függőleges tükrözésének vezérlését a FlipH és FlipV tulajdonságokon keresztül. Mindkét tulajdonság a NullableBool típusú, amely megengedi a True értéket a tükrözéshez, a False értéket a tükrözés hiányához, vagy a NotDefined értéket az alapértelmezett viselkedéshez. 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 aktuális pozíciójával és méretével, a kívánt FlipH és FlipV értékekkel, valamint a forgásszöggel. Ennek a példánynak a alakzat Frame tulajdonságához való hozzárendelése és a bemutató mentése alkalmazza a tükrözési transzformációkat, és a kimeneti fájlba menti őket.
Tegyük fel, hogy van egy sample.pptx fájlunk, amelynek az első diapont egyetlen alakzat tartalmazza alapértelmezett flip beállításokkal, az alábbiak szerint.

Az alábbi kódrészlet lekéri az alakzat aktuális flip tulajdonságait, és vízszintesen és függőlegesen egyaránt tükrözi.
using (Presentation presentation = new Presentation("sample.pptx"))
{
IShape shape = presentation.Slides[0].Shapes[0];
// Az alakzat vízszintes flip tulajdonságának lekérése.
NullableBool horizontalFlip = shape.Frame.FlipH;
Console.WriteLine($"Horizontal flip: {horizontalFlip}");
// Az alakzat függőleges flip tulajdonságának lekérése.
NullableBool verticalFlip = shape.Frame.FlipV;
Console.WriteLine($"Vertical flip: {verticalFlip}");
float x = shape.Frame.X;
float y = shape.Frame.Y;
float width = shape.Frame.Width;
float height = shape.Frame.Height;
NullableBool flipH = NullableBool.True; // Vízszintesen tükröz.
NullableBool flipV = NullableBool.True; // Függőlegesen tükröz.
float rotation = shape.Frame.Rotation;
shape.Frame = new ShapeFrame(x, y, width, height, flipH, flipV, rotation);
presentation.Save("output.pptx", SaveFormat.Pptx);
}
Az eredmény:

GYIK
Összevonhatok-e alakzatokat (unió/metszet/kivonás) egy dián, mint egy asztali szerkesztőben?
Nincs beépített Boolean művelet API. Körülbelül ugyanúgy elérhető, ha saját maga felépíti a kívánt körvonalat – például kiszámítja a keletkező geometriát (a GeometryPath segítségével), és létrehoz egy új alakzatot ezzel a körvonallal, opcionálisan eltávolítva az eredetit.
Hogyan szabályozhatom a rétegezési sorrendet (z-sorrendet), hogy egy alakzat mindig “felül” 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 érdekében a z-sorrendet a többi dia módosítás után fejezze be.
Zárolhatok-e egy alakzatot, hogy a felhasználók ne tudják szerkeszteni PowerPointban?
Igen. Állítsa be a alakzatszintű védelmi zászlókat (például a kiválasztá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 mester- vagy elrendezésre. 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 olvasható ajánlások vagy jelszavak.