Správa uzlů tvaru SmartArt v prezentacích v .NET
Přehled
Grafika SmartArt v prezentacích PowerPoint je organizována pomocí uzlů, které obsahují text a určují strukturu diagramu. Aspose.Slides umožňuje programově pracovat s těmito uzly SmartArt: přidávat nové uzly a poduzly, vkládat poduzly na konkrétní pozici, přistupovat k existujícím uzlům a číst jejich text, úroveň a pozici.
Tento článek vysvětluje, jak spravovat uzly tvarů SmartArt. Ukazuje, jak uzly odebrat, pracovat s poduzly podle indexu nebo pozice, změnit asistenční uzel na běžný, upravit pozici, velikost a otočení tvarů uzlů SmartArt, nastavit výplňové formáty uzlů a vygenerovat miniaturu pro poduzel SmartArt.
Přidání uzlu SmartArt
Aspose.Slides pro .NET poskytuje nejjednodušší API pro správu tvarů SmartArt nejužitečnějším způsobem. Následující ukázkový kód pomůže přidat uzel a poduzel do tvaru SmartArt.
- Vytvořte instanci třídy Presentation a načtěte prezentaci se SmartArt tvarem.
- Získejte odkaz na první snímek pomocí jeho Indexu.
- Projděte všechny tvary na prvním snímku.
- Zkontrolujte, zda je tvar typu SmartArt, a pokud ano, přetypujte vybraný tvar na SmartArt.
- Přidejte nový uzel do kolekce NodeCollection tvaru SmartArt a nastavte text v TextFrame.
- Nyní přidejte poduzel do nově přidaného uzlu SmartArt a nastavte text v TextFrame.
- Uložte prezentaci.
// Načtěte požadovanou prezentaci
Presentation pres = new Presentation("AddNodes.pptx");
// Traverse through every shape inside first slide
foreach (IShape shape in pres.Slides[0].Shapes)
{
// Zkontrolujte, zda je tvar typu SmartArt
if (shape is Aspose.Slides.SmartArt.SmartArt)
{
// Přetypujte tvar na SmartArt
Aspose.Slides.SmartArt.SmartArt smart = (Aspose.Slides.SmartArt.SmartArt)shape;
// Přidání nového uzlu SmartArt
Aspose.Slides.SmartArt.SmartArtNode TemNode = (Aspose.Slides.SmartArt.SmartArtNode)smart.AllNodes.AddNode();
// Přidání textu
TemNode.TextFrame.Text = "Test";
// Přidání nového poduzlu do nadřazeného uzlu. Bude přidán na konec kolekce
Aspose.Slides.SmartArt.SmartArtNode newNode = (Aspose.Slides.SmartArt.SmartArtNode)TemNode.ChildNodes.AddNode();
// Přidání textu
newNode.TextFrame.Text = "New Node Added";
}
}
// Ukládání prezentace
pres.Save("AddSmartArtNode_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
Přidání uzlu SmartArt na konkrétní pozici
V následujícím ukázkovém kódu je vysvětleno, jak přidat poduzly patřící k příslušným uzlům tvaru SmartArt na určenou pozici.
- Vytvořte instanci třídy
Presentation. - Získejte odkaz na první snímek pomocí jeho Indexu.
- Přidejte do přístupu snímku SmartArt tvar typu StackedList.
- Přistupte k prvnímu uzlu v přidaném tvaru SmartArt.
- Nyní přidejte poduzel pro vybraný uzel na pozici 2 a nastavte jeho text.
- Uložte prezentaci.
// Vytvoření instance prezentace
Presentation pres = new Presentation();
// Přístup k snímku prezentace
ISlide slide = pres.Slides[0];
// Přidání Smart Art IShape
ISmartArt smart = slide.Shapes.AddSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList);
// Přístup k uzlu SmartArt s indexem 0
ISmartArtNode node = smart.AllNodes[0];
// Přidání nového poduzlu na pozici 2 v nadřazeném uzlu
SmartArtNode chNode = (SmartArtNode)((SmartArtNodeCollection)node.ChildNodes).AddNodeByPosition(2);
// Přidat text
chNode.TextFrame.Text = "Sample Text Added";
// Uložit prezentaci
pres.Save("AddSmartArtNodeByPosition_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
Přístup k uzlu SmartArt
Následující ukázkový kód pomůže přistupovat k uzlům uvnitř tvaru SmartArt. Všimněte si, že LayoutType SmartArt nelze měnit, protože je jen pro čtení a nastavený je pouze při vytvoření tvaru SmartArt.
-
Vytvořte instanci třídy
Presentationa načtěte prezentaci se SmartArt tvarem. -
Získejte odkaz na první snímek pomocí jeho Indexu.
-
Projděte všechny tvary na prvním snímku.
-
Zkontrolujte, zda je tvar typu SmartArt, a pokud ano, přetypujte vybraný tvar na SmartArt.
-
Projděte všechny uzly uvnitř tvaru SmartArt.
-
Přistupte a zobrazte informace jako pozice uzlu SmartArt, úroveň a Text.
// Načtěte požadovanou prezentaci Presentation pres = new Presentation("AccessSmartArt.pptx"); // Procházejte všechny tvary na prvním snímku foreach (IShape shape in pres.Slides[0].Shapes) { // Zkontrolujte, zda je tvar typu SmartArt if (shape is Aspose.Slides.SmartArt.SmartArt) { // Přetypujte tvar na SmartArt Aspose.Slides.SmartArt.SmartArt smart = (Aspose.Slides.SmartArt.SmartArt)shape; // Procházejte všechny uzly uvnitř SmartArt for (int i = 0; i < smart.AllNodes.Count; i++) { // Přístup k uzlu SmartArt s indexem i Aspose.Slides.SmartArt.SmartArtNode node = (Aspose.Slides.SmartArt.SmartArtNode)smart.AllNodes[i]; // Výpis parametrů uzlu SmartArt string outString = string.Format("i = {0}, Text = {1}, Level = {2}, Position = {3}", i, node.TextFrame.Text, node.Level, node.Position); Console.WriteLine(outString); } } }
Přístup k poduzlu SmartArt
Následující ukázkový kód pomůže přistupovat k poduzlům patřícím k příslušným uzlům tvaru SmartArt.
- Vytvořte instanci třídy PresentationEx a načtěte prezentaci se SmartArt tvarem.
- Získejte odkaz na první snímek pomocí jeho Indexu.
- Projděte všechny tvary na prvním snímku.
- Zkontrolujte, zda je tvar typu SmartArt, a pokud ano, přetypujte vybraný tvar na SmartArtEx.
- Projděte všechny uzly uvnitř tvaru SmartArt.
- Pro každý vybraný uzel SmartArt projděte všechny poduzly v daném uzlu.
- Přistupte a zobrazte informace jako pozice poduzlu, úroveň a Text.
// Načtěte požadovanou prezentaci
Presentation pres = new Presentation("AccessChildNodes.pptx");
// Procházejte všechny tvary na prvním snímku
foreach (IShape shape in pres.Slides[0].Shapes)
{
// Zkontrolujte, zda je tvar typu SmartArt
if (shape is Aspose.Slides.SmartArt.SmartArt)
{
// Přetypujte tvar na SmartArt
Aspose.Slides.SmartArt.SmartArt smart = (Aspose.Slides.SmartArt.SmartArt)shape;
// Procházejte všechny uzly uvnitř SmartArt
for (int i = 0; i < smart.AllNodes.Count; i++)
{
// Přístup k uzlu SmartArt s indexem i
Aspose.Slides.SmartArt.SmartArtNode node0 = (Aspose.Slides.SmartArt.SmartArtNode)smart.AllNodes[i];
// Procházení poduzlů v uzlu SmartArt na indexu i
for (int j = 0; j < node0.ChildNodes.Count; j++)
{
// Přístup k poduzlu v uzlu SmartArt
Aspose.Slides.SmartArt.SmartArtNode node = (Aspose.Slides.SmartArt.SmartArtNode)node0.ChildNodes[j];
// Výpis parametrů poduzlu SmartArt
string outString = string.Format("j = {0}, Text = {1}, Level = {2}, Position = {3}", j, node.TextFrame.Text, node.Level, node.Position);
Console.WriteLine(outString);
}
}
}
}
Přístup k poduzlu SmartArt na konkrétní pozici
V tomto příkladu se naučíme přistupovat k poduzlům na konkrétní pozici, které patří k příslušným uzlům tvaru SmartArt.
- Vytvořte instanci třídy
Presentation. - Získejte odkaz na první snímek pomocí jeho Indexu.
- Přidejte SmartArt tvar typu StackedList.
- Přistupte k přidanému tvaru SmartArt.
- Přistupte k uzlu s indexem 0 v přístupném tvaru SmartArt.
- Nyní pomocí metody GetNodeByPosition() přistupte k poduzlu na pozici 1 v přístupném uzlu SmartArt.
- Přistupte a zobrazte informace jako pozice poduzlu, úroveň a Text.
// Vytvořte instanci prezentace
Presentation pres = new Presentation();
// Přístup k prvnímu snímku
ISlide slide = pres.Slides[0];
// Přidání tvaru SmartArt na první snímek
ISmartArt smart = slide.Shapes.AddSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList);
// Přístup k uzlu SmartArt s indexem 0
ISmartArtNode node = smart.AllNodes[0];
// Přístup k poduzlu na pozici 1 v nadřazeném uzlu
int position = 1;
SmartArtNode chNode = (SmartArtNode)node.ChildNodes[position];
// Výpis parametrů poduzlu SmartArt
string outString = string.Format("j = {0}, Text = {1}, Level = {2}, Position = {3}", position, chNode.TextFrame.Text, chNode.Level, chNode.Position);
Console.WriteLine(outString);
Odebrání uzlu SmartArt
V tomto příkladu se naučíme odebrat uzly uvnitř tvaru SmartArt.
- Vytvořte instanci třídy
Presentationa načtěte prezentaci se SmartArt tvarem. - Získejte odkaz na první snímek pomocí jeho Indexu.
- Projděte všechny tvary na prvním snímku.
- Zkontrolujte, zda je tvar typu SmartArt, a pokud ano, přetypujte vybraný tvar na SmartArt.
- Zkontrolujte, zda má SmartArt více než 0 uzlů.
- Vyberte uzel SmartArt, který má být smazán.
- Nyní odeberte vybraný uzel pomocí metody RemoveNode() a uložte prezentaci.
// Načtěte požadovanou prezentaci
using (Presentation pres = new Presentation("RemoveNode.pptx"))
{
// Procházejte všechny tvary na prvním snímku
foreach (IShape shape in pres.Slides[0].Shapes)
{
// Zkontrolujte, zda je tvar typu SmartArt
if (shape is ISmartArt)
{
// Přetypujte tvar na SmartArtEx
ISmartArt smart = (ISmartArt)shape;
if (smart.AllNodes.Count > 0)
{
// Přístup k uzlu SmartArt s indexem 0
ISmartArtNode node = smart.AllNodes[0];
// Odstranění vybraného uzlu
smart.AllNodes.RemoveNode(node);
}
}
}
// Uložit prezentaci
pres.Save("RemoveSmartArtNode_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
}
Odebrání uzlu SmartArt na konkrétní pozici
V tomto příkladu se naučíme odebrat uzly uvnitř tvaru SmartArt na konkrétní pozici.
- Vytvořte instanci třídy
Presentationa načtěte prezentaci se SmartArt tvarem. - Získejte odkaz na první snímek pomocí jeho Indexu.
- Projděte všechny tvary na prvním snímku.
- Zkontrolujte, zda je tvar typu SmartArt, a pokud ano, přetypujte vybraný tvar na SmartArt.
- Vyberte uzel tvaru SmartArt s indexem 0.
- Nyní zkontrolujte, zda má vybraný uzel SmartArt více než 2 poduzly.
- Nyní odeberte uzel na pozici 1 pomocí metody RemoveNodeByPosition().
- Uložte prezentaci.
// Načtěte požadovanou prezentaci
Presentation pres = new Presentation("RemoveNodeSpecificPosition.pptx");
// Procházejte všechny tvary na prvním snímku
foreach (IShape shape in pres.Slides[0].Shapes)
{
// Zkontrolujte, zda je tvar typu SmartArt
if (shape is Aspose.Slides.SmartArt.SmartArt)
{
// Přetypujte tvar na SmartArt
Aspose.Slides.SmartArt.SmartArt smart = (Aspose.Slides.SmartArt.SmartArt)shape;
if (smart.AllNodes.Count > 0)
{
// Přístup k uzlu SmartArt s indexem 0
Aspose.Slides.SmartArt.ISmartArtNode node = smart.AllNodes[0];
if (node.ChildNodes.Count >= 2)
{
// Odstranění poduzlu na pozici 1
((Aspose.Slides.SmartArt.SmartArtNodeCollection)node.ChildNodes).RemoveNode(1);
}
}
}
}
// Uložit prezentaci
pres.Save("RemoveSmartArtNodeByPosition_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
Nastavení vlastní pozice poduzlu v objektu SmartArt
Aspose.Slides pro .NET nyní podporuje nastavení vlastností X a Y tvaru SmartArtShape. Níže uvedený úryvek kódu ukazuje, jak nastavit vlastní pozici, velikost a otočení tvaru SmartArtShape; také poznamenáváme, že přidání nových uzlů způsobí přepočet pozic a velikostí všech uzlů.
// Načtěte požadovanou prezentaci
Presentation pres = new Presentation("AccessChildNodes.pptx");
{
ISmartArt smart = pres.Slides[0].Shapes.AddSmartArt(20, 20, 600, 500, SmartArtLayoutType.OrganizationChart);
// Přesuňte tvar SmartArt na novou pozici
ISmartArtNode node = smart.AllNodes[1];
ISmartArtShape shape = node.Shapes[1];
shape.X += (shape.Width * 2);
shape.Y -= (shape.Height / 2);
// Změňte šířku tvaru SmartArt
node = smart.AllNodes[2];
shape = node.Shapes[1];
shape.Width += (shape.Width / 2);
// Změňte výšku tvaru SmartArt
node = smart.AllNodes[3];
shape = node.Shapes[1];
shape.Height += (shape.Height / 2);
// Změňte rotaci tvaru SmartArt
node = smart.AllNodes[4];
shape = node.Shapes[1];
shape.Rotation = 90;
pres.Save("SmartArt.pptx", SaveFormat.Pptx);
}
Kontrola asistenčního uzlu
V následujícím ukázkovém kódu zjistíme, jak identifikovat asistenční uzly v kolekci uzlů SmartArt a měnit je.
- Vytvořte instanci třídy PresentationEx a načtěte prezentaci se SmartArt tvarem.
- Získejte odkaz na druhý snímek pomocí jeho Indexu.
- Projděte všechny tvary na prvním snímku.
- Zkontrolujte, zda je tvar typu SmartArt, a pokud ano, přetypujte vybraný tvar na SmartArtEx.
- Projděte všechny uzly uvnitř tvaru SmartArt a zjistěte, zda jsou asistenčními uzly.
- Změňte stav asistenčního uzlu na běžný uzel.
- Uložte prezentaci.
// Vytvoření instance prezentace
using (Presentation pres = new Presentation("AssistantNode.pptx"))
{
// Procházení všech tvarů na prvním snímku
foreach (IShape shape in pres.Slides[0].Shapes)
{
// Zkontrolujte, zda je tvar typu SmartArt
if (shape is Aspose.Slides.SmartArt.ISmartArt)
{
// Přetypujte tvar na SmartArtEx
Aspose.Slides.SmartArt.ISmartArt smart = (Aspose.Slides.SmartArt.SmartArt)shape;
// Procházení všech uzlů tvaru SmartArt
foreach (Aspose.Slides.SmartArt.ISmartArtNode node in smart.AllNodes)
{
String tc = node.TextFrame.Text;
// Zkontrolujte, zda je uzel asistenční
if (node.IsAssistant)
{
// Nastavení asistenčního uzlu na false a jeho převod na běžný uzel
node.IsAssistant = false;
}
}
}
}
// Uložit prezentaci
pres.Save("ChangeAssitantNode_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
}
Nastavení výplňového formátu uzlu
Aspose.Slides pro .NET umožňuje přidávat vlastní tvary SmartArt a nastavit jejich výplňové formáty. Tento článek vysvětluje, jak vytvářet a přistupovat k tvarům SmartArt a nastavit jejich výplňový formát pomocí Aspose.Slides pro .NET.
Postupujte podle následujících kroků:
- Vytvořte instanci třídy
Presentation. - Získejte odkaz na snímek pomocí jeho indexu.
- Přidejte tvar SmartArt nastavením jeho LayoutType.
- Nastavte FillFormat pro uzly tvaru SmartArt.
- Uložte upravenou prezentaci jako soubor PPTX.
using (Presentation presentation = new Presentation())
{
// Přístup k snímku
ISlide slide = presentation.Slides[0];
// Přidání tvaru SmartArt a uzlů
var chevron = slide.Shapes.AddSmartArt(10, 10, 800, 60, SmartArtLayoutType.ClosedChevronProcess);
var node = chevron.AllNodes.AddNode();
node.TextFrame.Text = "Some text";
// Nastavení výplňové barvy uzlu
foreach (var item in node.Shapes)
{
item.FillFormat.FillType = FillType.Solid;
item.FillFormat.SolidFillColor.Color = Color.Red;
}
// Ukládání prezentace
presentation.Save("FillFormat_SmartArt_ShapeNode_out.pptx", SaveFormat.Pptx);
}
Generování miniatury poduzlu SmartArt
Vývojáři mohou vygenerovat miniaturu poduzlu SmartArt podle následujících kroků:
- Vytvořte instanci třídy
Presentation, která představuje soubor PPTX. - Přidejte SmartArt.
- Získejte odkaz na uzel pomocí jeho Indexu.
- Získejte obrázek miniatury.
- Uložte obrázek miniatury v libovolném požadovaném formátu.
Příklad níže generuje miniaturu poduzlu SmartArt
using (Presentation presentation = new Presentation())
{
ISlide slide = presentation.Slides[0];
ISmartArt smartArt = slide.Shapes.AddSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicCycle);
ISmartArtNode node = smartArt.Nodes[1];
using (IImage image = node.Shapes[0].GetImage())
{
image.Save("SmartArt_ChildNote_Thumbnail_out.jpeg", ImageFormat.Jpeg);
}
}
Často kladené otázky
Je animace SmartArt podporována?
Ano. SmartArt je zpracován jako běžný tvar, takže můžete použít standardní animace (vstup, výstup, zdůraznění, trajektorie pohybu) a upravit časování. Po potřeby můžete animovat i tvary uvnitř uzlů SmartArt.
Jak spolehlivě najít konkrétní SmartArt na snímku, když jeho interní ID není známé?
Použijte a hledejte podle alternativního textu. Nastavením jedinečného AltTextu na SmartArt jej můžete programově najít bez spoléhání se na interní identifikátory.
Zachová se vzhled SmartArt při převodu prezentace do PDF?
Ano. Aspose.Slides vykresluje SmartArt s vysokou vizuální věrností během exportu do PDF, zachovává rozvržení, barvy i efekty.
Mohu získat obrázek celého SmartArt (pro náhledy nebo zprávy)?
Ano. Můžete renderovat tvar SmartArt do rastrů formátů nebo do SVG pro škálovatelný vektorový výstup, což je vhodné pro miniatury, zprávy či použití na webu.