Hantera SmartArt i PowerPoint-presentationer med PHP

Översikt

SmartArt är ett PowerPoint‑diagram som består av noder, nodformer och en layout. Med Aspose.Slides för PHP via Java kan du skapa SmartArt, läsa text från dess noder, ändra dess layout, inspektera dolda noder, konfigurera organisationsdiagramlayouter och skapa bild‑organisationsdiagram.

Hämta text från ett SmartArt‑objekt

En SmartArt‑nod kan innehålla en eller flera former. För att läsa text från nodformerna, iterera genom SmartArt::getAllNodes, och läs sedan den TextFrame som returneras av SmartArtShape::getTextFrame.

Exemplet kräver en presentation med minst en bild och ett SmartArt‑objekt som den första formen på den bilden. Det skriver ut varje tillgänglig textram till konsolen.

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();
}

Ändra layouttypen för ett SmartArt‑objekt

SmartArt‑layouten styr hur noder ordnas och kopplas ihop. Följande exempel skapar ett SmartArt‑objekt med SmartArtLayoutType‑värdet BasicBlockList, ändrar det till värdet BasicProcess och sparar presentationen. Positionen och storleken som skickas till ShapeCollection::addSmartArt mäts i punkter. Använd SmartArt::setLayout för att ändra layouten.

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();
}

Kontrollera om en SmartArt‑nod är dold

SmartArtNode::isHidden visar om noden är dold i SmartArt‑datamodellen. Dolda noder kan finnas i strukturen även när den valda layouten inte visar dem som synliga diagram­element.

Följande exempel lägger till en nod i ett SmartArt‑objekt som använder SmartArtLayoutType‑värdet RadialCycle och kontrollerar den tillagda nodens dolda tillstånd. Det skriver ut ett meddelande om noden är dold och sparar diagrammet.

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();
}

Hämta eller ange layouten för organisationsdiagrammet

För SmartArt‑diagram som använder en organisationsdiagram‑layout definierar SmartArtNode::getOrganizationChartLayout och SmartArtNode::setOrganizationChartLayout hur barnnoder placeras under en föräldranod. Till exempel kan du ställa in att barnnoder hänger från vänster, höger eller båda sidor, beroende på den valda OrganizationChartLayoutType.

Följande exempel skapar ett organisationsdiagram och sätter layouten för den första noden till OrganizationChartLayoutType‑värdet LeftHanging. Det nollbaserade indexet 0 väljer den första överordnade noden; dess barnnoder använder den valda arrangemanget. Den modifierade presentationen sparas sedan.

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();
}

Skapa ett bild‑organisationsdiagram

Ett bild‑organisationsdiagram är en SmartArt‑layout avsedd för hierarkidiagram som innehåller bildplatshållare. Använd SmartArtLayoutType‑värdet PictureOrganizationChart när du lägger till SmartArt‑objektet på en bild. Detta exempel sparar ett diagram med bildplatshållare; det fyller inte i platshållarna med bilder.

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();
}

Konvertera äldre diagram till grupper av former

När du moderniserar en befintlig presentation kan du behöva uppdatera ett organisationsdiagram som ursprungligen skapades i PowerPoint 97–2003. Aspose.Slides representerar dessa äldre diagram som LegacyDiagram‑objekt. Använd LegacyDiagram::convertToGroupShape för att konvertera ett diagram till en grupp av former så att du kan redigera enskilda visuella element. Se LegacyDiagram API Reference för detaljer.

Konverteringen lägger till en ny grupp i form‑samlingen utan att ta bort det ursprungliga diagrammet. Efter lyckad konvertering, ta bort originalet med ShapeCollection::remove för att undvika duplicerat innehåll. Samla de äldre diagrammen i en lista innan du konverterar dem så att tillägg och borttagning av former inte stör iterationen.

Följande exempel öppnar en presentation, söker igenom varje bild, konverterar diagrammen till grupper av former och sparar den uppdaterade presentationen som 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();
}

Den sparade presentationen innehåller redigerbara grupper av former i stället för de konverterade äldre diagrammen, utan att de ursprungliga diagrammen kvarstår. Öppna PPTX‑filen i PowerPoint för att redigera enskilda element i varje grupp, såsom deras text, fyllning eller position.

Vanliga frågor

Stöder SmartArt spegling eller omvändning för RTL‑språk?

Ja. Metoden SmartArt::setReversed ändrar diagrammets riktning från vänster‑till‑höger till höger‑till‑vänster, eller tillbaka, när den valda SmartArt‑layouten stödjer omvändning.

Hur kan jag kopiera SmartArt till samma bild eller till en annan presentation samtidigt som formateringen bevaras?

Du kan klona SmartArt‑formen med ShapeCollection::addClone eller klona hela bilden som innehåller SmartArt. Båda metoderna bevarar storlek, position och formatering.

Hur renderar jag SmartArt till en rasterbild för förhandsgranskning eller webbuttag?

Rendera bilden eller hela presentationen till PNG eller JPEG. SmartArt renderas som en del av bilden.

Hur kan jag hitta ett specifikt SmartArt‑objekt på en bild om det finns flera?

Använd Shape::setAlternativeText eller Shape::setName för att tilldela en tydlig alternativ text eller ett namn till SmartArt‑formen, sök efter det värdet i BaseSlide::getShapes, och kontrollera sedan att den matchande formen är en SmartArt.