Cách làm việc với Thuộc tính Tài liệu trong .NET
Cách làm việc với các thuộc tính tài liệu trong .NET
Mỗi tài liệu Word chứa hai loại siêu dữ liệu — các trường tiêu chuẩn mà Word theo dõi cho mọi tệp, và bất kỳ giá trị nào do ứng dụng định nghĩa mà một chương trình đã thêm vào. Hướng dẫn này cho thấy cách đọc và thiết lập cả hai bằng Aspose.Words FOSS cho .NET, sử dụng Document.BuiltInDocumentProperties và Document.CustomDocumentProperties, cả hai cuối cùng đều được xây dựng trên cùng một biểu diễn DocumentProperty.
Hướng dẫn từng bước
Bước 1: Đọc và thiết lập các thuộc tính tài liệu tích hợp sẵn
Document.BuiltInDocumentProperties trả về một bộ sưu tập BuiltInDocumentProperties. Vì đây là một tập hợp các thuộc tính cố định, đã biết, các giá trị được đọc và ghi như các thành viên thông thường thay vì tra cứu theo tên — ví dụ BuiltInDocumentProperties.Author, .Title, .Subject, .Manager, .Company, .Category, .Keywords và .Comments cho các trường mô tả, hoặc .CreatedTime, .LastSavedTime, .LastPrinted và .LastSavedBy cho các dấu thời gian. Các thống kê như .Characters, .CharactersWithSpaces, .Lines và .Bytes cũng được hiển thị theo cách này, cùng với .Template và .HyperlinkBase.
Bước 2: Thêm một thuộc tính tài liệu tùy chỉnh
Document.CustomDocumentProperties trả về một bộ sưu tập CustomDocumentProperties cho siêu dữ liệu do ứng dụng định nghĩa mà không thuộc bộ mặc định của Word. Gọi một trong các overload Add(name, value) với tên và giá trị có kiểu — chuỗi, số, boolean, hoặc ngày, tùy thuộc vào overload nào phù hợp với kiểu của giá trị — để tạo một thuộc tính mới.
Bước 3: Liên kết Thuộc tính Tùy chỉnh với Nội dung Tài liệu
Thay vì một giá trị tĩnh, thuộc tính tùy chỉnh có thể theo dõi một đoạn nội dung được đánh dấu để giá trị của nó luôn đồng bộ với nội dung đó. Gọi CustomDocumentProperties.AddLinkToContent(name, linkSource), truyền tên bookmark làm linkSource, thay vì phải đồng bộ lại thủ công một thuộc tính tĩnh mỗi khi nội dung được liên kết thay đổi.
Bước 4: Tra cứu, Kiểm tra và Xóa Thuộc tính
Cả BuiltInDocumentProperties và CustomDocumentProperties đều kế thừa từ abstract DocumentPropertyCollection, vì vậy chúng được kiểm tra theo cùng một cách: truy cập theo tên (ví dụ properties[name]) sẽ lấy một thuộc tính, Contains(name) kiểm tra xem nó có tồn tại không, IndexOf(name) trả về vị trí của nó, và Count báo cáo số lượng thuộc tính mà bộ sưu tập chứa. Gọi Contains(name) trước khi truy cập theo tên khi một thuộc tính tùy chỉnh có thể không tồn tại, để tránh xử lý thuộc tính thiếu như một đường dẫn ngoại lệ. Xóa một thuộc tính bằng Remove(name) hoặc RemoveAt(index), hoặc xóa mọi thuộc tính trong bộ sưu tập bằng Clear().
Bước 5: Đọc Giá trị của Thuộc tính Tùy chỉnh mà Không Cần Biết Trước Kiểu Dữ liệu của Nó
Một DocumentProperty có một Name, một Value không có kiểu, và một Type — một giá trị enum PropertyType: Boolean, DateTime, Double, Number, String, StringArray, ObjectArray, ByteArray, hoặc Other. Vì Value không có kiểu, hãy sử dụng accessor có kiểu tương ứng thay vì ép kiểu trực tiếp: ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray(), hoặc ToString(). Kiểm tra IsLinkToContent và LinkSource để biết một thuộc tính có được liên kết với nội dung tài liệu (xem Bước 3) hay chỉ chứa giá trị tĩnh.
Bước 6: Kiểm tra Trạng thái Bảo vệ của Tài liệu
BuiltInDocumentProperties.Security báo cáo một giá trị DocumentSecurity mô tả siêu dữ liệu bảo vệ đã lưu của tài liệu: None, PasswordProtected, ReadOnlyRecommended, ReadOnlyEnforced, hoặc ReadOnlyExceptAnnotations. Đọc thuộc tính này trước khi quyết định có cần thực hiện xử lý liên quan đến bảo vệ thêm trên tài liệu đã tải hay không.
Các vấn đề thường gặp và cách khắc phục
Việc lập chỉ mục một CustomDocumentProperties collection theo tên trả về không có gì có thể sử dụng được. Thuộc tính không tồn tại trong tài liệu này. Call Contains(name) đầu tiên, hoặc thêm thuộc tính với appropriate Add(name, value) overload.
Đọc giá trị của custom property cho ra kiểu sai. DocumentProperty.Value là không có kiểu object; người gọi giả định một kiểu không khớp Type. Sử dụng bộ truy cập kiểu tương ứng (ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) dựa trên DocumentProperty.Type.
Giá trị của thuộc tính tùy chỉnh được liên kết trông có vẻ lỗi thời. Thuộc tính được liên kết qua AddLinkToContent, và nội dung đã được đánh dấu thay đổi. Xác nhận rằng linkSource đánh dấu vẫn chỉ ra phạm vi cần cung cấp cho giá trị của thuộc tính.
Thống kê từ như Characters or Lines không khớp với nội dung hiện tại thực tế của tài liệu. Thống kê tích hợp phản ánh siêu dữ liệu đã lưu, không phải đếm lại theo thời gian thực. Tính lại và cập nhật các BuiltInDocumentProperties giá trị nếu cần một đếm cập nhật.
Câu hỏi thường gặp
Làm sao để đọc hoặc đặt tác giả và tiêu đề của tài liệu?
Sử dụng Document.BuiltInDocumentProperties.Author và .Title trực tiếp — chúng là các thuộc tính chuỗi thông thường trên tập hợp BuiltInDocumentProperties được truy cập từ Document.BuiltInDocumentProperties.
Làm sao để thêm siêu dữ liệu đặc thù cho ứng dụng mà không phải là thuộc tính chuẩn của Word?
Sử dụng Document.CustomDocumentProperties.Add(name, value) với tên và giá trị của thuộc tính; phiên bản Add phù hợp sẽ được chọn dựa trên kiểu của giá trị.
Sự khác nhau giữa BuiltInDocumentProperties và CustomDocumentProperties là gì?
BuiltInDocumentProperties là tập hợp cố định các trường metadata chuẩn của Word, được truy cập như các thành viên có tên. CustomDocumentProperties là một tập hợp mở, có tên của các giá trị DocumentProperty cho metadata do ứng dụng định nghĩa, được truy cập bằng tên qua bộ chỉ mục (ví dụ properties[name]) và Contains.
Làm sao để làm cho một thuộc tính tùy chỉnh theo dõi một phần nội dung tài liệu thay vì một giá trị tĩnh?
Sử dụng CustomDocumentProperties.AddLinkToContent(name, linkSource), truyền tên bookmark dưới dạng linkSource; giá trị của thuộc tính sau đó sẽ phản ánh nội dung đã được đánh dấu.
Làm thế nào để tôi kiểm tra xem tài liệu có được bảo vệ bằng mật khẩu không?
Đọc Document.BuiltInDocumentProperties.Security, một giá trị DocumentSecurity; PasswordProtected cho thấy siêu dữ liệu được lưu trữ của tài liệu khai báo bảo vệ bằng mật khẩu.