Cách làm việc với văn bản trong .NET
Hướng dẫn này cho thấy cách làm việc với văn bản trong Aspose.Words FOSS cho .NET: định dạng phông chữ của một run, định dạng một đoạn văn, tìm và thay thế văn bản bằng Range, thêm nhận xét, và chuyển một đoạn văn thành một mục danh sách. Aspose.Words FOSS cho .NET có sẵn qua NuGet hoặc bằng cách biên dịch từ mã nguồn.
Hướng dẫn từng bước
Bước 1: Lấy Thư viện
Sao chép kho và biên dịch Aspose.Words.sln trong cấu hình Release, sau đó thêm một tham chiếu dự án tới Aspose.Words.csproj từ dự án .NET của bạn, như mô tả trong Hướng dẫn Cài đặt. Thêm using Aspose.Words; ở đầu bất kỳ tệp nào làm việc với văn bản.
Bước 2: Định dạng phông chữ của một Run
Một Run là một đoạn văn bản chia sẻ một bộ định dạng; thuộc tính Text của nó chứa nội dung văn bản thuần và thuộc tính Font (một đối tượng Font) chứa định dạng ở mức ký tự — Name, Size, Bold, Italic, Underline, Color, HighlightColor, Subscript/Superscript, và StrikeThrough trong số các thuộc tính khác. Font.ClearFormatting() đặt lại một run về mặc định. Các run của một đoạn văn có sẵn qua thuộc tính Runs của nó, một RunCollection. Đặt các thuộc tính phông chữ trên DocumentBuilder.Font trước khi viết văn bản mới thường đơn giản hơn so với việc định dạng các đối tượng Run riêng lẻ sau khi đã tạo.
Bước 3: Định dạng một Đoạn văn
Paragraph.ParagraphFormat (một đối tượng ParagraphFormat) kiểm soát bố cục ở mức độ đoạn văn: Alignment, lề (LeftIndent, RightIndent, FirstLineIndent), khoảng cách (SpaceBefore, SpaceAfter, LineSpacing, LineSpacingRule), và hành vi phân trang (KeepTogether, KeepWithNext, PageBreakBefore, WidowControl). ParagraphFormat.ClearFormatting() đặt lại chúng về mặc định, và Paragraph.JoinRunsWithSameFormatting() hợp nhất các run liền kề có cùng định dạng — hữu ích sau khi một loạt chỉnh sửa bằng chương trình để lại một đoạn văn với nhiều run hơn mức cần thiết.
Bước 4: Tìm và Thay thế Văn bản bằng Phạm vi
Mỗi nút chứa nội dung — một Document, Section, Paragraph, hoặc Run — đều cung cấp một Range. Range.Text trả về văn bản thuần của mọi thứ bên trong phạm vi đó, và Range.Replace(pattern, replacement) thực hiện thao tác tìm và thay thế chỉ trong phạm vi đó: gọi nó trên Range của một Paragraph để thay đổi văn bản trong chỉ một đoạn văn, hoặc trên Document.Range để tìm kiếm toàn bộ tài liệu. Range.Delete() loại bỏ hoàn toàn nội dung của phạm vi.
Bước 5: Thêm một Bình luận
Tạo một Comment bằng new Comment(doc, author, initial, dateTime), đặt văn bản của nó bằng SetText(text), sau đó chèn nó vào cây giống như bất kỳ nút nào khác. Comment.AddReply(author, initial, dateTime, text) gắn một phản hồi dạng chuỗi — cũng là một Comment — và RemoveReply(reply) / RemoveAllReplies() lấy các phản hồi ra. Các bình luận của tài liệu được tập hợp trong một CommentCollection.
Bước 6: Chuyển một Đoạn văn thành Mục danh sách
Paragraph.ListFormat (một đối tượng ListFormat) báo cáo và kiểm soát việc một đoạn văn có tham gia vào danh sách hay không: IsListItem và ListLevelNumber báo cáo trạng thái hiện tại của nó. ApplyBulletDefault() chuyển đoạn văn thành một mục gạch đầu dòng mặc định và ApplyNumberDefault() thành một mục đánh số mặc định; ListIndent() / ListOutdent() thay đổi mức độ lồng nhau của nó, và RemoveNumbers() chuyển nó trở lại thành một đoạn văn thường.
Các vấn đề thường gặp và cách khắc phục
Định dạng một Run’s font không thay đổi văn bản liền kề. Văn bản liền kề là một phần khác Run với riêng của nó Font đối tượng. Hoặc xác định và định dạng mọi phần bị ảnh hưởng Run, hoặc đặt định dạng cho DocumentBuilder.Font trước khi viết văn bản mới.
Range.Replace thay đổi văn bản ngoài khu vực dự định. Replace đã được gọi trên Document.Range thay vì phạm vi của một nút hẹp hơn. Gọi nó trên phần cụ thể Paragraph or Section đoạn văn bản này nên được thay đổi.
Một đoạn văn trông giống như một mục danh sách có dấu đầu dòng nhưng IsListItem is false. Dấu đầu dòng là văn bản đã gõ, không phải định dạng danh sách thực. Áp dụng nó với ListFormat.ApplyBulletDefault() thay vào.
Tài liệu cuối cùng có nhiều hơn rất nhiều Run các nút hơn mong đợi. Các chỉnh sửa lập trình nhỏ lặp lại làm tách các đoạn chạy mà không ghép lại. Gọi Paragraph.JoinRunsWithSameFormatting() sau một loạt các chỉnh sửa.
Câu hỏi thường gặp
Sự khác nhau giữa Run và Paragraph là gì?
Một Run là một đoạn văn bản chia sẻ một bộ định dạng ký tự (Font). Một Paragraph là nút tổng hợp chứa một hoặc nhiều run cộng với định dạng cấp đoạn (ParagraphFormat).
Làm thế nào để tôi đọc toàn bộ văn bản trong một tài liệu hoặc một phần duy nhất?
Đọc thuộc tính Text của Range của nút đó — document.Range.Text hoặc section.Range.Text.
Làm thế nào để tôi thay thế văn bản chỉ trong một đoạn, không phải toàn bộ tài liệu?
Gọi Replace(pattern, replacement) trên Range của Paragraph, không phải trên Document.Range.
Làm thế nào để tôi trả lời một bình luận hiện có?
Gọi Comment.AddReply(author, initial, dateTime, text) trên thể hiện Comment gốc.
Làm thế nào để tôi chuyển một mục danh sách có số trở lại thành đoạn văn thuần?
Gọi RemoveNumbers() trên ListFormat của đoạn văn đó.