Thông tin tài liệu
Thông tin tài liệu
Hướng dẫn này cho thấy cách đọc và ghi siêu dữ liệu tài liệu bằng Aspose.Words FOSS cho .NET. Mỗi Document đã tải hoặc mới tạo đều chứa hai loại siêu dữ liệu bên cạnh nội dung của nó: một tập hợp cố định các thuộc tính tích hợp (tác giả, tiêu đề, số từ, và tương tự) và một tập hợp mở rộng các thuộc tính tùy chỉnh mà bạn tự định nghĩa. Aspose.Words FOSS cho .NET cũng triển khai các trường Word hiển thị siêu dữ liệu này trong phần thân tài liệu — AUTHOR, COMMENTS, và DOCPROPERTY — để các giá trị thuộc tính có thể xuất hiện dưới dạng văn bản sống, có thể cập nhật.
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ới một thuộc tính cho mỗi trường siêu dữ liệu chuẩn của Word: Author, Title, Subject, Comments, Category, Company, Manager, Keywords, CreatedTime, LastSavedTime, LastSavedBy, LastPrinted, RevisionNumber, TotalEditingTime, và các thống kê như Pages, Words, Characters, CharactersWithSpaces, Paragraphs, và Lines. Vì BuiltInDocumentProperties kế thừa từ DocumentPropertyCollection, nó cũng hỗ trợ tra cứu theo tên thông qua bộ chỉ mục của nó, Contains(), IndexOf(), và việc liệt kê qua GetEnumerator(). Bộ sưu tập tương tự được hiển thị trên PlainTextDocument.BuiltInDocumentProperties khi làm việc với đầu vào văn bản thuần.
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 các thuộc tính mà một ứng dụng tự định nghĩa — các cặp tên/giá trị tùy ý mà Word lưu trữ bên cạnh tập hợp tích hợp sẵn. Thêm một thuộc tính bằng Add(name, value), được nạp chồng qua CustomDocumentProperties cho các kiểu giá trị mà thuộc tính có thể chứa; truy xuất một thuộc tính theo tên bằng bộ chỉ mục, ví dụ properties[name]; và xóa các mục bằng Remove(name), RemoveAt(index), hoặc Clear(). AddLinkToContent(name, linkSource) tạo một thuộc tính có giá trị được liên kết với một dấu trang hoặc vùng trong tài liệu thay vì được lưu dưới dạng giá trị cố định.
Mỗi mục trong bất kỳ bộ sưu tập nào — tích hợp sẵn hay tùy chỉnh — là một DocumentProperty, cung cấp Name, Value, và Type (một giá trị PropertyType: String, Number, Double, Boolean, DateTime, StringArray, ObjectArray, ByteArray, hoặc Other), cùng với IsLinkToContent và LinkSource cho các thuộc tính liên kết. DocumentProperty cung cấp các công cụ chuyển đổi như ToString(), ToInt(), ToDouble(), ToDateTime(), ToBool(), và ToByteArray() để truy xuất giá trị nền tảng ở kiểu .NET mong muốn.
Các Trường Thông Tin Tài Liệu
Ba lớp con Field hiển thị siêu dữ liệu tài liệu dưới dạng các trường trong thân tài liệu: FieldAuthor (trường AUTHOR, với thuộc tính AuthorName), FieldComments (trường COMMENTS, với thuộc tính Text), và FieldDocProperty (trường DOCPROPERTY, đọc một thuộc tính tài liệu có tên — tích hợp sẵn hoặc tùy chỉnh — vào tài liệu). Giống như mọi Field, ba cái này chia sẻ vòng đời cơ bản Field: GetFieldCode() để đọc mã trường nền, Result / DisplayResult để đọc giá trị đã tính cuối cùng, Update() để tính lại giá trị, Unlink() để thay thế trường bằng kết quả tĩnh của nó, và Remove() để xóa nó. Chèn một trường thông tin tài liệu bằng DocumentBuilder.InsertField(fieldCode) — ví dụ mã trường AUTHOR hoặc DOCPROPERTY "Company" — hoặc bằng cách ghi đè InsertField(fieldType, updateField) sử dụng giá trị FieldType như FieldType.FieldAuthor, FieldType.FieldComments, hoặc FieldType.FieldDocProperty.
Vì FieldDocProperty đọc bất kỳ thuộc tính tài liệu nào mà nó được ràng buộc, việc thay đổi giá trị BuiltInDocumentProperties hoặc CustomDocumentProperties nền và sau đó gọi Update() — hoặc Document.UpdateFields() để làm mới mọi trường trong tài liệu cùng một lúc — sẽ truyền giá trị mới vào kết quả hiển thị của trường.
Mẹo và Thực Hành Tốt Nhất
- Đặt các thuộc tính tích hợp sẵn như
Title,AuthorvàSubjecttrước khi lưu — Word và các trình tiêu thụ khác đọc chúng từBuiltInDocumentPropertiesđể liệt kê tài liệu và lập chỉ mục tìm kiếm. - Sử dụng
DocumentProperty.Typeđể kiểm traPropertyTypecủa một thuộc tính trước khi gọi một trợ giúp chuyển đổi cụ thể (ToInt(),ToDateTime(), v.v.) để tránh sự không khớp chuyển đổi trên một thuộc tính mà bạn không tự tạo. AddLinkToContent()giữ cho một thuộc tính tùy chỉnh được đồng bộ với nội dung tài liệu (chẳng hạn một đoạn được đánh dấu) thay vì một giá trị cố định — hãy sử dụng nó khi thuộc tính cần luôn phản ánh những gì hiện có trong tài liệu.- Gọi
Document.UpdateFields()sau khi thay đổi các thuộc tính tài liệu để bất kỳ trườngFieldDocProperty,FieldAuthorhoặcFieldCommentsnào đã có trong thân tài liệu đều nhận được các giá trị mới. BuiltInDocumentPropertiesvàCustomDocumentPropertiesđều có sẵn trênPlainTextDocumentcũng nhưDocument, vì vậy metadata được truyền qua lại ngay cả khi nội dung đã tải là văn bản thuần.
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Cách khắc phục |
|---|---|---|
Trình lập chỉ mục trả về null cho một thuộc tính tùy chỉnh | Thuộc tính chưa được thêm vào | Gọi CustomDocumentProperties.Add(name, value) trước, hoặc kiểm tra Contains(name) trước khi đọc |
FieldDocProperty hiển thị giá trị cũ sau khi thay đổi thuộc tính | Trường chưa được làm mới | Gọi Update() trên trường, hoặc Document.UpdateFields() để làm mới mọi trường trong tài liệu |
DocumentProperty.ToInt() / ToDateTime() ném | Giá trị thực tế Type của thuộc tính không khớp với phép chuyển đổi được yêu cầu | Kiểm tra DocumentProperty.Type trước khi chọn trợ giúp chuyển đổi nào để gọi |
FAQ
Sự khác biệt giữa thuộc tính tài liệu tích hợp sẵn và thuộc tính tùy chỉnh là gì?
Các thuộc tính tích hợp sẵn (Document.BuiltInDocumentProperties) là một tập cố định được định nghĩa bởi định dạng OOXML — Author, Title, Pages, và các tương tự. Các thuộc tính tùy chỉnh (Document.CustomDocumentProperties) là một tập không giới hạn, do ứng dụng định nghĩa, gồm các cặp tên/giá trị được thêm bằng Add().
Làm thế nào để tôi tạo một thuộc tính tùy chỉnh theo dõi nội dung tài liệu thay vì một giá trị cố định?
Sử dụng CustomDocumentProperties.AddLinkToContent(name, linkSource), nó liên kết giá trị của thuộc tính với một dấu trang hoặc phạm vi trong tài liệu thay vì lưu trữ một giá trị tĩnh.
Việc cập nhật một thuộc tính tài liệu có tự động cập nhật các trường hiển thị nó không?
Không — gọi Update() trên trường cụ thể hoặc Document.UpdateFields() để tính lại mọi trường trong tài liệu, bao gồm các thể hiện FieldDocProperty, FieldAuthor và FieldComments.
Tôi có thể đọc thuộc tính tài liệu từ một tài liệu văn bản thuần không?
Có. PlainTextDocument cung cấp cùng các thuộc tính BuiltInDocumentProperties và CustomDocumentProperties như Document.
API Reference Tóm tắt
| Lớp / Phương thức | Mô tả |
|---|---|
Document.BuiltInDocumentProperties | Bộ sưu tập siêu dữ liệu OOXML chuẩn (Author, Title, Pages, v.v.) |
Document.CustomDocumentProperties | Bộ sưu tập thuộc tính tên/giá trị do ứng dụng định nghĩa |
CustomDocumentProperties.Add() / bộ chỉ mục theo tên / AddLinkToContent() | Thêm, truy xuất, hoặc liên kết nội dung một thuộc tính tùy chỉnh |
DocumentProperty | Mục nhập thuộc tính đơn; Value, Type, và ToString()/ToInt()/ToDouble()/ToDateTime()/ToBool()/ToByteArray() công cụ hỗ trợ chuyển đổi |
FieldAuthor / FieldComments / FieldDocProperty | AUTHOR, COMMENTS, và DOCPROPERTY trường; Update(), Result, GetFieldCode() |
DocumentBuilder.InsertField() | Chèn một trường bằng mã trường hoặc FieldType |