Εργασία με κείμενο
Εργασία με Κείμενο
Το κείμενο σε ένα έγγραφο Word οργανώνεται σε κόμβους Run (διαδοχικοί χαρακτήρες που μοιράζονται την ίδια μορφοποίηση γραμματοσειράς) που ομαδοποιούνται μέσα σε κόμβους Paragraph. Το Aspose.Words FOSS για .NET εκθέτει και τα δύο άμεσα, μαζί με Font για μορφοποίηση χαρακτήρων, ParagraphFormat για μορφοποίηση επιπέδου παραγράφου και Range για ανάγνωση ή αντικατάσταση κειμένου σε οποιοδήποτε τμήμα του δέντρου. Αυτός ο οδηγός καλύπτει τα runs και τις γραμματοσειρές, τη μορφοποίηση παραγράφων, την ανάγνωση και αντικατάσταση κειμένου, τα σχόλια και τη μορφοποίηση λιστών σε επίπεδο παραγράφου.
Runs και Μορφοποίηση Χαρακτήρων
Ένα Run αντιπροσωπεύει ένα τμήμα κειμένου που μοιράζεται ένα σύνολο μορφοποίησης· η ιδιότητα Text του περιέχει το απλό κείμενο και η ιδιότητα Font του (ένα αντικείμενο Font) περιέχει τη μορφοποίηση επιπέδου χαρακτήρων — Name, Size, Bold, Italic, Underline, Color, HighlightColor, Subscript/Superscript, StrikeThrough, και πολλά άλλα. Το Font.ClearFormatting() επαναφέρει τη γραμματοσειρά ενός run στις προεπιλογές. Τα runs μιας παραγράφου είναι διαθέσιμα μέσω της ιδιότητας Runs, ένα RunCollection.
Παράγραφοι και Μορφοποίηση Παραγράφων
Paragraph είναι ένας σύνθετος κόμβος που περιέχει τα runs (και άλλο ενσωματωμένο περιεχόμενο) μιας παραγράφου· οι παράγραφοι ενός εγγράφου ή του σώματος εκτίθενται ως ParagraphCollection (Body.Paragraphs). Το Paragraph.ParagraphFormat (ένα αντικείμενο ParagraphFormat) ελέγχει τη διάταξη επιπέδου παραγράφου — Alignment, εσοχές (LeftIndent, RightIndent, FirstLineIndent), διάστιχο (SpaceBefore, SpaceAfter, LineSpacing, LineSpacingRule), και τη συμπεριφορά σε σελιδοποίηση (KeepTogether, KeepWithNext, PageBreakBefore, WidowControl). Το ParagraphFormat.ClearFormatting() επαναφέρει αυτά στις προεπιλογές, και το Paragraph.JoinRunsWithSameFormatting() συγχωνεύει τα διαδοχικά runs που φέρουν ταυτόσημη μορφοποίηση.
Ανάγνωση και Αντικατάσταση Κειμένου με Range
Κάθε κόμβος που περιέχει περιεχόμενο — ένα Document, Section, Paragraph ή Run — εκθέτει ένα Range. Το Range.Text επιστρέφει το απλό κείμενο όλων των στοιχείων εντός αυτού του εύρους, και το Range.Replace(pattern, replacement) εκτελεί μια λειτουργία εύρεσης-αντικατάστασης περιορισμένη μόνο σε αυτό το εύρος, ώστε να μπορείτε, για παράδειγμα, να αντικαταστήσετε κείμενο μέσα σε μια παράγραφο χωρίς να επηρεάσετε το υπόλοιπο του εγγράφου. Το Range.Delete() αφαιρεί εντελώς το περιεχόμενο του εύρους.
Comments
Ένας κόμβος Comment ενώνει ένα σχόλιο σε θέση στο κείμενο· δημιουργήστε έναν με το new Comment(doc, author, initial, dateTime) και ορίστε το κείμενο του σώματος με το SetText(text), στη συνέχεια εισάγετέ τον στο έγγραφο όπως οποιονδήποτε άλλο κόμβο. Το Comment.AddReply(author, initial, dateTime, text) προσθέτει μια αλληλουχική απάντηση, και τα RemoveReply(reply) / RemoveAllReplies() τα αφαιρούν. Τα σχόλια ενός εγγράφου συλλέγονται σε ένα CommentCollection.
Μορφοποίηση λίστας σε επίπεδο παραγράφου
Paragraph.ListFormat (ένα αντικείμενο ListFormat) αναφέρει και ελέγχει εάν μια παράγραφος είναι μέρος λίστας: τα IsListItem και ListLevelNumber αναφέρουν την τρέχουσα κατάσταση της, τα ApplyBulletDefault() και ApplyNumberDefault() μετατρέπουν μια παράγραφο σε προεπιλεγμένο στοιχείο λίστας με κουκίδες ή αριθμημένο, τα ListIndent() / ListOutdent() αλλάζουν το επίπεδο εμφώλευσης της λίστας, και το RemoveNumbers() την επαναφέρει σε κανονική παράγραφο.
Συμβουλές και βέλτιστες πρακτικές
- Ορίστε τις ιδιότητες γραμματοσειράς στο
DocumentBuilder.Fontπριν γράψετε κείμενο με τον builder αντί να γράψετε το κείμενο πρώτα και να μορφοποιήσετε ξανά τα μεμονωμένα αντικείμεναRunαργότερα. - Περιορίστε το
Range.Replaceστο μικρότερο εύρος που καλύπτει ό,τι θέλετε πραγματικά να αλλάξει — καλέστε το σε ένα εύροςParagraphήSectionαντί για ολόκληρο το έγγραφο όταν η αλλαγή δεν πρέπει να ισχύει σε όλο το έγγραφο. - Καλέστε το
Paragraph.JoinRunsWithSameFormatting()μετά από μια σειρά προγραμματιστικών επεξεργασιών για να αποφύγετε μια περιττά κατακερματισμένη δομή εκτελέσεων. - Χρησιμοποιήστε το
ListFormat.ApplyBulletDefault()/ApplyNumberDefault()για μια γρήγορη προεπιλεγμένη λίστα αντί να δημιουργείτε ορισμούς λίστας χειροκίνητα όταν οι ενσωματωμένες προεπιλογές είναι επαρκείς. - Αναγνώστε τα αποτελέσματα του
Comment.AddReplyως κόμβουςComment— οι απαντήσεις είναι πλήρη αντικείμενα σχολίων, όχι απλές συμβολοσειρές.
Συνηθισμένα Προβλήματα
| Πρόβλημα | Αιτία | Διόρθωση |
|---|---|---|
Η μορφοποίηση του Font ενός Run δεν αλλάζει οπτικά το γειτονικό κείμενο | Το γειτονικό κείμενο βρίσκεται σε διαφορετικό Run με τη δική του εμφάνιση του Font | Εντοπίστε και μορφοποιήστε κάθε επηρεαζόμενο Run, ή ορίστε τη μορφοποίηση μέσω DocumentBuilder.Font πριν τη γραφή |
Range.Replace αλλάζει κείμενο εκτός της προοριζόμενης περιοχής | Το Replace κλήθηκε στο Document.Range αντί για το εύρος ενός πιο στενού κόμβου | Καλέστε Replace στο συγκεκριμένο Paragraph, Section, ή στο Range άλλου κόμβου |
Μια παράγραφος μοιάζει με στοιχείο λίστας αλλά το IsListItem είναι ψευδές | Η κουκκίδα/αρίθμηση είναι χειροκίνητο κείμενο, όχι πραγματική μορφοποίηση λίστας | Εφαρμόστε πραγματική μορφοποίηση λίστας με ListFormat.ApplyBulletDefault() ή ApplyNumberDefault() αντί για πληκτρολογημένους χαρακτήρες |
Το έγγραφο έχει πολύ περισσότερους Run κόμβους από το αναμενόμενο | Επαναλαμβανόμενες μικρές επεμβάσεις χωρίζουν τα τμήματα χωρίς να τα επαναενώσουν | Καλέστε Paragraph.JoinRunsWithSameFormatting() μετά από παρτίδες επεμβάσεων |
FAQ
Ποια είναι η διαφορά μεταξύ Run και Paragraph;
Ένα Run είναι ένα τμήμα κειμένου που μοιράζεται ένα σύνολο μορφοποίησης χαρακτήρων (Font); ένα Paragraph είναι ο σύνθετος κόμβος που περιέχει μία ή περισσότερες εκτελέσεις (και άλλο ενσωματωμένο περιεχόμενο) συν μορφοποίηση επιπέδου παραγράφου (ParagraphFormat).
Πώς μπορώ να διαβάσω όλο το κείμενο σε ένα έγγραφο ή τμήμα;
Διαβάστε την ιδιότητα Text του Range αυτού του κόμβου — για παράδειγμα, document.Range.Text ή section.Range.Text.
Πώς μπορώ να βρω και να αντικαταστήσω κείμενο μόνο σε μία παράγραφο;
Καλέστε το Replace(pattern, replacement) στο Range του Paragraph αντί για το Document.Range.
Πώς μπορώ να προσθέσω ένα σχόλιο σε ένα έγγραφο;
Δημιουργήστε το με το new Comment(doc, author, initial, dateTime), ορίστε το κείμενό του με το SetText(text) και εισάγετέ το στο δένδρο· απαντήστε του με το Comment.AddReply(author, initial, dateTime, text).
Πώς μπορώ να μετατρέψω μια παράγραφο σε στοιχείο λίστας με κουκκίδες;
Καλέστε το ApplyBulletDefault() στο ListFormat της παραγράφου· χρησιμοποιήστε το ApplyNumberDefault() για αριθμημένη λίστα αντί αυτού.
API Reference Περίληψη
| Κλάση/Μέθοδος | Περιγραφή |
|---|---|
Run | Ένα τμήμα κειμένου που μοιράζεται ένα σύνολο μορφοποίησης χαρακτήρων. |
Font | Μορφοποίηση σε επίπεδο χαρακτήρα — όνομα, μέγεθος, έντονο, πλάγιο, χρώμα και άλλα. |
Paragraph | Σύνθετος κόμβος που περιέχει τις ακολουθίες και τη μορφοποίηση μιας παραγράφου. |
ParagraphFormat | Μορφοποίηση σε επίπεδο παραγράφου — στοίχιση, εσοχές, απόσταση, σελιδοποίηση. |
ParagraphCollection | Τυποποιημένη συλλογή Paragraph κόμβων, π.χ. Body.Paragraphs. |
Range | Μια συνεχής περιοχή του εγγράφου; υποστηρίζει Text, Replace και Delete. |
Comment | Ένα νήμα σχολίου προσαρτημένο σε θέση στο κείμενο. |
CommentCollection | Η συλλογή σχολίων του εγγράφου. |
ListFormat | Ελέγχει αν και πώς μια παράγραφος συμμετέχει σε μια λίστα. |