Cách tải tài liệu Word trong .NET
Cách tải tài liệu Word trong .NET
Aspose.Words FOSS cho .NET đọc một tài liệu vào bộ nhớ ngay khi bạn tạo một Document đối tượng — mọi đường tải trong thư viện đều đi qua Documentcác overload của hàm khởi tạo và LoadOptions lớp. Hướng dẫn này cho thấy cách tải một tài liệu từ tệp hoặc luồng, cung cấp mật khẩu hoặc cài đặt đặc thù cho định dạng, và kiểm soát những gì xảy ra khi quá trình tải gặp tài nguyên bên ngoài hoặc tài liệu có thể bị hỏng. Aspose.Words FOSS cho .NET được biên dịch từ mã nguồn và được tham chiếu trực tiếp trong dự án thay vì cài đặt từ nguồn gói — xem Hướng dẫn cài đặt cho các bước xây dựng trước khi thực hiện các nhiệm vụ bên dưới.
Hướng dẫn từng bước
Bước 1: Tải tài liệu từ tệp hoặc luồng
Document có năm hàm tạo. Document() tạo một tài liệu mới, trống thay vì tải một tài liệu. Document(fileName) tải trực tiếp từ một đường dẫn trên đĩa, và Document(stream) tải từ bất kỳ Stream có thể đọc được nào — hữu ích khi nguồn không phải là tệp, như nội dung đã có trong bộ nhớ hoặc nhận qua kết nối mạng. Cả hai đều có một overload đi kèm chấp nhận một đối số thứ hai, Document(fileName, loadOptions) và Document(stream, loadOptions), là điểm vào cho mọi nhiệm vụ khác trong hướng dẫn này.
Bước 2: Tải tài liệu được bảo vệ bằng mật khẩu
Xây dựng một LoadOptions với mật khẩu trước khi gọi Document(fileName, loadOptions) (hoặc phiên bản overload cho stream). new LoadOptions(password) đặt LoadOptions.Password trực tiếp; thay vào đó, đặt Password trên một thể hiện LoadOptions() không tham số trước khi truyền vào. Cung cấp mật khẩu ngay từ đầu thay vì tải trước và phản hồi khi gặp lỗi — Aspose.Words FOSS cho .NET cần mật khẩu để phân tích một tệp được bảo vệ, vì vậy không có trạng thái tải một phần nào để khôi phục.
Bước 3: Áp dụng các tùy chọn riêng theo định dạng cho nguồn Văn bản và Markdown
Các nguồn Văn bản thuần và Markdown chấp nhận các cài đặt mà LoadOptions cơ sở không tiết lộ. TxtLoadOptions thêm AutoNumberingDetection và DetectNumberingWithWhitespaces để nhận dạng danh sách có số trong văn bản thuần, DetectHyperlinks để chuyển các URL thô thành siêu liên kết, DocumentDirection (LeftToRight, RightToLeft, hoặc Auto) cho hướng luồng văn bản, và các LeadingSpacesOptions/TrailingSpacesOptions riêng biệt (kiểu TxtLeadingSpacesOptions/TxtTrailingSpacesOptions) để xử lý khoảng trắng ở đầu và cuối mỗi dòng. MarkdownLoadOptions thêm PreserveEmptyLines, ImportUnderlineFormatting, và SoftLineBreakCharacter để kiểm soát cách các quy ước ngắt dòng của Markdown ánh xạ vào đoạn văn và chuỗi. Cả hai lớp con đều kế thừa từ LoadOptions, vì vậy mật khẩu hoặc callback tải tài nguyên được đặt trên bất kỳ lớp nào đều hoạt động giống như trên lớp cơ sở — truyền thể hiện riêng theo định dạng cho Document(fileName, loadOptions) chính xác như bạn sẽ truyền một LoadOptions thuần.
Bước 4: Chuyển hướng hoặc chặn các tài nguyên bên ngoài trong quá trình tải
Đặt LoadOptions.ResourceLoadingCallback thành một triển khai của IResourceLoadingCallback khi bạn cần kiểm soát cách một tài nguyên bên ngoài được tham chiếu bởi tài liệu được giải quyết trong khi tải. Phương thức ResourceLoading(args) của nó nhận một ResourceLoadingArgs mô tả ResourceType của tài nguyên (Image, Font, CssStyleSheet, hoặc Document) cùng với Uri và OriginalUri, và trả về một ResourceLoadingAction — Default để tải tài nguyên bình thường, Skip để bỏ qua, hoặc UserProvided để thay thế dữ liệu được cung cấp qua ResourceLoadingArgs.SetData(data).
Bước 5: Đặt mặc định ngôn ngữ và hành vi phục hồi
Khi siêu dữ liệu ngôn ngữ của tài liệu bị thiếu hoặc không đáng tin cậy, đặt LoadOptions.LanguagePreferences.DefaultEditingLanguage thành một giá trị EditingLanguage trước khi tải, và sử dụng AddEditingLanguage(language) hoặc AddEditingLanguages(languages) trên LanguagePreferences để đăng ký các ngôn ngữ bổ sung mà tài liệu có thể chứa. Đối với các nguồn có thể bị sai cấu trúc, đặt LoadOptions.RecoveryMode thành một giá trị DocumentRecoveryMode — None để tải mà không cố gắng phục hồi, hoặc TryRecover để bộ tải cố gắng khắc phục một số vấn đề cấu trúc thay vì thất bại hoàn toàn khi tải.
Các vấn đề thường gặp và cách khắc phục
Việc tải một tài liệu được bảo vệ bằng mật khẩu vẫn ném ra ngoại lệ sau khi cung cấp mật khẩu. Xác nhận mật khẩu đã được đặt trên đúng LoadOptions instance được truyền vào Document(fileName, loadOptions) (hoặc overload stream) — qua new LoadOptions(password) hoặc bằng cách thiết lập Password sau đó — và đây là đối tượng thực sự được truyền vào hàm khởi tạo. A LoadOptions được tạo ra nhưng chưa bao giờ được chuyển cho Document không ảnh hưởng gì đến quá trình tải.
Các cài đặt riêng cho Text hoặc Markdown dường như không được áp dụng. Kiểm tra rằng một TxtLoadOptions or MarkdownLoadOptions instance — không phải base LoadOptions — đã được truyền tới Document constructor. Chỉ lớp con mới phô bày các thuộc tính đặc thù của định dạng; việc truyền lớp base vẫn biên dịch nhưng âm thầm bỏ qua chúng.
Các tài nguyên bên ngoài không được chặn hoặc chuyển hướng. ResourceLoadingCallback phải được đặt trên cùng LoadOptions đối tượng được truyền cho Document constructor, và nó phải được gán trước khi gọi load. Gán nó sau khi quá trình tải đã hoàn tất sẽ không có tác dụng.
Tài liệu bị lỗi vẫn không tải được sau khi thiết lập RecoveryMode. DocumentRecoveryMode.TryRecover cho phép bộ tải khắc phục một số vấn đề cấu trúc trong tài liệu, nhưng sự hỏng hóc nghiêm trọng hơn vẫn có thể ngăn tài liệu tải thành công.
Một tài liệu được tải từ một Stream hoạt động khác so với cùng tệp được tải bằng đường dẫn. Xác minh vị trí của luồng ở đầu trước khi truyền nó tới Document(stream) or Document(stream, loadOptions) — một luồng bị dừng ở giữa nội dung sẽ chỉ tải phần byte còn lại.
Câu hỏi thường gặp
Làm thế nào để tải một tài liệu mà không có bất kỳ tùy chọn đặc biệt nào?
Truyền một đường dẫn tệp hoặc một Stream trực tiếp tới Document(fileName) hoặc Document(stream) — LoadOptions chỉ cần thiết khi cần mật khẩu, cài đặt đặc thù cho định dạng, hoặc một callback.
Sự khác nhau giữa LoadOptions, TxtLoadOptions và MarkdownLoadOptions là gì?
TxtLoadOptions và MarkdownLoadOptions đều kế thừa từ LoadOptions và thêm các cài đặt riêng cho nguồn văn bản thuần và Markdown tương ứng. Mọi thuộc tính LoadOptions chung — mật khẩu, mã hoá, callbacks — vẫn khả dụng trên cả hai lớp con.
Tôi có thể tải tài liệu trực tiếp từ một mảng byte không?
Đóng gói các byte trong một MemoryStream và truyền luồng đó tới Document(stream) hoặc Document(stream, loadOptions) — không có hàm khởi tạo nào chấp nhận mảng byte trực tiếp.
Làm sao tôi có thể kiểm soát những gì xảy ra khi trình tải không thể giải quyết một tài nguyên bên ngoài?
Triển khai IResourceLoadingCallback và gán nó cho LoadOptions.ResourceLoadingCallback. Trả về ResourceLoadingAction.Skip từ ResourceLoading(args) để bỏ qua tài nguyên thay vì để quá trình tải thất bại.
Việc đặt RecoveryMode có thay đổi cách một tài liệu hợp lệ được tải không?
Không. DocumentRecoveryMode chỉ thay đổi hành vi khi bộ tải thực sự gặp phải các vấn đề cấu trúc — một tài liệu đúng định dạng sẽ được tải theo cùng một cách bất kể cài đặt.