Esta página trata de mostrar las características básicas de la librería NRtfTree mediante ejemplos sencillos. Veremos cómo cargar documentos y trabajar con los árboles RTF resultantes.
I. Trabajando con árboles RTF
- Cargar un documento RTF desde un fichero.
- Cargar un documento RTF desde una cadena de texto.
- Guardar un árbol RTF a un fichero.
- Obtener el código RTF de un árbol.
- Obtener el árbol RTF de un documento.
- Obtener la tabla de colores.
- Obtener la tabla de fuentes.
- Obtener las propiedades de un documento.
II. Trabajando con nodos RTF
- Obtener el código RTF de un nodo.
- Tipo, clave y texto de un nodo.
- Parámetro de un nodo.
- Navegación de nodos.
- Buscar nodos por clave.
- Buscar nodos por tipo.
- Crear nuevos nodos.
- Añadir nodos al árbol.
- Nodos de imagen.
- Nodos de objeto.
I. Trabajando con árboles RTF
Cargar un documento RTF desde un fichero
//Create an RTF object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
Cargar un documento RTF desde una cadena de texto
//RTF document in a string
String rtfText =
@"{\rtf1\ansi\ansicpg1252\deff0\deflang1034\deflangfe1034\deftab708" +
@"{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}}" +
@"\viewkind4\uc1\pard\nowidctlpar\lang3082\f0\fs24 example\par}";
//Create an RTF object
RtfTree tree2 = new RtfTree();
//Load an RTF document from a string
tree2.LoadRtfText(rtfText);
Guardar un árbol RTF a un fichero
//RTF document in a string
String rtfText =
@"{\rtf1\ansi\ansicpg1252\deff0\deflang1034\deflangfe1034\deftab708" +
@"{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}}" +
@"\viewkind4\uc1\pard\nowidctlpar\lang3082\f0\fs24 example\par}";
//Create an RtfTree object
RtfTree tree = new RtfTree();
//Load an RTF document from a string
tree.LoadRtfText(rtfText);
//Save the RTF document to a file
tree.SaveRtf("c:\\Example-SaveRtf.rtf");
Obtener el código RTF de un árbol
//Create an RtfTree object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
//Get and print RTF code
Console.Write(tree.Rtf);
Obtener el árbol RTF de un documento
//Create an RtfTree object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
//Get and print RTF code
Console.Write(tree.ToStringEx());
----------------------------------------------------
OUTPUT
----------------------------------------------------
ROOT
GROUP
KEYWORD: rtf 1
KEYWORD: ansi
KEYWORD: ansicpg 1252
KEYWORD: deff 0
KEYWORD: deflang 1034
KEYWORD: deflangfe 1034
KEYWORD: deftab 708
GROUP
KEYWORD: fonttbl
GROUP
KEYWORD: f 0
KEYWORD: froman
KEYWORD: fprq 2
KEYWORD: fcharset 0
TEXT: Times New Roman;
GROUP
KEYWORD: f 1
KEYWORD: fswiss
KEYWORD: fprq 2
KEYWORD: fcharset 0
TEXT: Arial;
GROUP
KEYWORD: colortbl
TEXT: ;
KEYWORD: red 255
KEYWORD: green 0
KEYWORD: blue 0
TEXT: ;
KEYWORD: red 51
KEYWORD: green 153
KEYWORD: blue 102
TEXT: ;
...
KEYWORD: viewkind 4
KEYWORD: uc 1
KEYWORD: pard
KEYWORD: nowidctlpar
KEYWORD: lang 3082
KEYWORD: f 0
KEYWORD: fs 24
TEXT: Esto es una prueba para
KEYWORD: cf 1
TEXT: probar
...
//Create an RtfTree object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
//Get Font Table
RtfFontTable fonts = tree.GetFontTable();
//Print Font Table
foreach(int i=0; i<fonts.Count; i++)
{
Console.WriteLine(fonts[i]);
}
[/sourcecode]
<strong><a name="example7">Obtener la tabla de fuentes</a></strong>
[sourcecode lang='csharp']
//Create an RtfTree object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
//Get Color Table
RtfColorTable colors = tree.GetColorTable();
//Print Color Table
foreach(int i=0; i<colors.Count; i++)
{
Console.WriteLine(colors[i]);
}
[/sourcecode]
<strong><a name="example8">Obtener las propiedades de un documento</a></strong>
[sourcecode lang='csharp']
//Create an RtfTree object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
//Get Document Properties
InfoGroup info = tree.GetInfoGroup();
//Print some Document Properties
Console.WriteLine("Author: " + info.Author);
Console.WriteLine("Subject: " + info.Subject);
Console.WriteLine("Title: " + info.Title);
Console.WriteLine("Category: " + info.Category);
Console.WriteLine("Num. of Chars: " + info.NumberOfChars);
II. Trabajando con nodos RTF
Obtener el código RTF de un nodo
//Create an RTF object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
//Search Font Table Node
RtfTreeNode ftNode = tree.RootNode.SelectSingleNode("fonttbl");
//Get Font Table Group
RtfTreeNode ftGroup = ftNode.ParentNode;
//Print RTF code
Console.Write(ftGroup.Rtf);
Tipo, clave y texto de un nodo
//Create an RTF object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
//Search Font Table Node
RtfTreeNode ftNode = tree.RootNode.SelectSingleNode("fonttbl");
//Search first Text Node
RtfTreeNode textNode =
tree.RootNode.FirstChild.SelectSingleChildNodeByType(RtfNodeType.Text);
//If (NodeType == Keyword) --> NodeKey returns the keyword
Console.WriteLine("Node type: " + ftNode.NodeType);
Console.WriteLine("Node key: " + ftNode.NodeKey);
//If (NodeType == Text) --> NodeKey returns the text
Console.WriteLine("Node type: " + textNode.NodeType);
Console.WriteLine("Node key: " + textNode.NodeKey);
//Create an RTF object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
//Search First \fs keyword (font size keyword)
RtfTreeNode fsNode = tree.RootNode.SelectSingleNode("fs");
//Print parameter and value
Console.WriteLine("Has Parameter? : " + fsNode.HasParameter);
Console.WriteLine("Parameter Value: " + fsNode.Parameter);
//Create an RTF object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
//Get Root Node
RtfTreeNode node = tree.RootNode;
Console.WriteLine("Root Node: " + node);
//Get First Child
node = node.FirstChild;
Console.WriteLine("First Child: " + node);
//Get First Child
node = node.FirstChild;
Console.WriteLine("First Child: " + node);
//Get Next Sibling
node = node.NextSibling;
Console.WriteLine("Next Sibling: " + node);
//Get Parent Node
node = node.ParentNode;
Console.WriteLine("Parent Node: " + node);
//Create an RTF object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
//Search the first "\fs" keyword
RtfTreeNode node = tree.RootNode.SelectSingleNode("fs");
Console.WriteLine("First \\fs keyword: " + node);
//Search all the "\cf" keywords:
RtfNodeCollection nodes = tree.RootNode.SelectNodes("cf");
Console.WriteLine("All \\cf keywords: ");
foreach(RtfTreeNode n in nodes)
Console.WriteLine("\t" + n);
//Create an RTF object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
//Search the first "\fs" keyword
RtfTreeNode node = tree.RootNode.SelectSingleNodeByType(RtfNodeType.Control);
Console.WriteLine("First control node: " + node);
//Search all the "\cf" keywords:
RtfNodeCollection nodes = tree.RootNode.SelectNodesByType(RtfNodeType.Control);
Console.WriteLine("All control nodes: ");
foreach(RtfTreeNode n in nodes)
Console.WriteLine("\t" + n);
//Create a default node RtfTreeNode defaultNode = new RtfTreeNode(); //Create a Keyword node RtfTreeNode typeNode = new RtfTreeNode(RtfNodeType.Keyword); //Create a full node (Type, Key, HasParameter, Parameter) RtfTreeNode fullNode = new RtfTreeNode(RtfNodeType.Keyword, "cf", true, 1);
//Create an RTF object
RtfTree tree = new RtfTree();
//Load an RTF document from a file
tree.LoadRtfFile("c:\\example.rtf");
//Create a new nodes
RtfTreeNode newLineNode = new RtfTreeNode(RtfNodeType.Keyword,"par",false,0);
RtfTreeNode textNode = new RtfTreeNode(RtfNodeType.Text,"New Text",false,0);
//Append the new node to the tree
tree.RootNode.FirstChild.AppendChild(newLineNode);
tree.RootNode.FirstChild.AppendChild(textNode);
//Save the document
tree.SaveRtf("c:\\newDocument.rtf");
//Create an RTF object
RtfTree arbol = new RtfTree();
//Load an RTF document from a file
arbol.LoadRtfFile("example2.rtf");
//Search all "\pict" nodes (Images)
RtfNodeCollection imageNodes = arbol.RootNode.SelectNodes("pict");
//Save all found images
int i = 1;
foreach (RtfTreeNode node in imageNodes)
{
//Create an image node
ImageNode imageNode = new ImageNode(node.ParentNode);
//Save the image with its original format
imageNode.SaveImage("image" + i + "." +
getExtension(imageNode.ImageFormat));
i++;
}
//Create an RtfTree object
RtfTree arbol = new RtfTree();
//Load an RTF document from a file
arbol.LoadRtfFile("example3.rtf");
//Search the first Object keyword
RtfTreeNode node = arbol.RootNode.SelectSingleNode("object");
//Create an Object Node
ObjectNode objectNode = new ObjectNode(node.ParentNode);
//Print some object information
txtArbol.Text += "Object type: " + objectNode.ObjectType + "\r\n";
txtArbol.Text += "Object class: " + objectNode.ObjectClass + "\r\n";
//Get the "\result" node
RtfTreeNode resultNode = objectNode.ResultNode;
RtfTreeNode auxNode = null;
//If an image exists in the "\result" group
if ((auxNode = resultNode.SelectSingleNode("pict")) != null)
{
//Create an image node
ImageNode imageNode = new ImageNode(auxNode.ParentNode);
//Print some image information
txtArbol.Text += "Image width: " + imageNode.Width/20 + "\r\n";
txtArbol.Text += "Image heigh: " + imageNode.Height/20 + "\r\n";
txtArbol.Text += "Image format: " + imageNode.ImageFormat + "\r\n";
//Save the image
MessageBox.Show("File: image-example3." +
getExtension(imageNode.ImageFormat));
imageNode.SaveImage("image-example3." +
getExtension(imageNode.ImageFormat));
}
else
{
MessageBox.Show("'\result' node contains no images!");
}
1 comentario
[…] donde ire colocando las consultas que más me suelen llegar por correo electrónico, y una nueva sección de ejemplos que espero ir actualizando con pequeños fragmentos de código con los casos de uso más comunes de […]
Comentarios cerrados.