Introducción
Aspose.Words FOSS para .NET incluye el mismo modelo de objetos de formato de texto que el motor comercial Aspose.Words: Font para atributos a nivel de corrida, ParagraphFormat para atributos a nivel de párrafo, ListFormat para listas numeradas y con viñetas, FrameFormat para marcos de texto posicionados, y Range.Replace para buscar y reemplazar. Esta guía se centra específicamente en esa capa — formatear y reescribir texto que ya existe en un documento — en lugar de construir la estructura de un documento desde cero (ver el introduction post para una visión general del lanzamiento).
La biblioteca tiene licencia MIT sin dependencias nativas y apunta a .NET Standard 2.0, por lo que se ejecuta en .NET Framework 4.6.2+ y .NET 6, 8 y 10. Instálala vía NuGet, o compílala desde el código fuente (ver Inicio rápido a continuación). Todo lo descrito aquí funciona con .docx, .docm, .dotx, .dotm y archivos Flat OPC cargados con new Document(fileName), o con documentos construidos en memoria con DocumentBuilder.
Porque Aspose.Words FOSS para .NET es la auténtica base de código Aspose.Words reducida a un núcleo gratuito en lugar de una reescritura, el modelo de objetos Font, ParagraphFormat, ListFormat y FrameFormat se traslada directamente al comercial Aspose.Words para .NET si un proyecto más adelante necesita diseño de página, renderizado o los convertidores de formato adicionales que esta edición excluye.
Características clave
Formato a nivel de ejecución con fuente
Cada Run expone una propiedad Font, y DocumentBuilder.Font establece la fuente que se aplicará al texto escrito a continuación. Además de los obvios Bold, Italic y Underline (un enum Underline con valores que incluyen Single, Double, Dotted, Dash, Wavy y sus variantes *Heavy), Font cubre StrikeThrough, DoubleStrikeThrough, Superscript, Subscript, SmallCaps, AllCaps, Hidden, Shadow, Outline, Emboss, Engrave, Color, HighlightColor, Spacing, Position, Kerning, Scaling y EmphasisMark. Font.Style, Font.StyleName y Font.StyleIdentifier vinculan una corrida a un estilo de carácter, y Font.ClearFormatting() restablece el formato directo de una corrida a sus valores predeterminados del estilo. DocumentBuilder también expone Bold, Italic y Underline directamente como atajos, además de PushFont() y PopFont() para guardar y restaurar el estado de fuente actual del constructor alrededor de un cambio de formato temporal.
Formato de párrafo con ParagraphFormat
ParagraphFormat (accesible a través de Paragraph.ParagraphFormat o DocumentBuilder.ParagraphFormat) controla la alineación mediante el enumerado ParagraphAlignment (Left, Center, Right, Justify, Distributed, más variantes árabes kashida y tailandesas distribuidas), la sangría mediante LeftIndent, RightIndent y FirstLineIndent (con equivalentes CharacterUnit* para diseños de Asia Oriental), y el espaciado mediante SpaceBefore, SpaceAfter y LineSpacingRule/LineSpacing. El comportamiento de paginación se controla con KeepTogether, KeepWithNext, PageBreakBefore y WidowControl, y Bidi marca un párrafo como de derecha a izquierda. Las tabulaciones personalizadas se encuentran en ParagraphFormat.TabStops, una TabStopCollection de objetos TabStop, cada una con un Position, un TabAlignment (Left, Center, Right, Decimal, Bar), y un TabLeader (None, Dots, Dashes, Line, Heavy, MiddleDot). Al igual que Font, ParagraphFormat.Style y StyleName enlazan el párrafo a un Style con nombre, y ClearFormatting() borra el formato directo del párrafo.
Listas con ListFormat
ListFormat (en Paragraph.ListFormat o DocumentBuilder.ListFormat) aplica formato de lista a un párrafo: ApplyBulletDefault() y ApplyNumberDefault() lo convierten en una lista con viñetas o numerada por defecto, RemoveNumbers() elimina el formato de lista por completo, y ListIndent()/ListOutdent() lo mueven entre niveles de lista. ListFormat.List devuelve la definición subyacente de List, y ListFormat.ListLevel devuelve el ListLevel vigente para ese párrafo, que incluye configuraciones por nivel como NumberStyle, NumberFormat, Alignment (un ListLevelAlignment de Left, Center o Right), StartAt, RestartAfterLevel, un Font específico del nivel, y TrailingCharacter (un ListTrailingCharacter de Tab, Space o Nothing) que controla el espacio entre la etiqueta de la lista y el texto del párrafo. Las nuevas definiciones de lista provienen de ListCollection.Add(listTemplate) usando una de las predefiniciones integradas ListTemplate (BulletDefault, NumberArabicDot, NumberUppercaseRomanDot y similares), o AddSingleLevelList para una lista de un solo nivel; las listas de un documento se enumeran mediante Document.Lists.
Marcos de texto con FrameFormat
Paragraph.FrameFormat es un objeto de informe de solo lectura: cada propiedad en él refleja el del párrafo actual estado de marco en lugar de permitirte establecerlo directamente. IsFrame informa si el párrafo es actualmente un marco; Width, Height, y HeightRule informa su tamaño; HorizontalPosition y VerticalPosition, junto con RelativeHorizontalPosition y RelativeVerticalPosition, informe dónde está anclado en relación con la página, el margen, la columna o el párrafo; y HorizontalDistanceFromText/VerticalDistanceFromText informe la brecha entre el marco y el texto del cuerpo circundante. HorizontalAlignment y VerticalAlignment informe cómo se alinea el contenido dentro del marco.
Buscar y reemplazar con Range y IReplacingCallback
Range.Replace — disponible en Document.Range para un pase de documento completo, o en el Range de cualquier nodo — tiene sobrecargas para un par patrón/reemplazo simple y para un par patrón/reemplazo combinado con una instancia de FindReplaceOptions, admitiendo coincidencias basadas en expresiones regulares. FindReplaceOptions.MatchCase y FindWholeWordsOnly afinan lo que cuenta como coincidencia; Direction (FindReplaceDirection.Forward o Backward) establece el orden de escaneo; ApplyFont y ApplyParagraphFormat permiten que una pasada de reemplazo transfiera el formato al texto de reemplazo; y un conjunto de banderas Ignore* (IgnoreDeleted, IgnoreInserted, IgnoreFields, IgnoreFieldCodes, IgnoreFootnotes, IgnoreStructuredDocumentTags, IgnoreShapes, IgnoreOfficeMath) excluye categorías de contenido específicas de la coincidencia. Para lógica de reemplazo que una cadena fija no puede expresar, implemente IReplacingCallback.Replacing(args) y establézcalo como FindReplaceOptions.ReplacingCallback (o páselo a uno de los constructores FindReplaceOptions que aceptan una devolución de llamada directamente); el parámetro args es un ReplacingArgs que expone Match, MatchNode, MatchOffset, y una cadena Replacement configurable para que la devolución de llamada pueda calcular un valor por coincidencia. Un enum ReplaceAction relacionado (Replace, Skip, Stop) describe los posibles resultados para una única coincidencia durante la operación.
Inicio rápido
Aspose.Words FOSS para .NET está disponible a través de NuGet:
dotnet add package Aspose.Words.FOSSPara compilar desde el código fuente en su lugar:
git clone https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git
cd Aspose.Words-FOSS-for-.NET
dotnet build Aspose.Words.sln -c Release
Luego agregue una referencia de proyecto a Aspose.Words.csproj. Para formatear el texto mientras lo escribe, establezca las propiedades de DocumentBuilder.Font (Bold, Italic, Underline), las propiedades de DocumentBuilder.ParagraphFormat (Alignment, sangrías, espaciado), y DocumentBuilder.ListFormat (ApplyBulletDefault(), ApplyNumberDefault()) antes de llamar a Write(), Writeln() o InsertParagraph() — el constructor aplica su estado de formato actual a todo lo escrito hasta que lo cambie nuevamente, o envuelva un cambio temporal en PushFont()/PopFont(). Para reformatear o reescribir texto ya presente en un documento, ábralo con new Document(fileName) y llame a Range.Replace() sobre doc.Range — ya sea la sobrecarga simple de patrón/reemplazo, o la sobrecarga que recibe un FindReplaceOptions con MatchCase, FindWholeWordsOnly, o un IReplacingCallback personalizado — luego Save() el resultado.
Formatos compatibles
| Formato | Extensión | Leer | Escribir |
|---|---|---|---|
| DOCX | .docx | ✓ | ✓ |
| DOCM | .docm | ✓ | ✓ |
| DOTX | .dotx | ✓ | ✓ |
| DOTM | .dotm | ✓ | ✓ |
| Flat OPC (todas las variantes) | (varios) | ✓ | ✓ |
| Markdown | .md | ✓ | ✓ |
| Text | .txt | ✓ | ✓ |
Las clases de formato anteriores se aplican de la misma manera sin importar desde cuál de estos formatos se cargue o se guarde un documento. Esta edición no admite DOC, RTF, ODT, HTML, EPUB, MHTML, MOBI, AZW3, o WordML para lectura o escritura, y no admite PDF, XPS, o exportación de imágenes, ya que el diseño de página y el renderizado están fuera de su alcance.
Código abierto y licencias
Aspose.Words FOSS para .NET se lanza bajo la licencia MIT, libre para uso comercial y personal sin regalías ni restricciones de redistribución. El código fuente completo, incluyendo las implementaciones de Font, ParagraphFormat, ListFormat, FrameFormat y Range descritas arriba, está disponible en GitHub en el Aspose.Words FOSS para el repositorio de .NET.