Beheer presentatievormen in C++
Overzicht
Dit artikel legt uit hoe u met vormen in presentaties werkt met Aspose.Slides. Het laat zien hoe u een vorm op een dia vindt, kloont, verwijdert, verbergt, de volgorde wijzigt, de Interop‑vorm‑ID verkrijgt en alternatieve tekst instelt voor identificatie en verdere verwerking.
Het behandelt ook hoe u lay‑outformaten voor vormen benadert, een vorm rendert als SVG, vormen op een dia uitlijnt en flip‑eigenschappen gebruikt voor horizontale en verticale spiegeling. Daarnaast bevat het artikel een korte FAQ over het combineren van vormen, stapelvolgorde en het vergrendelen van vormen.
Zoek een vorm op een dia
Dit onderwerp beschrijft een eenvoudige techniek om het voor ontwikkelaars makkelijker te maken een specifieke vorm op een dia te vinden zonder de interne Id te gebruiken. Het is belangrijk te weten dat PowerPoint‑presentatiebestanden geen manier hebben om vormen op een dia te identificeren, behalve via een interne unieke Id. Het blijkt moeilijk voor ontwikkelaars om een vorm te vinden met behulp van de interne unieke Id. Alle toegevoegde vormen hebben een Alt‑tekst. Wij raden ontwikkelaars aan alternatieve tekst te gebruiken om een specifieke vorm te vinden. U kunt MS PowerPoint gebruiken om de alternatieve tekst voor objecten te definiëren die u later wilt wijzigen.
Nadat u de alternatieve tekst van een gewenste vorm heeft ingesteld, kunt u die presentatie openen met Aspose.Slides voor C++ en over alle vormen op een dia itereren. Tijdens elke iteratie kunt u de alternatieve tekst van de vorm controleren; de vorm met overeenkomende alternatieve tekst is dan de gewenste vorm. Om deze techniek beter te demonstreren, hebben we een methode, FindShape gemaakt die het mogelijk maakt een specifieke vorm op een dia te vinden en vervolgens eenvoudig die vorm retourneert.
Kloon een vorm
Om een vorm te klonen naar een dia met Aspose.Slides voor C++:
- Maak een instantie van de klasse Presentation.
- Haal de referentie van een dia op via de index.
- Benader de vormverzameling van de bron‑dia.
- Voeg een nieuwe dia toe aan de presentatie.
- Kloon vormen van de bron‑dia‑verzameling naar de nieuwe dia.
- Sla de gewijzigde presentatie op als een PPTX‑bestand.
Het voorbeeld hieronder voegt een groepsvorm toe aan een dia.
Verwijder een vorm
Aspose.Slides voor C++ stelt ontwikkelaars in staat elke vorm te verwijderen. Volg de onderstaande stappen om de vorm van een dia te verwijderen:
- Maak een instantie van de klasse Presentation.
- Benader de eerste dia.
- Zoek de vorm met specifieke AlternativeText.
- Verwijder de vorm.
- Sla het bestand op naar schijf.
Verberg een vorm
Aspose.Slides voor C++ stelt ontwikkelaars in staat elke vorm te verbergen. Volg de onderstaande stappen om de vorm van een dia te verbergen:
- Maak een instantie van de klasse Presentation.
- Benader de eerste dia.
- Zoek de vorm met specifieke AlternativeText.
- Verberg de vorm.
- Sla het bestand op naar schijf.
Wijzig de volgorde van vormen
Aspose.Slides voor C++ stelt ontwikkelaars in staat de volgorde van vormen te wijzigen. Het herschikken van een vorm geeft aan welke vorm vóór of achter een andere staat. Volg de onderstaande stappen om de volgorde van vormen op een dia te wijzigen:
- Maak een instantie van de klasse Presentation.
- Benader de eerste dia.
- Voeg een vorm toe.
- Voeg enige tekst toe in het tekstframe van de vorm.
- Voeg een tweede vorm toe met dezelfde coördinaten.
- Herschik de vormen.
- Sla het bestand op naar schijf.
Haal de Interop‑vorm‑ID op
Aspose.Slides voor C++ stelt ontwikkelaars in staat een unieke vormidentificatie binnen de dia‑scope te verkrijgen, in tegenstelling tot de UniqueId‑eigenschap die een unieke identificatie binnen de presentatie‑scope biedt. Eigenschap OfficeInteropShapeId werd toegevoegd aan de IShape‑interfaces en de Shape‑klasse. De waarde die door de OfficeInteropShapeId‑eigenschap wordt geretourneerd, komt overeen met de Id‑waarde van het Microsoft.Office.Interop.PowerPoint.Shape‑object. Hieronder staat de voorbeeldcode.
Stel de AlternativeText‑eigenschap in
Aspose.Slides voor C++ stelt ontwikkelaars in staat de AlternativeText van elke vorm in te stellen. Volg de onderstaande stappen om de AlternativeText van een vorm in te stellen:
- Maak een instantie van de klasse Presentation.
- Benader de eerste dia.
- Voeg een willekeurige vorm toe aan de dia.
- Voer enige bewerkingen uit op de nieuw toegevoegde vorm.
- Loop door de vormen om een vorm te vinden.
- Stel de AlternativeText in.
- Sla het bestand op naar schijf.
Benader lay‑outformaten voor een vorm
Aspose.Slides voor C++ stelt ontwikkelaars in staat om lay‑outformaten voor een vorm te benaderen. Dit artikel toont hoe u de eigenschappen FillFormat en LineFormat voor een vorm kunt benaderen.
Hieronder staat de voorbeeldcode.
Render een vorm als SVG
Nu ondersteunt Aspose.Slides voor C++ het renderen van een vorm als SVG. De methode WriteAsSvg (en de overload) is toegevoegd aan de Shape‑klasse en de IShape‑interface. Deze methode maakt het mogelijk de inhoud van een vorm op te slaan als een SVG‑bestand. De code‑fragment hieronder laat zien hoe u de vorm van een dia exporteert naar een SVG‑bestand.
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);
Uitlijning van vormen
Aspose.Slides maakt het mogelijk vormen uit te lijnen ten opzichte van de dia‑marges of ten opzichte van elkaar. Hiervoor is een overload van de methode SlidesUtil.AlignShapes() toegevoegd. De enumeratie ShapesAlignmentType definieert de mogelijke uitlijningsopties.
Example 1
De broncode hieronder lijnt vormen met indexen 1, 2 en 4 uit langs de bovenrand van de dia.
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
Het voorbeeld hieronder toont hoe de volledige collectie vormen uitgelijnd kan worden ten opzichte van de laagste vorm in de collectie.
SharedPtr<Presentation> pres = MakeObject<Presentation>(u"example.pptx");
SlideUtil::AlignShapes(ShapesAlignmentType::AlignBottom, false, pres->get_Slides()->idx_get(0)->get_Shapes());
Flip‑eigenschappen
In Aspose.Slides biedt de klasse ShapeFrame controle over horizontale en verticale spiegeling van vormen via de eigenschappen flipH en flipV. Beide eigenschappen zijn van het type NullableBool, waarmee waarden True een flip aangeven, False geen flip, of NotDefined voor het standaardgedrag. Deze waarden zijn toegankelijk via het Frame van een vorm.
Om de flip‑instellingen te wijzigen, wordt een nieuw ShapeFrame‑object gecreëerd met de huidige positie en grootte van de vorm, de gewenste waarden voor flipH en flipV, en de rotatie‑hoek. Door dit object toe te wijzen aan het Frame van de vorm en de presentatie op te slaan, worden de spiegeltransformaties toegepast en weggeschreven naar het uitvoerbestand.
Stel dat we een bestand sample.pptx hebben waarin de eerste dia één vorm bevat met standaard flip‑instellingen, zoals hieronder weergegeven.

De onderstaande code‑voorbeeld haalt de huidige flip‑eigenschappen van de vorm op en spiegelt deze zowel horizontaal als verticaal.
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto shape = presentation->get_Slide(0)->get_Shape(0);
// Haal de horizontale flip-eigenschap van de vorm op.
auto horizontalFlip = shape->get_Frame()->get_FlipH();
Console::WriteLine(u"Horizontal flip: " + ObjectExt::ToString(horizontalFlip));
// Haal de verticale flip-eigenschap van de vorm op.
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; // Flip horizontaal.
auto flipV = NullableBool::True; // Flip horizontaal.
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();
Het resultaat:

FAQ
Kan ik vormen combineren (union/intersect/subtract) op een dia zoals in een desktop‑editor?
Er is geen ingebouwde Boolean‑operatie‑API. U kunt het benaderen door zelf de gewenste omtrek te construeren—bijvoorbeeld de resulterende geometrie berekenen (via GeometryPath) en een nieuwe vorm met die contour maken, eventueel de originele vormen verwijderen.
Hoe kan ik de stapelvolgorde (z‑order) regelen zodat een vorm altijd “bovenop” blijft?
Wijzig de invoeg‑/verplaatsvolgorde binnen de shapes‑collectie van de dia. Voor voorspelbare resultaten, finaliseer de z‑order na alle andere dia‑aanpassingen.
Kan ik een vorm vergrendelen om te voorkomen dat gebruikers deze in PowerPoint kunnen bewerken?
Ja. Stel vorm‑specifieke beschermingsvlaggen in (bijv. vergrendel selectie, verplaatsing, grootte wijzigen, tekstbewerking). Indien nodig kunt u de beperkingen op de master‑ of lay‑out repliceren. Merk op dat dit bescherming op UI‑niveau is, geen veiligheid‑functie; voor sterkere bescherming combineert u dit met bestands‑niveau restricties zoals aanbevelingen voor alleen‑lezen of wachtwoorden.