Beheer presentatievormen in JavaScript

Overzicht

Dit artikel legt uit hoe je met vormen in presentaties kunt werken met Aspose.Slides. Het toont hoe je een vorm op een dia kunt vinden, klonen, verwijderen, verbergen, de volgorde kunt wijzigen, de Interop‑vorm‑ID kunt ophalen en alternatieve tekst kunt instellen voor identificatie en verdere verwerking.

Het behandelt ook hoe je lay-outformaten voor vormen kunt benaderen, een vorm als SVG kunt renderen, vormen op een dia kunt uitlijnen en spiegel‑eigenschappen voor horizontale en verticale reflectie kunt gebruiken. Bovendien bevat het een korte FAQ over het combineren van vormen, stapelvolgorde en het vergrendelen van vormen.

Vorm vinden in dia

Dit onderwerp beschrijft een eenvoudige techniek die het voor ontwikkelaars makkelijker maakt om een specifieke vorm op een dia te vinden zonder de interne Id te gebruiken. Het is belangrijk te weten dat PowerPoint‑presentatiebestanden geen andere manier hebben om vormen op een dia te identificeren dan een interne unieke Id. Het blijkt moeilijk voor ontwikkelaars om een vorm via die interne unieke Id te vinden. Alle toegevoegde vormen hebben enige Alt‑tekst. Wij raden ontwikkelaars aan alternatieve tekst te gebruiken om een specifieke vorm te vinden. Je kunt in MS PowerPoint de alternatieve tekst definiëren voor objecten die je later wilt wijzigen.

Nadat je de alternatieve tekst van een gewenste vorm hebt ingesteld, kun je die presentatie openen met Aspose.Slides voor Node.js via Java en door alle vormen op een dia itereren. Tijdens elke iteratie kun je de alternatieve tekst van de vorm controleren; de vorm met de overeenkomende alternatieve tekst is de door jou gewenste vorm. Om deze techniek beter te demonstreren, hebben we een methode, findShape gemaakt die het vinden van een specifieke vorm in een dia afhandelt en vervolgens die vorm retourneert.

// Maak een instantie van de Presentation‑klasse die het presentatiebestand vertegenwoordigt
var pres = new aspose.slides.Presentation("FindingShapeInSlide.pptx");
try {
    var slide = pres.getSlides().get_Item(0);
    // Alternatieve tekst van de te vinden vorm
    var shape = findShape(slide, "Shape1");
    if (shape != null) {
        console.log("Shape Name: " + shape.getName());
    }
} finally {
    if (pres != null) {
        pres.dispose();
    }
}
function findShape(slide, altText) {
    let shapes = slide.getShapes();
    
    for (let i = 0; i < shapes.size(); i++) {
        let shape = shapes.get_Item(i);
        
        if (shape.getAlternativeText() === altText) {
            return shape;
        }
    }

    return null;
}

Vorm klonen

Om een vorm naar een dia te klonen met Aspose.Slides voor Node.js via Java:

  1. Maak een instantie van de Presentation‑klasse.
  2. Verkrijg de referentie van een dia door de index te gebruiken.
  3. Benader de vormverzameling van de bron‑dia.
  4. Voeg een nieuwe dia toe aan de presentatie.
  5. Kloon vormen van de bron‑dia‑verzameling naar de nieuwe dia.
  6. Sla de gewijzigde presentatie op als een PPTX‑bestand.

Het voorbeeld hieronder voegt een groepvorm toe aan een dia.

// Instantieer Presentation-klasse
var pres = new aspose.slides.Presentation("Source Frame.pptx");
try {
    var sourceShapes = pres.getSlides().get_Item(0).getShapes();
    var blankLayout = pres.getMasters().get_Item(0).getLayoutSlides().getByType(aspose.slides.SlideLayoutType.Blank);
    var destSlide = pres.getSlides().addEmptySlide(blankLayout);
    var destShapes = destSlide.getShapes();
    destShapes.addClone(sourceShapes.get_Item(1), 50, 150 + sourceShapes.get_Item(0).getHeight());
    destShapes.addClone(sourceShapes.get_Item(2));
    destShapes.insertClone(0, sourceShapes.get_Item(0), 50, 150);
    // Schrijf het PPTX-bestand naar schijf
    pres.save("CloneShape_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Vorm verwijderen

Aspose.Slides voor Node.js via Java stelt ontwikkelaars in staat elke vorm te verwijderen. Volg onderstaande stappen om de vorm van een dia te verwijderen:

  1. Maak een instantie van de Presentation‑klasse.
  2. Benader de eerste dia.
  3. Zoek de vorm met een specifieke AlternativeText.
  4. Verwijder de vorm.
  5. Sla het bestand op schijf.
// Maak Presentation-object
var pres = new aspose.slides.Presentation();
try {
    // Haal de eerste dia op
    var sld = pres.getSlides().get_Item(0);
    // Voeg een autovorm van het type rechthoek toe
    sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 50, 40, 150, 50);
    sld.getShapes().addAutoShape(aspose.slides.ShapeType.Moon, 160, 40, 150, 50);
    var altText = "User Defined";
    var iCount = sld.getShapes().size();
    for (var i = 0; i < iCount; i++) {
        var ashp = sld.getShapes().get_Item(0);
        if (alttext === ashp.getAlternativeText()) {
            sld.getShapes().remove(ashp);
        }
    }
    // Sla de presentatie op schijf
    pres.save("RemoveShape_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Vorm verbergen

Aspose.Slides voor Node.js via Java stelt ontwikkelaars in staat elke vorm te verbergen. Volg onderstaande stappen om de vorm van een dia te verbergen:

  1. Maak een instantie van de Presentation‑klasse.
  2. Benader de eerste dia.
  3. Zoek de vorm met een specifieke AlternativeText.
  4. Verberg de vorm.
  5. Sla het bestand op schijf.
// Instantieer Presentation-klasse die de PPTX voorstelt
var pres = new aspose.slides.Presentation();
try {
    // Haal de eerste dia op
    var sld = pres.getSlides().get_Item(0);
    // Voeg een autovorm van het type rechthoek toe
    sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 50, 40, 150, 50);
    sld.getShapes().addAutoShape(aspose.slides.ShapeType.Moon, 160, 40, 150, 50);
    var alttext = "User Defined";
    var iCount = sld.getShapes().size();
    for (var i = 0; i < iCount; i++) {
        var ashp = sld.getShapes().get_Item(i);
        if (alttext === ashp.getAlternativeText()) {
            ashp.setHidden(true);
        }
    }
    // Sla de presentatie op schijf
    pres.save("Hiding_Shapes_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Volgorde van vormen wijzigen

Aspose.Slides voor Node.js via Java laat ontwikkelaars de volgorde van vormen herschikken. Het herschikken van vormen bepaalt welke vorm zich voor of achter een andere bevindt. Volg onderstaande stappen om de volgorde van vormen op een dia aan te passen:

  1. Maak een instantie van de Presentation‑klasse.
  2. Benader de eerste dia.
  3. Voeg een vorm toe.
  4. Voeg tekst toe in het tekstkader van de vorm.
  5. Voeg een andere vorm toe met dezelfde coördinaten.
  6. Herschik de vormen.
  7. Sla het bestand op schijf.
var pres = new aspose.slides.Presentation("ChangeShapeOrder.pptx");
try {
    var slide = pres.getSlides().get_Item(0);
    var shp3 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 200, 365, 400, 150);
    shp3.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.NoFill));
    shp3.addTextFrame(" ");
    var para = shp3.getTextFrame().getParagraphs().get_Item(0);
    var portion = para.getPortions().get_Item(0);
    portion.setText("Watermark Text Watermark Text Watermark Text");
    shp3 = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Triangle, 200, 365, 400, 150);
    slide.getShapes().reorder(2, shp3);
    pres.save("Reshape_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Interop‑vorm‑ID ophalen

Aspose.Slides voor Node.js via Java stelt ontwikkelaars in staat een unieke vorm‑identificatie binnen de dia‑scope te verkrijgen, in tegenstelling tot de getUniqueId‑methode die een unieke identifier in presentatie‑scope oplevert. De methode getOfficeInteropShapeId is toegevoegd aan de Shape‑klasse. De waarde die door getOfficeInteropShapeId wordt geretourneerd, komt overeen met de Id‑waarde van het Microsoft.Office.Interop.PowerPoint.Shape‑object. Hieronder staat een voorbeeldcode.

var pres = new aspose.slides.Presentation("Presentation.pptx");
try {
    // Unieke vormidentificatie ophalen binnen de dia-scope
    var officeInteropShapeId = pres.getSlides().get_Item(0).getShapes().get_Item(0).getOfficeInteropShapeId();
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Alternatieve tekst voor vorm instellen

Aspose.Slides voor Node.js via Java stelt ontwikkelaars in staat de AlternateText van elke vorm in te stellen. Vormen in een presentatie kunnen worden onderscheiden via de AlternativeText of Shape Name‑methode. De methoden setAlternativeText en getAlternativeText kunnen zowel met Aspose.Slides als met Microsoft PowerPoint gelezen of ingesteld worden. Met deze methode kun je een vorm taggen en verschillende bewerkingen uitvoeren zoals het verwijderen, verbergen of herschikken van vormen op een dia. Om de AlternateText van een vorm in te stellen, volg je de onderstaande stappen:

  1. Maak een instantie van de Presentation‑klasse.
  2. Benader de eerste dia.
  3. Voeg een willekeurige vorm toe aan de dia.
  4. Werk met de nieuw toegevoegde vorm.
  5. Doorloop de vormen om een specifieke vorm te vinden.
  6. Stel de AlternativeText in.
  7. Sla het bestand op schijf.
// Instantieer Presentation-klasse die de PPTX voorstelt
var pres = new aspose.slides.Presentation();
try {
    // Haal de eerste dia op
    var sld = pres.getSlides().get_Item(0);
    // Voeg een autovorm van het type rechthoek toe
    var shp1 = sld.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 50, 40, 150, 50);
    var shp2 = sld.getShapes().addAutoShape(aspose.slides.ShapeType.Moon, 160, 40, 150, 50);
    shp2.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    shp2.getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "GRAY"));
    for (var i = 0; i < sld.getShapes().size(); i++) {
        var shape = sld.getShapes().get_Item(i);
        if (shape != null) {
            shape.setAlternativeText("User Defined");
        }
    }
    // Sla de presentatie op schijf
    pres.save("Set_AlternativeText_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Lay‑outformaten voor vorm benaderen

Aspose.Slides voor Node.js via Java biedt een eenvoudige API om lay‑outformaten voor een vorm te benaderen. Dit artikel demonstreert hoe je lay‑outformaten kunt benaderen.

Hieronder staat voorbeeldcode.

var pres = new aspose.slides.Presentation("pres.pptx");
try {
    for (let i = 0; i < pres.getLayoutSlides().size(); i++) {
        let layoutSlide = pres.getLayoutSlides().get_Item(i);
        for (let j = 0; j < layoutSlide.getShapes().size(); j++) {
            let shape = layoutSlide.getShapes().get_Item(j);
            var fillFormats = shape.getFillFormat();
            var lineFormats = shape.getLineFormat();
        }
    }
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Vorm renderen als SVG

Nu ondersteunt Aspose.Slides voor Node.js via Java het renderen van een vorm als SVG. De methode writeAsSvg (en de overload) is toegevoegd aan de Shape‑klasse. Deze methode maakt het mogelijk de inhoud van de vorm op te slaan als een SVG‑bestand. De onderstaande codefragment laat zien hoe je de vorm van een dia exporteert naar een SVG‑bestand.

var pres = new aspose.slides.Presentation("TestExportShapeToSvg.pptx");
try {
    var stream = java.newInstanceSync("java.io.FileOutputStream", "SingleShape.svg");
    try {
        pres.getSlides().get_Item(0).getShapes().get_Item(0).writeAsSvg(stream);
    } finally {
        if (stream != null) {
            stream.close();
        }
    }
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Vormuitlijning

Aspose.Slides maakt het mogelijk vormen uit te lijnen ten opzichte van de dia‑marges of ten opzichte van elkaar. Hiervoor is de overladen methode SlidesUtil.alignShape() toegevoegd. De enumeratie ShapesAlignmentType definieert de mogelijke uitlijningsopties.

Voorbeeld 1

De onderstaande broncode lijnt vormen met indices 1, 2 en 4 uit langs de bovenrand van de dia.

var pres = new aspose.slides.Presentation("example.pptx");
try {
    var slide = pres.getSlides().get_Item(0);
    var shape1 = slide.getShapes().get_Item(1);
    var shape2 = slide.getShapes().get_Item(2);
    var shape3 = slide.getShapes().get_Item(4);
    aspose.slides.SlideUtil.alignShapes(aspose.slides.ShapesAlignmentType.AlignTop, true, pres.getSlides().get_Item(0), java.newArray("int", [slide.getShapes().indexOf(shape1), slide.getShapes().indexOf(shape2), slide.getShapes().indexOf(shape3)]));
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Voorbeeld 2

Het volgende voorbeeld toont hoe je de volledige collectie van vormen uitlijnt ten opzichte van de onderste vorm in de collectie.

var pres = new aspose.slides.Presentation("example.pptx");
try {
    aspose.slides.SlideUtil.alignShapes(aspose.slides.ShapesAlignmentType.AlignBottom, false, pres.getSlides().get_Item(0));
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Flip‑eigenschappen

In Aspose.Slides biedt de ShapeFrame‑klasse controle over horizontale en verticale spiegeling van vormen via de eigenschappen flipH en flipV. Beide eigenschappen hebben het type byte en kunnen de waarden 1 (spiegel), 0 (geen spiegel) of -1 (standaardgedrag) aannemen. 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 rotatiehoek. Het toewijzen van dit object aan het Frame van de vorm en het opslaan van de presentatie past de spiegeltransformaties toe en schrijft ze 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.

The shape to be flipped

Het volgende code‑voorbeeld haalt de huidige flip‑eigenschappen van de vorm op en spiegelt deze zowel horizontaal als verticaal.

var presentation = new asposeSlides.Presentation("sample.pptx");
try {
    var slide = presentation.getSlides().get_Item(0);
    var shape = slide.getShapes().get_Item(0);

    // Haalt de horizontale flip‑eigenschap van de vorm op.
    var horizontalFlip = shape.getFrame().getFlipH();
    console.log("Horizontal flip:", horizontalFlip);

    // Haalt de verticale flip‑eigenschap van de vorm op.
    var verticalFlip = shape.getFrame().getFlipV();
    console.log("Vertical flip:", verticalFlip);

    var x = java.newFloat(shape.getFrame().getX());
    var y = java.newFloat(shape.getFrame().getY());
    var width = java.newFloat(shape.getFrame().getWidth());
    var height = java.newFloat(shape.getFrame().getHeight());
    var flipH = java.newByte(asposeSlides.NullableBool.True); // Horizontaal spiegelen.
    var flipV = java.newByte(asposeSlides.NullableBool.True); // Verticaal spiegelen.
    var rotation = shape.getFrame().getRotation();

    shape.setFrame(new asposeSlides.ShapeFrame(x, y, width, height, flipH, flipV, rotation));

    presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Het resultaat:

The flipped shape

FAQ

Kan ik vormen (union/intersect/subtract) op een dia combineren zoals in een desktop‑editor?

Er is geen ingebouwde Boolean‑operatie‑API. Je kunt een benadering maken door zelf de gewenste omtrek te construeren — bijvoorbeeld door de resulterende geometrie (via GeometryPath) te berekenen en een nieuwe vorm met dat contour te maken, eventueel de originelen te verwijderen.

Hoe kan ik de stapelvolgorde (z‑order) bepalen zodat een vorm altijd “bovenop” blijft?

Wijzig de invoeg‑/verplaatsvolgorde binnen de shapes‑collectie van de dia. Voor voorspelbare resultaten, finaliseer de z‑order nadat alle andere dia‑aanpassingen zijn uitgevoerd.

Kan ik een vorm “vergrendelen” zodat gebruikers deze niet kunnen bewerken in PowerPoint?

Ja. Stel vorm‑specifieke beschermingsvlaggen in (bijv. selectie, verplaatsing, grootte wijzigen, tekstbewerking blokkeren). Indien nodig, kun je vergelijkbare beperkingen op het master‑ of lay‑out‑niveau toepassen. Let op: dit is bescherming op UI‑niveau, geen veiligheidsfunctie; voor sterkere bescherming combineer je dit met bestands‑niveau restricties zoals read‑only aanbevelingen of wachtwoorden.