Trabajando con Texto

Trabajando con Texto

El texto en un documento de Word está organizado en nodos Run (caracteres contiguos que comparten el mismo formato de fuente) agrupados dentro de nodos Paragraph. Aspose.Words FOSS para .NET expone ambos directamente, junto con Font para el formato de caracteres, ParagraphFormat para el formato a nivel de párrafo, y Range para leer o reemplazar texto en cualquier parte del árbol. Esta guía cubre runs y fuentes, formato de párrafo, lectura y reemplazo de texto, comentarios y formato de listas a nivel de párrafo.


Runs y Formato de Caracteres

Un Run representa un tramo de texto que comparte un conjunto de formato; su propiedad Text contiene el contenido de texto plano y su propiedad Font (un objeto Font) contiene el formato a nivel de carácter — Name, Size, Bold, Italic, Underline, Color, HighlightColor, Subscript/Superscript, StrikeThrough, y muchos más. Font.ClearFormatting() restablece la fuente de un run a los valores predeterminados. Los runs de un párrafo están disponibles a través de su propiedad Runs, un RunCollection.


Párrafos y Formato de Párrafo

Paragraph es un nodo compuesto que contiene los runs (y otro contenido en línea) de un párrafo; los párrafos de un documento o cuerpo se exponen como un ParagraphCollection (Body.Paragraphs). Paragraph.ParagraphFormat (un objeto ParagraphFormat) controla el diseño a nivel de párrafo — Alignment, sangrías (LeftIndent, RightIndent, FirstLineIndent), espaciado (SpaceBefore, SpaceAfter, LineSpacing, LineSpacingRule), y el comportamiento de paginación (KeepTogether, KeepWithNext, PageBreakBefore, WidowControl). ParagraphFormat.ClearFormatting() restablece estos a los valores predeterminados, y Paragraph.JoinRunsWithSameFormatting() fusiona runs adyacentes que poseen el mismo formato.


Lectura y Reemplazo de Texto con Range

Cada nodo que contiene contenido — un Document, Section, Paragraph o Run — expone un Range. Range.Text devuelve el texto plano de todo lo que está dentro de ese rango, y Range.Replace(pattern, replacement) realiza una búsqueda y reemplazo limitado a ese rango, de modo que, por ejemplo, puedes reemplazar texto dentro de un párrafo sin tocar el resto del documento. Range.Delete() elimina el contenido del rango por completo.


Comments

Un nodo Comment ancla un comentario a una ubicación en el texto; crea uno con new Comment(doc, author, initial, dateTime) y establece su texto principal con SetText(text), luego insértalo en el documento como cualquier otro nodo. Comment.AddReply(author, initial, dateTime, text) adjunta una respuesta en hilo, y RemoveReply(reply) / RemoveAllReplies() los eliminan. Los comentarios de un documento se recopilan en un CommentCollection.


Formato de lista a nivel de párrafo

Paragraph.ListFormat (un objeto ListFormat) informa y controla si un párrafo forma parte de una lista: IsListItem y ListLevelNumber informan su estado actual, ApplyBulletDefault() y ApplyNumberDefault() convierten un párrafo en un elemento de lista con viñetas o numerado por defecto, ListIndent() / ListOutdent() cambian su nivel de anidamiento en la lista, y RemoveNumbers() lo devuelve a un párrafo normal.


Consejos y buenas prácticas

  • Establece las propiedades de fuente en DocumentBuilder.Font antes de escribir texto con el generador, en lugar de escribir el texto primero y volver a formatear individualmente los objetos Run después.
  • Limita el alcance de Range.Replace al rango más pequeño que cubra lo que realmente deseas cambiar — llámalo en el rango de un Paragraph o Section en lugar de todo el documento cuando el cambio no debe aplicarse a nivel de documento.
  • Llame a Paragraph.JoinRunsWithSameFormatting() después de una serie de ediciones programáticas para evitar una estructura de ejecuciones innecesariamente fragmentada.
  • Utilice ListFormat.ApplyBulletDefault() / ApplyNumberDefault() para obtener una lista predeterminada rápida en lugar de construir definiciones de lista manualmente cuando los valores predeterminados incorporados son suficientes.
  • Lea los resultados de Comment.AddReply como nodos Comment — las respuestas son objetos de comentario completos, no cadenas simples.

Problemas comunes

ProblemaCausaSolución
Dar formato al Run’s Font no cambia visualmente el texto adyacenteEl texto adyacente está en un Run diferente con su propia instancia de FontUbique y formatee cada Run afectado, o establezca el formato mediante DocumentBuilder.Font antes de escribir
Range.Replace cambia el texto fuera del área previstaReplace se llamó sobre Document.Range en lugar del rango de un nodo más estrechoLlame a Replace en el Paragraph específico, Section, o el Range de otro nodo
Un párrafo parece un elemento de lista pero IsListItem es falsoLa viñeta/número es texto manual, no un formato de lista realAplique formato de lista real con ListFormat.ApplyBulletDefault() o ApplyNumberDefault() en lugar de caracteres escritos
El documento tiene muchos más nodos Run de lo esperadoEdiciones pequeñas repetidas dividen corridas sin volver a unirlasLlame a Paragraph.JoinRunsWithSameFormatting() después de lotes de ediciones

FAQ

¿Cuál es la diferencia entre Run y Paragraph?

Un Run es un tramo de texto que comparte un conjunto de formato de caracteres (Font); un Paragraph es el nodo compuesto que contiene una o más ejecuciones (y otro contenido en línea) además del formato a nivel de párrafo (ParagraphFormat).

¿Cómo leo todo el texto en un documento o sección?

Lea la propiedad Text del Range de ese nodo — por ejemplo, document.Range.Text o section.Range.Text.

¿Cómo encuentro y reemplazo texto en un solo párrafo?

Llame a Replace(pattern, replacement) sobre el Range de ese Paragraph en lugar de sobre Document.Range.

¿Cómo añado un comentario a un documento?

Créelo con new Comment(doc, author, initial, dateTime), establezca su texto con SetText(text) e insértelo en el árbol; responda a él con Comment.AddReply(author, initial, dateTime, text).

¿Cómo convierto un párrafo en un elemento de lista con viñetas?

Llame a ApplyBulletDefault() sobre el ListFormat de ese párrafo; use ApplyNumberDefault() para una lista numerada en su lugar.


API Reference Resumen

Clase/MétodoDescripción
RunUn fragmento de texto que comparte un conjunto de formato de caracteres.
FontFormato a nivel de carácter — nombre, tamaño, negrita, cursiva, color y más.
ParagraphNodo compuesto que contiene los fragmentos y el formato de un párrafo.
ParagraphFormatFormato a nivel de párrafo — alineación, sangrías, espaciado, paginación.
ParagraphCollectionColección tipada de nodos Paragraph, p. ej. Body.Paragraphs.
RangeUna zona contigua del documento; admite Text, Replace y Delete.
CommentUn comentario en hilo anclado a una ubicación en el texto.
CommentCollectionLa colección de comentarios del documento.
ListFormatControla si y cómo un párrafo participa en una lista.

Ver también

 Español