Inicio Proyectos Librería NRtfTree Documentación NRtfTree Modelo DOM en NRtfTree Creación y eliminación nodos y árboles RTF

Creación y eliminación nodos y árboles RTF

por sgoliver

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

Dejar un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. Aceptar Más Información

Política de Privacidad y Cookies