Lavorare con il testo

Lavorare con il testo

Il testo in un documento Word è organizzato in nodi Run (caratteri continui che condividono la stessa formattazione del carattere) raggruppati all’interno di nodi Paragraph. Aspose.Words FOSS per .NET espone entrambi direttamente, insieme a Font per la formattazione dei caratteri, ParagraphFormat per la formattazione a livello di paragrafo e Range per leggere o sostituire il testo in qualsiasi parte dell’albero. Questa guida copre le run e i caratteri, la formattazione dei paragrafi, la lettura e la sostituzione del testo, i commenti e la formattazione delle liste a livello di paragrafo.


Run e Formattazione dei Caratteri

Un Run rappresenta un intervallo di testo che condivide un unico insieme di formattazione; la sua proprietà Text contiene il contenuto in testo semplice e la sua proprietà Font (un oggetto Font) contiene la formattazione a livello di carattere — Name, Size, Bold, Italic, Underline, Color, HighlightColor, Subscript/Superscript, StrikeThrough, e molti altri. Font.ClearFormatting() ripristina il carattere di una run ai valori predefiniti. Le run di un paragrafo sono disponibili tramite la sua proprietà Runs, un RunCollection.


Paragrafi e Formattazione dei Paragrafi

Paragraph è un nodo composito che contiene le run (e altri contenuti in linea) di un paragrafo; i paragrafi di un documento o di un corpo sono esposti come un ParagraphCollection (Body.Paragraphs). Paragraph.ParagraphFormat (un oggetto ParagraphFormat) controlla il layout a livello di paragrafo — Alignment, rientri (LeftIndent, RightIndent, FirstLineIndent), spaziatura (SpaceBefore, SpaceAfter, LineSpacing, LineSpacingRule) e comportamento di impaginazione (KeepTogether, KeepWithNext, PageBreakBefore, WidowControl). ParagraphFormat.ClearFormatting() ripristina questi ai valori predefiniti, e Paragraph.JoinRunsWithSameFormatting() unisce le run adiacenti che hanno una formattazione identica.


Lettura e Sostituzione del Testo con Range

Ogni nodo che contiene contenuto — un Document, Section, Paragraph o Run — espone un Range. Range.Text restituisce il testo semplice di tutto ciò che si trova all’interno di quell’intervallo, e Range.Replace(pattern, replacement) esegue una ricerca e sostituzione limitata a quell’intervallo, così puoi, per esempio, sostituire il testo all’interno di un paragrafo senza toccare il resto del documento. Range.Delete() rimuove completamente il contenuto dell’intervallo.


Comments

Un nodo Comment fissa un commento a una posizione nel testo; creane uno con new Comment(doc, author, initial, dateTime) e imposta il suo testo principale con SetText(text), quindi inseriscilo nel documento come qualsiasi altro nodo. Comment.AddReply(author, initial, dateTime, text) aggiunge una risposta in thread, e RemoveReply(reply) / RemoveAllReplies() le rimuovono. I commenti di un documento sono raccolti in un CommentCollection.


Formattazione degli elenchi a livello di paragrafo

Paragraph.ListFormat (un oggetto ListFormat) segnala e controlla se un paragrafo fa parte di un elenco: IsListItem e ListLevelNumber riportano il suo stato attuale, ApplyBulletDefault() e ApplyNumberDefault() trasformano un paragrafo in un elemento di elenco puntato o numerato predefinito, ListIndent() / ListOutdent() modificano il livello di annidamento dell’elenco, e RemoveNumbers() lo riporta a un paragrafo normale.


Suggerimenti e buone pratiche

  • Imposta le proprietà del carattere su DocumentBuilder.Font prima di scrivere il testo con il builder, anziché scrivere il testo prima e riformattare successivamente i singoli oggetti Run.
  • Limita Range.Replace all’intervallo più piccolo che copre ciò che desideri effettivamente modificare — chiamalo su un intervallo di Paragraph o Section anziché sull’intero documento quando la modifica non deve essere applicata a livello globale.
  • Chiama Paragraph.JoinRunsWithSameFormatting() dopo una serie di modifiche programmatiche per evitare una struttura di run inutilmente frammentata.
  • Usa ListFormat.ApplyBulletDefault() / ApplyNumberDefault() per ottenere rapidamente un elenco predefinito anziché costruire manualmente le definizioni di elenco quando le impostazioni predefinite incorporate sono sufficienti.
  • Leggi i risultati di Comment.AddReply come nodi Comment stessi — le risposte sono oggetti commento completi, non semplici stringhe.

Problemi comuni

ProblemaCausaCorrezione
Formattare il Run Font non modifica visivamente il testo adiacenteIl testo adiacente si trova in un Run diverso con la propria istanza di FontIndividua e formatta ogni Run interessato, oppure imposta la formattazione tramite DocumentBuilder.Font prima di scrivere
Range.Replace modifica il testo al di fuori dell’area previstaReplace è stato chiamato su Document.Range invece dell’intervallo di un nodo più ristrettoChiama Replace sul Paragraph specifico, Section, o sul Range di un altro nodo
Un paragrafo sembra un elemento di elenco ma IsListItem è falsoIl punto/numerazione è testo manuale, non una vera formattazione di elencoApplica una vera formattazione di elenco con ListFormat.ApplyBulletDefault() o ApplyNumberDefault() invece dei caratteri digitati
Il documento ha molti più nodi Run del previstoModifiche piccole ripetute dividono le sequenze senza riunirleChiama Paragraph.JoinRunsWithSameFormatting() dopo i gruppi di modifiche

FAQ

Qual è la differenza tra Run e Paragraph?

Un Run è un intervallo di testo che condivide un unico set di formattazione dei caratteri (Font); un Paragraph è il nodo composito che contiene uno o più run (e altri contenuti inline) più la formattazione a livello di paragrafo (ParagraphFormat).

Come leggo tutto il testo in un documento o in una sezione?

Leggi la proprietà Text del Range di quel nodo — ad esempio, document.Range.Text o section.Range.Text.

Come faccio a trovare e sostituire il testo in un solo paragrafo?

Chiama Replace(pattern, replacement) sul Range di quel Paragraph invece che su Document.Range.

Come aggiungo un commento a un documento?

Crealo con new Comment(doc, author, initial, dateTime), imposta il suo testo con SetText(text) e inseriscilo nell’albero; rispondi ad esso con Comment.AddReply(author, initial, dateTime, text).

Come trasformo un paragrafo in un elemento di elenco puntato?

Chiama ApplyBulletDefault() sul ListFormat di quel paragrafo; usa ApplyNumberDefault() per un elenco numerato invece.


Riepilogo API Reference

Classe/MetodoDescrizione
RunUn intervallo di testo che condivide un unico set di formattazione dei caratteri.
FontFormattazione a livello di carattere — nome, dimensione, grassetto, corsivo, colore e altro.
ParagraphNodo composito contenente i run e la formattazione di un paragrafo.
ParagraphFormatFormattazione a livello di paragrafo — allineamento, rientri, spaziatura, impaginazione.
ParagraphCollectionCollezione tipizzata di nodi Paragraph, ad es. Body.Paragraphs.
RangeUn’area contigua del documento; supporta Text, Replace e Delete.
CommentUn commento in thread ancorato a una posizione nel testo.
CommentCollectionLa collezione di commenti del documento.
ListFormatControlla se e come un paragrafo partecipa a un elenco.

Vedi anche

 Italiano