SmartArt kezelése PowerPoint prezentációkban C++ használatával
Áttekintés
A SmartArt egy PowerPoint diagram, amely csomópontokból, csomópont alakzatokból és egy elrendezésből áll. Az Aspose.Slides for C++ segítségével létrehozhat SmartArt-ot, beolvashatja a szöveget a csomópontjaiból, megváltoztathatja az elrendezését, ellenőrizheti a rejtett csomópontokat, konfigurálhatja a szervezeti diagram elrendezéseket, és létrehozhat képes szervezeti diagramokat.
Szöveg lekérése egy SmartArt objektumból
Egy SmartArt csomópont egy vagy több alakzatot tartalmazhat. A csomópont alakzatok szövegének beolvasásához iteráljon a ISmartArt::get_AllNodes, majd olvassa el a ITextFrame amelyet a ISmartArtShape::get_TextFrame visszaad.
A példa egy legalább egy diát tartalmazó prezentációt, valamint egy SmartArt objektumot igényel, amely az adott dián az első alakzat. Kiírja az összes elérhető szövegkeretet a konzolra.
#include <DOM/ISlide.h>
#include <DOM/ITextFrame.h>
#include <DOM/Presentation.h>
#include <DOM/SmartArt/ISmartArt.h>
#include <DOM/SmartArt/ISmartArtNode.h>
#include <DOM/SmartArt/ISmartArtNodeCollection.h>
#include <DOM/SmartArt/ISmartArtShape.h>
#include <DOM/SmartArt/ISmartArtShapeCollection.h>
#include <system/console.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::SmartArt;
using namespace System;
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto slide = presentation->get_Slide(0);
auto smartArt = ExplicitCast<ISmartArt>(slide->get_Shape(0));
for (auto nodeIndex = 0; nodeIndex < smartArt->get_AllNodes()->get_Count(); nodeIndex++)
{
auto node = smartArt->get_AllNodes()->idx_get(nodeIndex);
for (auto shapeIndex = 0; shapeIndex < node->get_Shapes()->get_Count(); shapeIndex++)
{
auto nodeShape = node->get_Shape(shapeIndex);
if (nodeShape->get_TextFrame() != nullptr)
{
Console::WriteLine(nodeShape->get_TextFrame()->get_Text());
}
}
}
presentation->Dispose();
A SmartArt objektum elrendezéstípusának módosítása
A SmartArt elrendezés határozza meg, hogyan vannak a csomópontok elrendezve és összekötve. A következő példa egy SmartArt objektumot hoz létre a SmartArtLayoutType BasicBlockList értékkel, átállítja BasicProcess értékre, és elmenti a prezentációt. A IShapeCollection::AddSmartArt számára megadott pozíciót és méretet pontban mérik. Használja a ISmartArt::set_Layout metódust az elrendezés módosításához.
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/SmartArt/ISmartArt.h>
#include <DOM/SmartArt/SmartArtLayoutType.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SmartArt;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto smartArt = slide->get_Shapes()->AddSmartArt(10.0f, 10.0f, 400.0f, 300.0f, SmartArtLayoutType::BasicBlockList);
smartArt->set_Layout(SmartArtLayoutType::BasicProcess);
presentation->Save(u"ChangeSmartArtLayout.pptx", SaveFormat::Pptx);
presentation->Dispose();
Annak ellenőrzése, hogy egy SmartArt csomópont rejtett-e
Az ISmartArtNode::get_IsHidden azt jelzi, hogy a csomópont rejtett-e a SmartArt adatmodellben. A rejtett csomópontok létezhetnek a struktúrában akkor is, ha a választott elrendezés nem jeleníti meg őket látható diagramelemekként.
A következő példa egy csomópontot ad hozzá egy SmartArt objektumhoz, amely a SmartArtLayoutType RadialCycle értéket használja, és ellenőrzi a hozzáadott csomópont rejtett állapotát. Ha a csomópont rejtett, üzenetet ír ki, és elmenti a diagramot.
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/SmartArt/ISmartArt.h>
#include <DOM/SmartArt/ISmartArtNode.h>
#include <DOM/SmartArt/ISmartArtNodeCollection.h>
#include <DOM/SmartArt/SmartArtLayoutType.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SmartArt;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto smartArt = slide->get_Shapes()->AddSmartArt(10.0f, 10.0f, 400.0f, 300.0f, SmartArtLayoutType::RadialCycle);
auto node = smartArt->get_AllNodes()->AddNode();
auto isHidden = node->get_IsHidden();
if (isHidden)
{
Console::WriteLine(u"The node is hidden in the SmartArt data model.");
}
presentation->Save(u"CheckSmartArtHiddenProperty.pptx", SaveFormat::Pptx);
presentation->Dispose();
A szervezeti diagram elrendezés lekérése vagy beállítása
A szervezeti diagram elrendezést használó SmartArt diagramok esetén az ISmartArtNode::get_OrganizationChartLayout és ISmartArtNode::set_OrganizationChartLayout határozza meg, hogyan rendeződnek a gyermekcsomópontok a szülőcsomópont alatt. Például a gyermekcsomópontok elhelyezhetők balra, jobbra vagy mindkét oldalra, a kiválasztott OrganizationChartLayoutType függvényében.
A következő példa egy szervezeti diagramot hoz létre, és az első csomópont elrendezését a OrganizationChartLayoutType LeftHanging értékre állítja. A 0‑alapú index 0 az első felső szintű csomópontot választja; gyermekcsomópontjai a kiválasztott elrendezést használják. Ezután a módosított prezentációt elmenti.
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/SmartArt/ISmartArt.h>
#include <DOM/SmartArt/ISmartArtNode.h>
#include <DOM/SmartArt/OrganizationChartLayoutType.h>
#include <DOM/SmartArt/SmartArtLayoutType.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SmartArt;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto smartArt = slide->get_Shapes()->AddSmartArt(10.0f, 10.0f, 400.0f, 300.0f, SmartArtLayoutType::OrganizationChart);
auto rootNode = smartArt->get_Node(0);
rootNode->set_OrganizationChartLayout(OrganizationChartLayoutType::LeftHanging);
presentation->Save(u"OrganizationChartLayout.pptx", SaveFormat::Pptx);
presentation->Dispose();
Képes szervezeti diagram létrehozása
A képes szervezeti diagram egy SmartArt elrendezés, amely hierarchiai diagramokhoz készült, és képlehelyeket tartalmaz. A SmartArtLayoutType PictureOrganizationChart értéket használja a SmartArt objektum diára történő hozzáadásakor. Ez a példa egy diagramot ment el képlehelyekkel; a lemezeket képekkel nem tölti fel.
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/SmartArt/SmartArtLayoutType.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::SmartArt;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto smartArt = slide->get_Shapes()->AddSmartArt(0.0f, 0.0f, 400.0f, 400.0f, SmartArtLayoutType::PictureOrganizationChart);
presentation->Save(u"PictureOrganizationChart.pptx", SaveFormat::Pptx);
presentation->Dispose();
Legacy diagramok átalakítása alakzategységekbe
A meglévő prezentáció modernizálásakor előfordulhat, hogy frissíteni kell egy eredetileg PowerPoint 97–2003-ban készült szervezeti diagramot. Az Aspose.Slides ezeket a legacy diagramokat ILegacyDiagram objektumokként ábrázolja. Használja az ILegacyDiagram::ConvertToGroupShape metódust, hogy egy diagramot alakzategységbe konvertáljon, így egyes vizuális elemeket szerkeszthet. A részletekért tekintse meg a LegacyDiagram API Reference oldalt.
A konverzió új csoportot ad a alakzategyűjteményhez az eredeti diagram eltávolítása nélkül. Sikeres konverzió után távolítsa el az eredetit az IShapeCollection::Remove metódussal, hogy elkerülje a duplikált tartalmat. A konvertálás előtt gyűjtse össze a legacy diagramokat egy vektorba, hogy az alakzatok hozzáadása és eltávolítása ne szakítsa meg az iterációt.
A következő példa megnyit egy prezentációt, minden diát átvizsgál, a diagramokat alakzategységgé konvertálja, és elmenti a frissített prezentációt PPTX formátumban.
#include <DOM/ILegacyDiagram.h>
#include <DOM/IGroupShape.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <vector>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"legacy-diagrams.ppt");
for (auto slideIndex = 0; slideIndex < presentation->get_Slides()->get_Count(); slideIndex++)
{
auto slide = presentation->get_Slide(slideIndex);
std::vector<SharedPtr<ILegacyDiagram>> legacyDiagrams;
for (auto shapeIndex = 0; shapeIndex < slide->get_Shapes()->get_Count(); shapeIndex++)
{
auto shape = slide->get_Shape(shapeIndex);
if (ObjectExt::Is<ILegacyDiagram>(shape))
{
auto legacyDiagram = ExplicitCast<ILegacyDiagram>(shape);
legacyDiagrams.push_back(legacyDiagram);
}
}
for (auto legacyDiagram : legacyDiagrams)
{
auto groupShape = legacyDiagram->ConvertToGroupShape();
if (groupShape != nullptr)
{
slide->get_Shapes()->Remove(legacyDiagram);
}
}
}
presentation->Save(u"modernized.pptx", SaveFormat::Pptx);
presentation->Dispose();
Az elmentett prezentáció a konvertált legacy diagramok helyén szerkeszthető alakzategységeket tartalmaz, az eredeti diagramok már nem maradtak. Nyissa meg a PPTX fájlt a PowerPointban, hogy szerkessze az egyes csoportok elemeit, például szövegüket, kitöltésüket vagy pozíciójukat.
GYIK
Támogatja a SmartArt a tükrözést vagy fordítást jobb‑bal (RTL) nyelveknél?
Igen. A SmartArt::set_IsReversed metódus átváltja a diagram irányát balról jobbra jobbra‑balra, vagy vissza, ha a kiválasztott SmartArt elrendezés támogatja a fordítást.
Hogyan másolhatom a SmartArt-ot ugyanarra a diára vagy egy másik prezentációba a formázás megtartása mellett?
A SmartArt alakzat klónozásával a ShapeCollection::AddClone vagy a SmartArt-ot tartalmazó diák klónozásával másolhatja. Mindkét módszer megőrzi a méretet, a pozíciót és a formázást.
Hogyan renderelhetem a SmartArt-ot raszteres képpé előnézethez vagy webes exporthoz?
A dia renderelésével vagy a teljes prezentáció PNG vagy JPEG formátumba exportálásával. A SmartArt a dia részeként kerül renderelésre.
Hogyan találhatok meg egy konkrét SmartArt objektumot egy dián, ha több is van?
Állítson be egy egyedi Shape::set_AlternativeText vagy Shape::set_Name értéket a SmartArt alakzaton, keresse ezt az értéket a BaseSlide::get_Shapes között, majd ellenőrizze, hogy a megtalált alakzat egy ISmartArt.