SmartArt in PowerPoint-Präsentationen mit PHP verwalten
Übersicht
SmartArt ist ein PowerPoint‑Diagramm, das aus Knoten, Knotenshapes und einem Layout besteht. Mit Aspose.Slides für PHP via Java können Sie SmartArt erstellen, Text aus seinen Knoten lesen, das Layout ändern, ausgeblendete Knoten untersuchen, Organisations‑Diagrammlayouts konfigurieren und Bild‑Organisationsdiagramme erstellen.
Text aus einem SmartArt‑Objekt abrufen
Ein SmartArt‑Knoten kann ein oder mehrere Shapes enthalten. Um Text aus den Knotenshapes zu lesen, iterieren Sie über SmartArt::getAllNodes, dann lesen Sie das von SmartArtShape::getTextFrame zurückgegebene TextFrame.
Das Beispiel erfordert eine Präsentation mit mindestens einer Folie und einem SmartArt‑Objekt als erstes Shape auf dieser Folie. Es gibt jeden verfügbaren TextFrame in der Konsole aus.
use aspose\slides\Presentation;
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->get_Item(0);
for ($i = 0; $i < java_values($smartArt->getAllNodes()->size()); $i++) {
$node = $smartArt->getAllNodes()->get_Item($i);
for ($j = 0; $j < java_values($node->getShapes()->size()); $j++) {
$nodeShape = $node->getShapes()->get_Item($j);
if (!java_is_null($nodeShape->getTextFrame())) {
echo $nodeShape->getTextFrame()->getText() . PHP_EOL;
}
}
}
} finally {
$presentation->dispose();
}
Layouttyp eines SmartArt‑Objekts ändern
Das SmartArt‑Layout bestimmt, wie Knoten angeordnet und verbunden werden. Das folgende Beispiel erstellt ein SmartArt‑Objekt mit dem SmartArtLayoutType BasicBlockList‑Wert, ändert ihn zu dem Wert BasicProcess und speichert die Präsentation. Die an ShapeCollection::addSmartArt übergebenen Position und Größe werden in Punkten gemessen. Verwenden Sie SmartArt::setLayout, um das Layout zu ändern.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SmartArtLayoutType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::BasicBlockList);
$smartArt->setLayout(SmartArtLayoutType::BasicProcess);
$presentation->save("ChangeSmartArtLayout.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Prüfen, ob ein SmartArt‑Knoten ausgeblendet ist
SmartArtNode::isHidden gibt an, ob der Knoten im SmartArt‑Datenmodell ausgeblendet ist. Ausgeblendete Knoten können in der Struktur vorhanden sein, selbst wenn das ausgewählte Layout sie nicht als sichtbare Diagrammelemente anzeigt.
Das folgende Beispiel fügt einem SmartArt‑Objekt, das den SmartArtLayoutType RadialCycle‑Wert verwendet, einen Knoten hinzu und prüft den ausgeblendeten Zustand des hinzugefügten Knotens. Es gibt eine Meldung aus, wenn der Knoten ausgeblendet ist, und speichert das Diagramm.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SmartArtLayoutType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::RadialCycle);
$node = $smartArt->getAllNodes()->addNode();
$isHidden = java_values($node->isHidden());
if ($isHidden) {
echo "The node is hidden in the SmartArt data model." . PHP_EOL;
}
$presentation->save("CheckSmartArtHiddenProperty.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Organisation‑Diagrammlayout abrufen oder festlegen
Für SmartArt‑Diagramme, die ein Organisations‑Chart‑Layout verwenden, definieren SmartArtNode::getOrganizationChartLayout und SmartArtNode::setOrganizationChartLayout, wie Kindknoten unter einem Elternknoten angeordnet werden. Beispielsweise können Sie Kindknoten je nach ausgewähltem OrganizationChartLayoutType links-, rechts- oder beidseitig hängen lassen.
Das folgende Beispiel erstellt ein Organisations‑Chart und setzt das Layout für den ersten Knoten auf den OrganizationChartLayoutType LeftHanging‑Wert. Der nullbasierte Index 0 wählt den ersten Knoten der obersten Ebene aus; seine Kindknoten verwenden die gewählte Anordnung. Die modifizierte Präsentation wird anschließend gespeichert.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SmartArtLayoutType;
use aspose\slides\OrganizationChartLayoutType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::OrganizationChart);
$rootNode = $smartArt->getNodes()->get_Item(0);
$rootNode->setOrganizationChartLayout(OrganizationChartLayoutType::LeftHanging);
$presentation->save("OrganizationChartLayout.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Bildorganisationsdiagramm erstellen
Ein Bild‑Organisationsdiagramm ist ein SmartArt‑Layout, das für Hierarchiediagramme mit Bild‑Platzhaltern konzipiert ist. Verwenden Sie den SmartArtLayoutType PictureOrganizationChart‑Wert, wenn Sie das SmartArt‑Objekt zu einer Folie hinzufügen. Dieses Beispiel speichert ein Diagramm mit Bild‑Platzhaltern; es füllt die Platzhalter nicht mit Bildern.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SmartArtLayoutType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->addSmartArt(0, 0, 400, 400, SmartArtLayoutType::PictureOrganizationChart);
$presentation->save("PictureOrganizationChart.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Alte Diagramme in Gruppen von Shapes konvertieren
Beim Modernisieren einer bestehenden Präsentation müssen Sie möglicherweise ein ursprünglich in PowerPoint 97–2003 erstelltes Organisations‑Chart aktualisieren. Aspose.Slides stellt diese Altdiagramme als LegacyDiagram‑Objekte dar. Verwenden Sie LegacyDiagram::convertToGroupShape, um ein Diagramm in eine Gruppe von Shapes zu konvertieren, sodass Sie einzelne Bildelemente bearbeiten können. Weitere Details finden Sie in der LegacyDiagram API Reference.
Die Konvertierung fügt der Shape‑Sammlung eine neue Gruppe hinzu, ohne das ursprüngliche Diagramm zu entfernen. Nach erfolgreicher Konvertierung entfernen Sie das Original mit ShapeCollection::remove, um doppelte Inhalte zu vermeiden. Sammeln Sie die Altdiagramme vor der Konvertierung in einer Liste, damit das Hinzufügen und Entfernen von Shapes die Iteration nicht stört.
Das folgende Beispiel öffnet eine Präsentation, durchsucht jede Folie, konvertiert die Diagramme in Gruppen von Shapes und speichert die aktualisierte Präsentation als PPTX.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("legacy-diagrams.ppt");
try {
$legacyDiagramType = new JavaClass("com.aspose.slides.ILegacyDiagram");
for ($i = 0; $i < java_values($presentation->getSlides()->size()); $i++) {
$slide = $presentation->getSlides()->get_Item($i);
$legacyDiagrams = [];
for ($j = 0; $j < java_values($slide->getShapes()->size()); $j++) {
$shape = $slide->getShapes()->get_Item($j);
if (java_instanceof($shape, $legacyDiagramType)) {
$legacyDiagrams[] = $shape;
}
}
foreach ($legacyDiagrams as $legacyDiagram) {
$groupShape = $legacyDiagram->convertToGroupShape();
if (!java_is_null($groupShape)) {
$slide->getShapes()->remove($legacyDiagram);
}
}
}
$presentation->save("modernized.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Die gespeicherte Präsentation enthält bearbeitbare Shape‑Gruppen anstelle der konvertierten Altdiagramme, wobei keine Originaldiagramme mehr vorhanden sind. Öffnen Sie die PPTX in PowerPoint, um einzelne Elemente innerhalb jeder Gruppe zu bearbeiten, z. B. deren Text, Füllung oder Position.
FAQ
Unterstützt SmartArt das Spiegeln oder Umkehren für RTL‑Sprachen?
Ja. Die SmartArt::setReversed Methode wechselt die Diagrammrichtung von links‑nach‑rechts zu rechts‑nach‑links oder zurück, wenn das ausgewählte SmartArt‑Layout die Umkehrung unterstützt.
Wie kann ich SmartArt auf dieselbe Folie oder in eine andere Präsentation kopieren und dabei die Formatierung beibehalten?
Sie können das SmartArt‑Shape mit SmartArt‑Shape duplizieren mittels ShapeCollection::addClone klonen oder die gesamte Folie, die das SmartArt enthält, mit gesamte Folie duplizieren duplizieren. Beide Ansätze bewahren Größe, Position und Formatierung.
Wie rendere ich SmartArt zu einem Rasterbild für die Vorschau oder den Web‑Export?
Folie rendern oder die gesamte Präsentation in PNG oder JPEG. SmartArt wird dabei als Teil der Folie gerendert.
Wie finde ich ein bestimmtes SmartArt‑Objekt auf einer Folie, wenn mehrere vorhanden sind?
Verwenden Sie Shape::setAlternativeText oder Shape::setName, um dem SmartArt‑Shape einen eindeutigen Alternativtext zuzuweisen bzw. ihm einen Namen zu geben, suchen Sie danach in BaseSlide::getShapes und prüfen Sie anschließend, ob das gefundene Shape ein SmartArt ist.