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.Fontprima di scrivere il testo con il builder, anziché scrivere il testo prima e riformattare successivamente i singoli oggettiRun. - Limita
Range.Replaceall’intervallo più piccolo che copre ciò che desideri effettivamente modificare — chiamalo su un intervallo diParagraphoSectionanziché 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.AddReplycome nodiCommentstessi — le risposte sono oggetti commento completi, non semplici stringhe.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
Formattare il Run Font non modifica visivamente il testo adiacente | Il testo adiacente si trova in un Run diverso con la propria istanza di Font | Individua 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 prevista | Replace è stato chiamato su Document.Range invece dell’intervallo di un nodo più ristretto | Chiama Replace sul Paragraph specifico, Section, o sul Range di un altro nodo |
Un paragrafo sembra un elemento di elenco ma IsListItem è falso | Il punto/numerazione è testo manuale, non una vera formattazione di elenco | Applica una vera formattazione di elenco con ListFormat.ApplyBulletDefault() o ApplyNumberDefault() invece dei caratteri digitati |
Il documento ha molti più nodi Run del previsto | Modifiche piccole ripetute dividono le sequenze senza riunirle | Chiama 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/Metodo | Descrizione |
|---|---|
Run | Un intervallo di testo che condivide un unico set di formattazione dei caratteri. |
Font | Formattazione a livello di carattere — nome, dimensione, grassetto, corsivo, colore e altro. |
Paragraph | Nodo composito contenente i run e la formattazione di un paragrafo. |
ParagraphFormat | Formattazione a livello di paragrafo — allineamento, rientri, spaziatura, impaginazione. |
ParagraphCollection | Collezione tipizzata di nodi Paragraph, ad es. Body.Paragraphs. |
Range | Un’area contigua del documento; supporta Text, Replace e Delete. |
Comment | Un commento in thread ancorato a una posizione nel testo. |
CommentCollection | La collezione di commenti del documento. |
ListFormat | Controlla se e come un paragrafo partecipa a un elenco. |