Inicio Proyectos Librería NRtfTree Documentación NRtfTree Modelo DOM en NRtfTree Carga de documentos RTF con NRtfTree

Carga de documentos RTF con NRtfTree

por sgoliver

El primer paso a la hora de trabajar con documentos RTF mediante NRtfTree es la carga del documento. El proceso de carga será el encargado de leer el código RTF del documento, parsearlo, y construir el árbol RTF equivalente. Como ya comentamos en el apartado de introducción al modelo DOM de NRtfTree, un árbol RTF quedará representado por un objeto de la clase RtfTree, y cada uno de sus nodos será una instancia de RtfTreeNode.

NRtfTree permite cargar documentos desde un fichero en disco o directamente desde una cadena de caracteres. Ambas opciones resultan tan sencillas como llamar al método correspondiente de carga indicando como parámetro la ruta del fichero o la cadena correspondiente.

Así, para cargar un documento RTF desde un fichero de disco procederemos de la siguiente forma:

//Se crea el objeto RtfTree que albergará el árbol RTF
RtfTree tree = new RtfTree();

//Se carga el documento desde un fichero indicando su ruta
int res = tree.LoadRtfFile("midocumento.rtf");

Como vemos, en primer lugar crearemos el objeto RtfTree que va a almacenar el árbol RTF, y en segundo lugar llamamos al método LoadRtfFile() para cargar el documento. El constructor de RtfTree no recibe ningún parámetro, ya que su función es simplemente la de crear un árbol vacío (se crea tan solo el nodo ROOT). Por su parte, el método de carga recibe como parámetro la ruta del fichero a cargar y devuelve un entero con el resultado de la carga, donde un valor 0 indicará que la carga se ha realizado correctamente y un valor -1 indicará que se ha producido algún error.

De forma análoga, la carga de un documento desde una cadena de caracteres se realizaría de la siguiente forma:

//Cadena de caracteres con código RTF
string strdoc =
@"{\rtf1\ansi\ansicpg1252\deff0\deflang1034\deflangfe1034\deftab708" +
@"{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}}" +
@"\viewkind4\uc1\pard\nowidctlpar\lang3082\f0\fs24 example\par}";

//Se crea el objeto RtfTree que albergará el árbol RTF
RtfTree tree = new RtfTree();

//Se carga el documento desde la cadena de caracteres
int res = tree.LoadRtfText(strdoc);

La única diferencia con el ejemplo anterior es la utilización del método LoadRtfText(), que recibe en este caso una cadena de caracteres con el contenido del documento RTF.

La única opción adicional que ofrece NRtfTree a la hora de cargar un documento es la fusión de caracteres especiales con nodos de texto adyacentes. Expliquemos esto un poco. En RTF, algunos caracteres especiales no se incluyen directamente en el codigo, sino que se representan mediante el símbolo de control \’ seguido por su código numérico correspondiente [en hexadecimal] según la codificación utilizada en el documento. Así, como ejemplo que afecta especialmente al idioma castellano, las vocales acentuadas y la letra ñ no aparecen tal cual en el código RTF, sino que aparecen codificadas de la forma descrita. Por ejemplo la vocal acentuada ‘é’ aparecerá como \’e9 .

Si no se indica ninguna opción especial a NRtfTree, cuando la librería genere por ejemplo el árbol RTF correspondiente al texto «apéndice», cuyo código RTF es «ap\’e9ndice», se generarán 3 nodos: un nodo de tipo texto con el contenido «ap», un nodo de tipo control con el parámetro e9 (realmente en el nodo se almacena en decimal, en este caso 233), y otro nodo de texto con el contenido «ndice».

Aunque para reflejar de forma fiel el contenido RTF real del documento son estos tres nodos los que deben generarse, en ocasiones esto puede no ser lo más práctico. Para ello, NRtfTree ofrece la posibilidad de fusionar, durante la carga del documento, los símbolos de control correspondientes a caracteres especiales con los nodos de texto adyacentes, si existen. Así, siguiendo con el ejemplo, para el texto «apéndice» se generaría un sólo nodo de tipo texto con el contenido completo de la palabra.

Esto se consigue activando la propiedad MergeSpecialCharacters de RtfTree antes de llamar al método de carga correspondiente. Veamos un ejemplo:

//Se crea el objeto RtfTree que albergará el árbol RTF
RtfTree tree = new RtfTree();

//Se activa la opción de combinar caracteres especiales
tree.MergeSpecialCharacters = true;

//Se carga el documento desde un fichero indicando su ruta
int res = tree.LoadRtfFile("midocumento.rtf");

En el siguiente apartado veremos cómo una vez cargado el documento y generado su árbol RTF equivalente podemos navegar facilmente por su contenido a través de sus nodos.

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