Praca z tekstem

Praca z tekstem

Tekst w dokumencie Word jest organizowany w węzły Run (sąsiadujące znaki współdzielące to samo formatowanie czcionki) zgrupowane wewnątrz węzłów Paragraph. Aspose.Words FOSS dla .NET udostępnia oba typy bezpośrednio, a także Font do formatowania znaków, ParagraphFormat do formatowania akapitu oraz Range do odczytywania lub zamieniania tekstu w dowolnej części drzewa. Ten przewodnik omawia runy i czcionki, formatowanie akapitu, odczytywanie i zamienianie tekstu, komentarze oraz formatowanie list w akapicie.


Runy i formatowanie znaków

Run reprezentuje fragment tekstu, który posiada jednolity zestaw formatowania; jego właściwość Text zawiera treść w postaci czystego tekstu, a właściwość Font (obiekt Font) przechowuje formatowanie znaków — Name, Size, Bold, Italic, Underline, Color, HighlightColor, Subscript/Superscript, StrikeThrough oraz wiele innych. Font.ClearFormatting() przywraca czcionkę runu do ustawień domyślnych. Runy w akapicie są dostępne poprzez jego właściwość Runs, będącą RunCollection.


Akapity i formatowanie akapitu

Paragraph jest węzłem złożonym zawierającym runy (oraz inne elementy inline) jednego akapitu; akapity dokumentu lub ciała są udostępniane jako ParagraphCollection (Body.Paragraphs). Paragraph.ParagraphFormat (obiekt ParagraphFormat) steruje układem dotyczącym akapitu — Alignment, wcięciami (LeftIndent, RightIndent, FirstLineIndent), odstępami (SpaceBefore, SpaceAfter, LineSpacing, LineSpacingRule) oraz zachowaniem podziału stron (KeepTogether, KeepWithNext, PageBreakBefore, WidowControl). ParagraphFormat.ClearFormatting() przywraca te ustawienia do wartości domyślnych, a Paragraph.JoinRunsWithSameFormatting() scala sąsiadujące runy o identycznym formatowaniu.


Odczytywanie i zamienianie tekstu przy pomocy zakresu

Każdy węzeł, który zawiera treść — Document, Section, Paragraph lub Run — udostępnia Range. Range.Text zwraca czysty tekst wszystkiego w tym zakresie, a Range.Replace(pattern, replacement) wykonuje wyszukiwanie i zamianę ograniczoną do tego zakresu, dzięki czemu możesz na przykład zamienić tekst w jednym akapicie, nie modyfikując reszty dokumentu. Range.Delete() usuwa zawartość zakresu całkowicie.


Comments

Węzeł Comment przypina komentarz do określonego miejsca w tekście; utwórz go za pomocą new Comment(doc, author, initial, dateTime) i ustaw jego treść za pomocą SetText(text), a następnie wstaw go do dokumentu jak każdy inny węzeł. Comment.AddReply(author, initial, dateTime, text) dołącza odpowiedź wątkową, a RemoveReply(reply) / RemoveAllReplies() je usuwają. Komentarze dokumentu są zbierane w CommentCollection.


Formatowanie listy na poziomie akapitu

Paragraph.ListFormat (obiekt ListFormat) informuje i kontroluje, czy akapit jest częścią listy: IsListItem i ListLevelNumber podają jego bieżący stan, ApplyBulletDefault() i ApplyNumberDefault() zamieniają akapit w domyślny element listy wypunktowanej lub numerowanej, ListIndent() / ListOutdent() zmieniają poziom zagnieżdżenia listy, a RemoveNumbers() przywraca go do zwykłego akapitu.


Wskazówki i najlepsze praktyki

  • Ustaw właściwości czcionki na DocumentBuilder.Font przed wprowadzaniem tekstu przy użyciu buildera, zamiast najpierw pisać tekst i później przekształcać poszczególne obiekty Run.
  • Ogranicz Range.Replace do najmniejszego zakresu obejmującego to, co naprawdę chcesz zmienić — wywołaj go na zakresie Paragraph lub Section, a nie na całym dokumencie, gdy zmiana nie ma obowiązywać na całym dokumencie.
  • Wywołaj Paragraph.JoinRunsWithSameFormatting() po serii programowych edycji, aby uniknąć niepotrzebnie fragmentowanej struktury run.
  • Użyj ListFormat.ApplyBulletDefault() / ApplyNumberDefault() do szybkiego domyślnego listowania zamiast ręcznego konstruowania definicji list, gdy wbudowane domyślne wartości są wystarczające.
  • Odczytuj wyniki Comment.AddReply jako węzły Comment — odpowiedzi są pełnymi obiektami komentarzy, a nie zwykłymi ciągami znaków.

Typowe problemy

ProblemPrzyczynaRozwiązanie
Formatowanie Run’s Font nie zmienia wizualnie sąsiadującego tekstuSąsiadujący tekst znajduje się w innym Run z własną instancją FontZlokalizuj i sformatuj każdy dotknięty Run, albo ustaw formatowanie za pomocą DocumentBuilder.Font przed zapisem
Range.Replace zmienia tekst poza zamierzonym obszaremReplace został wywołany na Document.Range zamiast zakresu węższego węzłaWywołaj Replace na konkretnym Paragraph, Section lub innym węźle Range
Akapit wygląda jak element listy, ale IsListItem jest fałszywePunkt/kropka numerująca jest ręcznie wprowadzonym tekstem, a nie rzeczywistym formatowaniem listyZastosuj prawdziwe formatowanie listy przy użyciu ListFormat.ApplyBulletDefault() lub ApplyNumberDefault() zamiast wpisywanych znaków
Dokument zawiera znacznie więcej węzłów Run niż oczekiwanoPowtarzające się drobne edycje dzielą ciągi bez ich ponownego łączeniaWywołaj Paragraph.JoinRunsWithSameFormatting() po partiach edycji

FAQ

Jaka jest różnica między Run a Paragraph?

„Run” to fragment tekstu współdzielący jeden zestaw formatowania znaków (Font); „Paragraph” to węzeł złożony, który zawiera jeden lub więcej runów (i inną zawartość inline) oraz formatowanie na poziomie akapitu (ParagraphFormat).

Jak odczytać cały tekst w dokumencie lub sekcji?

Odczytaj właściwość Text elementu Range — na przykład document.Range.Text lub section.Range.Text.

Jak znaleźć i zamienić tekst w jednym akapicie?

Wywołaj Replace(pattern, replacement) na Range tego Paragraph, a nie na Document.Range.

Jak dodać komentarz do dokumentu?

Utwórz go przy użyciu new Comment(doc, author, initial, dateTime), ustaw jego tekst za pomocą SetText(text) i wstaw do drzewa; odpowiedz na niego przy pomocy Comment.AddReply(author, initial, dateTime, text).

Jak przekształcić akapit w element listy wypunktowanej?

Wywołaj ApplyBulletDefault() na ListFormat tego akapitu; użyj ApplyNumberDefault() dla listy numerowanej.


API Reference Podsumowanie

Klasa/MetodaOpis
RunFragment tekstu dzielący jeden zestaw formatowania znaków.
FontFormatowanie na poziomie znaków — nazwa, rozmiar, pogrubienie, kursywa, kolor i inne.
ParagraphWęzeł złożony zawierający fragmenty i formatowanie jednego akapitu.
ParagraphFormatFormatowanie na poziomie akapitu — wyrównanie, wcięcia, odstępy, paginacja.
ParagraphCollectionTypowana kolekcja węzłów Paragraph, np. Body.Paragraphs.
RangeSpójny obszar dokumentu; obsługuje Text, Replace i Delete.
CommentWątkowy komentarz przypięty do konkretnego miejsca w tekście.
CommentCollectionZbiór komentarzy dokumentu.
ListFormatKontroluje, czy i w jaki sposób akapit uczestniczy w liście.

Zobacz także

 Polski