Робота з текстом
Робота з текстом
Текст у документі 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 | Керує тим, чи і як абзац бере участь у списку. |