Робота з текстом

Робота з текстом

Текст у документі Word організовано в Run вузли (послідовні символи, що мають однакове форматування шрифту), згруповані всередині Paragraph вузлів. Aspose.Words FOSS для .NET надає обидва безпосередньо, разом з Font для форматування символів, ParagraphFormat для форматування на рівні абзацу та Range для читання або заміни тексту в будь-якій частині дерева. Цей посібник охоплює ділянки та шрифти, форматування абзаців, читання і заміну тексту, коментарі та форматування списків на рівні абзацу.


Ділянки та форматування символів

Run представляє ділянку тексту, що має один набір форматування; його властивість Text містить вміст простого тексту, а його властивість Font (об’єкт Font) містить форматування на рівні символів — Name, Size, Bold, Italic, Underline, Color, HighlightColor, Subscript/Superscript, StrikeThrough та багато іншого. Font.ClearFormatting() скидає шрифт ділянки до значень за замовчуванням. Ділянки абзацу доступні через його властивість Runs, RunCollection.


Абзаци та форматування абзаців

Paragraph — це складений вузол, який містить ділянки (та інший вбудований вміст) одного абзацу; абзаци документа або тіла доступні як ParagraphCollection (Body.Paragraphs). Paragraph.ParagraphFormat (об’єкт ParagraphFormat) керує розташуванням на рівні абзацу — Alignment, відступами (LeftIndent, RightIndent, FirstLineIndent), інтервалами (SpaceBefore, SpaceAfter, LineSpacing, LineSpacingRule) та поведінкою пагінації (KeepTogether, KeepWithNext, PageBreakBefore, WidowControl). ParagraphFormat.ClearFormatting() скидає їх до значень за замовчуванням, а Paragraph.JoinRunsWithSameFormatting() об’єднує суміжні ділянки з ідентичним форматуванням.


Читання та заміна тексту за допомогою діапазону

Кожен вузол, який містить вміст — 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 — відповіді є повними об’єктами коментарів, а не простими рядками.

Поширені проблеми

ПроблемаПричинаВиправлення
Форматування Run’s Font не змінює візуально прилеглий текстПрилеглий текст знаходиться в іншому 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Керує тим, чи і як абзац бере участь у списку.

Дивіться також

 Українська