Gérer les formes de présentation en JavaScript
Trouver une forme dans la diapositive
Ce sujet décrira une technique simple pour faciliter aux développeurs la recherche d’une forme spécifique sur une diapositive sans utiliser son Id interne. Il est important de savoir que les fichiers de présentation PowerPoint ne possèdent aucun moyen d’identifier les formes sur une diapositive, à l’exception d’un Id unique interne. Il semble difficile pour les développeurs de trouver une forme en utilisant son Id unique interne. Toutes les formes ajoutées aux diapositives possèdent un texte alternatif. Nous suggérons aux développeurs d’utiliser le texte alternatif pour rechercher une forme spécifique. Vous pouvez utiliser MS PowerPoint pour définir le texte alternatif des objets que vous prévoyez de modifier ultérieurement.
Après avoir défini le texte alternatif de la forme souhaitée, vous pouvez ouvrir cette présentation en utilisant Aspose.Slides for Node.js via Java et parcourir toutes les formes ajoutées à une diapositive. À chaque itération, vous pouvez vérifier le texte alternatif de la forme et la forme dont le texte alternatif correspond sera celle que vous recherchez. Pour illustrer mieux cette technique, nous avons créé une méthode, findShape qui permet de trouver une forme spécifique dans une diapositive et renvoie simplement cette forme.
// Instancier une classe Presentation qui représente le fichier de présentation
var pres = new aspose.slides.Presentation("FindingShapeInSlide.pptx");
try {
var slide = pres.getSlides().get_Item(0);
// Texte alternatif de la forme à rechercher
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;
}
Cloner une forme
Pour cloner une forme sur une diapositive en utilisant Aspose.Slides for Node.js via Java :
- Créez une instance de la classe Presentation.
- Obtenez la référence d’une diapositive en utilisant son index.
- Accédez à la collection de formes de la diapositive source.
- Ajoutez une nouvelle diapositive à la présentation.
- Clonez les formes de la collection de formes de la diapositive source vers la nouvelle diapositive.
- Enregistrez la présentation modifiée au format PPTX.
L’exemple ci‑dessous ajoute une forme groupée à une diapositive.
// Instancier la classe Presentation
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);
// Écrire le fichier PPTX sur le disque
pres.save("CloneShape_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Supprimer une forme
Aspose.Slides for Node.js via Java permet aux développeurs de supprimer n’importe quelle forme. Pour supprimer la forme d’une diapositive, veuillez suivre les étapes ci‑dessous :
- Créez une instance de la classe Presentation.
- Accédez à la première diapositive.
- Trouvez la forme avec un AlternativeText spécifique.
- Supprimez la forme.
- Enregistrez le fichier sur le disque.
// Créer un objet Presentation
var pres = new aspose.slides.Presentation();
try {
// Obtenir la première diapositive
var sld = pres.getSlides().get_Item(0);
// Ajouter une forme auto de type rectangle
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);
}
}
// Enregistrer la présentation sur le disque
pres.save("RemoveShape_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Masquer une forme
Aspose.Slides for Node.js via Java permet aux développeurs de masquer n’importe quelle forme. Pour masquer la forme d’une diapositive, veuillez suivre les étapes ci‑dessus :
- Créez une instance de la classe Presentation.
- Accédez à la première diapositive.
- Trouvez la forme avec un AlternativeText spécifique.
- Masquez la forme.
- Enregistrez le fichier sur le disque.
// Instancier la classe Presentation qui représente le PPTX
var pres = new aspose.slides.Presentation();
try {
// Obtenir la première diapositive
var sld = pres.getSlides().get_Item(0);
// Ajouter une forme auto de type rectangle
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);
}
}
// Enregistrer la présentation sur le disque
pres.save("Hiding_Shapes_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Modifier l’ordre des formes
Aspose.Slides for Node.js via Java permet aux développeurs de réorganiser les formes. Réorganiser les formes indique quelle forme est au premier plan ou à l’arrière-plan. Pour réorganiser les formes d’une diapositive, veuillez suivre les étapes ci‑dessous :
- Créez une instance de la classe Presentation.
- Accédez à la première diapositive.
- Ajoutez une forme.
- Ajoutez du texte dans le cadre de texte de la forme.
- Ajoutez une autre forme avec les mêmes coordonnées.
- Réorganisez les formes.
- Enregistrez le fichier sur le disque.
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();
}
}
Obtenir l’identifiant Interop de la forme
Aspose.Slides for Node.js via Java permet aux développeurs d’obtenir un identifiant de forme unique au niveau de la diapositive, contrairement à la méthode getUniqueId qui fournit un identifiant unique au niveau de la présentation. La méthode getOfficeInteropShapeId a été ajoutée aux classes Shape respectivement. La valeur renvoyée par la méthode getOfficeInteropShapeId correspond à la valeur de l’Id de l’objet Microsoft.Office.Interop.PowerPoint.Shape. Le code d’exemple ci‑dessous est fourni.
var pres = new aspose.slides.Presentation("Presentation.pptx");
try {
// Obtention de l'identifiant unique de la forme dans la portée de la diapositive
var officeInteropShapeId = pres.getSlides().get_Item(0).getShapes().get_Item(0).getOfficeInteropShapeId();
} finally {
if (pres != null) {
pres.dispose();
}
}
Définir le texte alternatif pour une forme
Aspose.Slides for Node.js via Java permet aux développeurs de définir le AlternateText de toute forme. Les formes d’une présentation peuvent être distinguées à l’aide de la méthode AlternativeText ou Shape Name. Les méthodes setAlternativeText et getAlternativeText peuvent être lues ou définies en utilisant Aspose.Slides ainsi que Microsoft PowerPoint. En utilisant cette méthode, vous pouvez marquer une forme et effectuer différentes opérations comme la suppression d’une forme, le masquage d’une forme ou le réordonnancement des formes sur une diapositive. Pour définir le AlternateText d’une forme, veuillez suivre les étapes ci‑dessous :
- Créez une instance de la classe Presentation.
- Accédez à la première diapositive.
- Ajoutez n’importe quelle forme à la diapositive.
- Effectuez des opérations avec la forme nouvellement ajoutée.
- Parcourez les formes pour en trouver une.
- Définissez le AlternativeText.
- Enregistrez le fichier sur le disque.
// Instancier la classe Presentation qui représente le PPTX
var pres = new aspose.slides.Presentation();
try {
// Obtenir la première diapositive
var sld = pres.getSlides().get_Item(0);
// Ajouter une forme auto de type rectangle
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");
}
}
// Enregistrer la présentation sur le disque
pres.save("Set_AlternativeText_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Accéder aux formats de mise en page d’une forme
Aspose.Slides for Node.js via Java fournit une API simple pour accéder aux formats de mise en page d’une forme. Cet article montre comment accéder aux formats de mise en page.
Le code d’exemple ci‑dessus est fourni.
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();
}
}
Rendre une forme au format SVG
Maintenant, Aspose.Slides for Node.js via Java prend en charge le rendu d’une forme au format SVG. La méthode writeAsSvg (et sa surcharge) a été ajoutée aux classes Shape. Cette méthode permet d’enregistrer le contenu de la forme dans un fichier SVG. L’extrait de code ci‑dessous montre comment exporter la forme d’une diapositive vers un fichier SVG.
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();
}
}
Alignement des formes
Aspose.Slides permet d’aligner les formes soit par rapport aux marges de la diapositive, soit par rapport les unes aux autres. À cet effet, la méthode surchargée SlidesUtil.alignShape() a été ajoutée. L’énumération ShapesAlignmentType définit les options d’alignement possibles.
Exemple 1
Le code source ci‑dessous aligne les formes d’indices 1, 2 et 4 le long de la bordure supérieure de la diapositive.
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();
}
}
Exemple 2
L’exemple ci‑dessous montre comment aligner l’ensemble de la collection de formes par rapport à la forme la plus basse de la collection.
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();
}
}
Propriétés de retournement
Dans Aspose.Slides, la classe ShapeFrame offre un contrôle du miroir horizontal et vertical des formes via ses propriétés flipH et flipV. Les deux propriétés sont de type byte, autorisant les valeurs 1 pour indiquer un retournement, 0 pour aucun retournement, ou -1 pour utiliser le comportement par défaut. Ces valeurs sont accessibles depuis le Frame d’une forme.
Pour modifier les paramètres de retournement, une nouvelle instance de ShapeFrame est construite avec la position et la taille actuelles de la forme, les valeurs souhaitées pour flipH et flipV, ainsi que l’angle de rotation. L’affectation de cette instance au Frame de la forme et l’enregistrement de la présentation appliquent les transformations de miroir et les enregistrent dans le fichier de sortie.
Supposons que nous disposions d’un fichier sample.pptx dans lequel la première diapositive contient une seule forme avec les paramètres de retournement par défaut, comme indiqué ci‑dessous.

L’exemple de code suivant récupère les propriétés de retournement actuelles de la forme et la retourne à la fois horizontalement et verticalement.
var presentation = new asposeSlides.Presentation("sample.pptx");
try {
var slide = presentation.getSlides().get_Item(0);
var shape = slide.getShapes().get_Item(0);
// Récupérer la propriété de retournement horizontal de la forme.
var horizontalFlip = shape.getFrame().getFlipH();
console.log("Horizontal flip:", horizontalFlip);
// Récupérer la propriété de retournement vertical de la forme.
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); // Retourner horizontalement.
var flipV = java.newByte(asposeSlides.NullableBool.True); // Retourner verticalement.
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();
}

FAQ
Puis-je combiner des formes (union/intersection/soustraction) sur une diapositive comme dans un éditeur de bureau ?
Il n’existe pas d’API d’opération booléenne intégrée. Vous pouvez l’approcher en construisant vous‑même le contour désiré — par exemple, calculer la géométrie résultante (via GeometryPath) et créer une nouvelle forme avec ce contour, en supprimant éventuellement les originales.
Comment puis‑je contrôler l’ordre d’empilement (z‑order) afin qu’une forme reste toujours « au premier plan » ?
Modifiez l’ordre d’insertion/déplacement au sein de la collection shapes de la diapositive. Pour des résultats prévisibles, finalisez le z‑order après toutes les autres modifications de la diapositive.
Puis‑je « verrouiller » une forme pour empêcher les utilisateurs de la modifier dans PowerPoint ?
Oui. Définissez les drapeaux de protection au niveau de la forme (par ex. verrouiller la sélection, le déplacement, le redimensionnement, les modifications de texte). Si nécessaire, appliquez les restrictions sur le masque ou la disposition. Notez qu’il s’agit d’une protection au niveau de l’interface utilisateur, et non d’une fonctionnalité de sécurité ; pour une protection plus forte, combinez‑la avec des restrictions au niveau du fichier comme les recommandations en lecture seule ou mots de passe.