NRtfTree permite la modificación de árboles RTF mediante la eliminación, modificación y creación de nuevos nodos en cualquier lugar del árbol. Para ello nos proporciona diversos constructores y métodos públicos que nos facilitarán esta tarea.
Creación de nuevos nodos RTF
Para la creación de nuevos nodos tendremos disponibles varios constructores de la clase RtfTreeNode:
//Crea un nuevo nodo vacío RtfTreeNode node = new RtfTreeNode(); //Crea un nuevo nodo de tipo Keyword sin parámetro RtfTreeNode node = new RtfTreeNode(RtfNodeType.Keyword); //Crea un nuevo nodo de tipo Keyword, //palabra de control "\fs" y parámetro con valor 1 RtfTreeNode node = new RtfTreeNode(RtfNodeType.Keyword, "fs", true, 1);
Una vez creado un nodo éste también puede ser editado a través de sus propiedades:
- NodeType (tipo de nodo, enumeración RtfNodeType)
- NodeKey (palabra de control)
- HasParameter (indica si el nodo tiene parámetro asociado)
- Parameter (valor del parámetro, 0 si HasParameter es falso)
Inserción de nodos hijos
Los nodos de tipo grupo (RtfNodeType.Group) pueden contener nodos hijos. Para insertarlos pueden utilizarse los métodos AppendChild(), InsertChild(), o acceder directamente a los métodos de su propiedad ChildNodes.
//Inserta un nuevo nodo al final de la lista de hijos node.AppendChild(nuevoNodo); //Inserta un nuevo nodo en la posición 3 de la lista de hijos node.InsertChild(3, nuevoNodo); //Inserta un nuevo nodo al final de la lista de hijos node.ChildNodes.Add(nuevoNodo); //Inserta un conjunto de nodos al final de la lista de hijos node.ChildNodes.AddRange(coleccionNodos); //Inserta un nuevo nodo en la posición 3 de la lista de hijos node.ChildNodes.Insert(3, nuevoNodo);
Eliminación de nodos
Para eliminar nodos de un árbol RTF existen también diversos métodos dependiendo de si necesitamos hacerlo por su posición en el árbol o por su valor. Además, al igual que en el caso de la inserción de nodos, podremos hacerlo utilizando los métodos propios del nodo, o los de su colección de nodos hijos ChildNodes.
//Elimina el cuarto nodo de la lista de hijos node.RemoveChild(3); //Elimina un nodo concreto de la lista de hijos node.RemoveChild(nodoAEliminar); //Elimina el cuarto nodo de la lista de hijos node.ChildNodes.RemoveAt(3); //Elimina 5 nodos hijos a partir de la posición 3 node.ChildNodes.RemoveRange(3, 5);
Creación directa de árboles RTF
Vistos los métodos de creación, inserción y ensamblaje de nodos RTF. ya deberíamos saber construir un árbol RTF desde cero utilizando de forma ordenada todos estos recursos. Vemos por ejemplo como construir el siguiente documento sencillo:
{\rtf1\ansi{\fonttbl{\f0 Arial;}}\pard Prueba\par}
RtfTree tree = new RtfTree(); RtfTreeNode main = new RtfTreeNode(RtfNodeType.Group); main.AppendChild( new RtfTreeNode(RtfNodeType.Keyword, "rtf", true, 1)); main.AppendChild( new RtfTreeNode(RtfNodeType.Keyword, "ansi", false, 0)); RtfTreeNode fontTable = new RtfTreeNode(RtfNodeType.Group); fontTable.AppendChild( new RtfTreeNode(RtfNodeType.Keyword, "fonttbl", false, 0)); RtfTreeNode arial = new RtfTreeNode(RtfNodeType.Group); arial.AppendChild( new RtfTreeNode(RtfNodeType.Keyword, "f", true, 0)); arial.AppendChild( new RtfTreeNode(RtfNodeType.Text, "Arial;", false, 0)); fontTable.AppendChild(arial); main.AppendChild(fontTable); main.AppendChild( new RtfTreeNode(RtfNodeType.Keyword, "pard", false, 0)); main.AppendChild( new RtfTreeNode(RtfNodeType.Text, "Prueba", false, 0)); main.AppendChild( new RtfTreeNode(RtfNodeType.Keyword, "par", false, 0)); tree.RootNode.AppendChild(main);