Gestionar SmartArt en presentaciones de PowerPoint usando JavaScript
Resumen
SmartArt es un diagrama de PowerPoint formado por nodos, formas de nodo y un diseño. Con Aspose.Slides para Node.js a través de Java, puedes crear SmartArt, leer el texto de sus nodos, cambiar su diseño, inspeccionar nodos ocultos, configurar diseños de organigramas y crear organigramas con imágenes.
Obtener texto de un objeto SmartArt
Un nodo SmartArt puede contener una o más formas. Para leer el texto de las formas del nodo, recorre SmartArt.getAllNodes, luego lee el TextFrame devuelto por SmartArtShape.getTextFrame.
El ejemplo requiere una presentación con al menos una diapositiva y un objeto SmartArt como la primera forma de esa diapositiva. Imprime cada cuadro de texto disponible en la consola.
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
let presentation = new aspose.slides.Presentation("sample.pptx");
try {
let slide = presentation.getSlides().get_Item(0);
let shape = slide.getShapes().get_Item(0);
if (java.instanceOf(shape, "com.aspose.slides.ISmartArt")) {
let smartArt = shape;
let nodes = smartArt.getAllNodes();
for (let nodeIndex = 0; nodeIndex < nodes.size(); nodeIndex++) {
let node = nodes.get_Item(nodeIndex);
let nodeShapes = node.getShapes();
for (let shapeIndex = 0; shapeIndex < nodeShapes.size(); shapeIndex++) {
let nodeShape = nodeShapes.get_Item(shapeIndex);
if (nodeShape.getTextFrame() != null) {
console.log(nodeShape.getTextFrame().getText());
}
}
}
} else {
console.log("The first shape is not a SmartArt object.");
}
} finally {
presentation.dispose();
}
Cambiar el tipo de diseño de un objeto SmartArt
El diseño de SmartArt controla cómo se disponen y conectan los nodos. El siguiente ejemplo crea un objeto SmartArt con el valor SmartArtLayoutType BasicBlockList, lo cambia al valor BasicProcess y guarda la presentación. La posición y el tamaño pasados a ShapeCollection.addSmartArt se miden en puntos. Usa SmartArt.setLayout para cambiar el diseño.
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
let presentation = new aspose.slides.Presentation();
try {
let slide = presentation.getSlides().get_Item(0);
let smartArt = slide.getShapes().addSmartArt(10, 10, 400, 300, aspose.slides.SmartArtLayoutType.BasicBlockList);
smartArt.setLayout(aspose.slides.SmartArtLayoutType.BasicProcess);
presentation.save("ChangeSmartArtLayout.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Comprobar si un nodo SmartArt está oculto
SmartArtNode.isHidden indica si el nodo está oculto en el modelo de datos de SmartArt. Los nodos ocultos pueden existir en la estructura aunque el diseño seleccionado no los muestre como elementos visibles del diagrama.
El siguiente ejemplo añade un nodo a un objeto SmartArt que utiliza el valor SmartArtLayoutType RadialCycle y verifica el estado oculto del nodo añadido. Imprime un mensaje si el nodo está oculto y guarda el diagrama.
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
let presentation = new aspose.slides.Presentation();
try {
let slide = presentation.getSlides().get_Item(0);
let smartArt = slide.getShapes().addSmartArt(10, 10, 400, 300, aspose.slides.SmartArtLayoutType.RadialCycle);
let node = smartArt.getAllNodes().addNode();
let isHidden = node.isHidden();
if (isHidden) {
console.log("The node is hidden in the SmartArt data model.");
}
presentation.save("CheckSmartArtHiddenProperty.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Obtener o establecer el diseño del organigrama
Para diagramas SmartArt que usan un diseño de organigrama, SmartArtNode.getOrganizationChartLayout y SmartArtNode.setOrganizationChartLayout definen cómo se disponen los nodos hijos bajo un nodo padre. Por ejemplo, puedes establecer que los nodos hijos cuelguen a la izquierda, a la derecha o a ambos lados, según el OrganizationChartLayoutType seleccionado.
El siguiente ejemplo crea un organigrama y establece el diseño del primer nodo al valor OrganizationChartLayoutType LeftHanging. El índice base cero 0 selecciona el primer nodo de nivel superior; sus nodos hijos usan la disposición seleccionada. La presentación modificada se guarda a continuación.
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
let presentation = new aspose.slides.Presentation();
try {
let slide = presentation.getSlides().get_Item(0);
let smartArt = slide.getShapes().addSmartArt(10, 10, 400, 300, aspose.slides.SmartArtLayoutType.OrganizationChart);
let rootNode = smartArt.getNodes().get_Item(0);
rootNode.setOrganizationChartLayout(aspose.slides.OrganizationChartLayoutType.LeftHanging);
presentation.save("OrganizationChartLayout.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Crear un organigrama con imágenes
Un organigrama con imágenes es un diseño SmartArt pensado para diagramas jerárquicos que incluyen marcadores de posición de imagen. Usa el valor SmartArtLayoutType PictureOrganizationChart al añadir el objeto SmartArt a una diapositiva. Este ejemplo guarda un diagrama con marcadores de posición de imagen; no rellena los marcadores con imágenes.
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
let presentation = new aspose.slides.Presentation();
try {
let slide = presentation.getSlides().get_Item(0);
let smartArt = slide.getShapes().addSmartArt(0, 0, 400, 400, aspose.slides.SmartArtLayoutType.PictureOrganizationChart);
presentation.save("PictureOrganizationChart.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Convertir diagramas heredados en grupos de formas
Al modernizar una presentación existente, puede que necesites actualizar un organigrama creado originalmente en PowerPoint 97–2003. Aspose.Slides representa estos diagramas heredados como objetos LegacyDiagram. Usa LegacyDiagram.convertToGroupShape para convertir un diagrama en un grupo de formas y poder editar los elementos visuales individualmente. Consulta la LegacyDiagram API Reference para obtener más detalles.
La conversión añade un nuevo grupo a la colección de formas sin eliminar el diagrama original. Tras una conversión exitosa, elimina el original con ShapeCollection.remove para evitar contenido duplicado. Agrupa los diagramas heredados en una lista antes de convertirlos, de modo que añadir y eliminar formas no interrumpa la iteración.
El siguiente ejemplo abre una presentación, busca en cada diapositiva, convierte los diagramas en grupos de formas y guarda la presentación actualizada como PPTX.
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");
let presentation = new aspose.slides.Presentation("legacy-diagrams.ppt");
try {
let slides = presentation.getSlides();
for (let slideIndex = 0; slideIndex < slides.size(); slideIndex++) {
let slide = slides.get_Item(slideIndex);
let shapes = slide.getShapes();
let legacyDiagrams = [];
for (let shapeIndex = 0; shapeIndex < shapes.size(); shapeIndex++) {
let shape = shapes.get_Item(shapeIndex);
if (java.instanceOf(shape, "com.aspose.slides.ILegacyDiagram")) {
legacyDiagrams.push(shape);
}
}
for (let legacyDiagram of legacyDiagrams) {
let groupShape = legacyDiagram.convertToGroupShape();
if (groupShape != null) {
shapes.remove(legacyDiagram);
}
}
}
presentation.save("modernized.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
La presentación guardada contiene grupos de formas editables en lugar de los diagramas heredados convertidos, sin diagramas originales restantes. Abre el PPTX en PowerPoint para editar los elementos individuales dentro de cada grupo, como su texto, relleno o posición.
Preguntas frecuentes
¿SmartArt admite espejado o inversión para idiomas RTL?
Sí. El método SmartArt.setReversed cambia la dirección del diagrama de izquierda a derecha a derecha a izquierda, o viceversa, cuando el diseño de SmartArt seleccionado permite la inversión.
¿Cómo puedo copiar SmartArt en la misma diapositiva o a otra presentación manteniendo el formato?
Puedes clonar la forma SmartArt con ShapeCollection.addClone o clonar toda la diapositiva que contiene el SmartArt. Ambos enfoques conservan el tamaño, la posición y el formato.
¿Cómo renderizo SmartArt a una imagen raster para vista previa o exportación web?
Renderizar la diapositiva o toda la presentación a PNG o JPEG. SmartArt se renderiza como parte de la diapositiva.
¿Cómo puedo encontrar un objeto SmartArt específico en una diapositiva si hay varios?
Utiliza Shape.setAlternativeText o Shape.setName para asignar un texto alternativo o nombre distintivo a la forma SmartArt, busca ese valor en BaseSlide.getShapes y, a continuación, verifica que la forma coincidente sea un SmartArt.