Информация о документе
Информация о документе
Это руководство показывает, как читать и записывать метаданные документа с помощью Aspose.Words FOSS для .NET. Каждый загруженный или только что созданный Document содержит два типа метаданных наряду с содержимым: фиксированный набор встроенных свойств (автор, заголовок, количество слов и аналогичные) и неограниченный набор пользовательских свойств, которые вы определяете сами. Aspose.Words FOSS для .NET также реализует поля Word, которые выводят эти метаданные внутри тела документа — AUTHOR, COMMENTS и DOCPROPERTY — так что значения свойств могут отображаться как живой, обновляемый текст.
Встроенные свойства документа
Document.BuiltInDocumentProperties возвращает коллекцию BuiltInDocumentProperties с одним свойством для каждого стандартного поля метаданных Word: Author, Title, Subject, Comments, Category, Company, Manager, Keywords, CreatedTime, LastSavedTime, LastSavedBy, LastPrinted, RevisionNumber, TotalEditingTime и статистики, такой как Pages, Words, Characters, CharactersWithSpaces, Paragraphs и Lines. Поскольку BuiltInDocumentProperties наследуется от DocumentPropertyCollection, он также поддерживает поиск по имени через свой индексатор, Contains(), IndexOf() и перечисление через GetEnumerator(). Та же коллекция доступна в PlainTextDocument.BuiltInDocumentProperties при работе с простым текстовым вводом.
Пользовательские свойства документа
Document.CustomDocumentProperties возвращает коллекцию CustomDocumentProperties для свойств, определяемых самим приложением — произвольные пары имя/значение, которые Word сохраняет рядом со встроенным набором. Добавьте свойство с помощью Add(name, value), который перегружен для CustomDocumentProperties типов значений, которые может хранить свойство; получите его по имени через индексатор, например properties[name]; и удалите записи с помощью Remove(name), RemoveAt(index) или Clear(). AddLinkToContent(name, linkSource) создаёт свойство, значение которого связано с закладкой или диапазоном внутри документа, а не хранится как фиксированное значение.
Каждая запись в любой из коллекций — встроенной или пользовательской — представляет собой DocumentProperty, который предоставляет Name, Value и Type (значение PropertyType: String, Number, Double, Boolean, DateTime, StringArray, ObjectArray, ByteArray или Other), а также IsLinkToContent и LinkSource для связанных свойств. DocumentProperty предоставляет вспомогательные функции преобразования, такие как ToString(), ToInt(), ToDouble(), ToDateTime(), ToBool() и ToByteArray() для получения базового значения в требуемом типе .NET.
Поля информации о документе
Три подкласса Field раскрывают метаданные документа в виде полей внутри самого тела документа: FieldAuthor (поле AUTHOR с свойством AuthorName), FieldComments (поле COMMENTS с свойством Text), и FieldDocProperty (поле DOCPROPERTY, которое считывает именованное свойство документа — встроенное или пользовательское — в документ). Как и каждый Field, эти три разделяют базовый жизненный цикл Field: GetFieldCode() для чтения исходного кода поля, Result / DisplayResult для чтения последнего вычисленного значения, Update() для перевычисления значения, Unlink() для замены поля его статическим результатом и Remove() для его удаления. Вставьте поле информации о документе с помощью DocumentBuilder.InsertField(fieldCode) — например, код поля AUTHOR или DOCPROPERTY "Company" — или с перегрузкой InsertField(fieldType, updateField), используя значение FieldType, такое как FieldType.FieldAuthor, FieldType.FieldComments или FieldType.FieldDocProperty.
Поскольку FieldDocProperty читает любое свойство документа, к которому привязан, изменение базового значения BuiltInDocumentProperties или CustomDocumentProperties и последующий вызов Update() — или Document.UpdateFields() для обновления всех полей в документе одновременно — передают новое значение в отображаемый результат поля.
Советы и лучшие практики
- Установите встроенные свойства, такие как
Title,AuthorиSubject, перед сохранением — Word и другие потребители читают их изBuiltInDocumentPropertiesдля списков документов и индексации поиска. - Используйте
DocumentProperty.Type, чтобы проверитьPropertyTypeсвойства перед вызовом конкретного помощника преобразования (ToInt(),ToDateTime()и т.д.), чтобы избежать несоответствия преобразования для свойства, которое вы не создавали. AddLinkToContent()поддерживает пользовательское свойство синхронизированным с содержимым документа (например, с диапазоном, отмеченным закладкой), а не фиксированным значением — используйте его, когда свойство должно всегда отражать текущее состояние документа.- Вызовите
Document.UpdateFields()после изменения свойств документа, чтобы любые поляFieldDocProperty,FieldAuthorилиFieldComments, уже находящиеся в теле документа, получили новые значения. BuiltInDocumentPropertiesиCustomDocumentPropertiesдоступны как вPlainTextDocument, так и вDocument, поэтому метаданные передаются даже когда загруженный контент представляет собой обычный текст.
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
Индексатор возвращает null для пользовательского свойства | Свойство ещё не добавлено | Сначала вызовите CustomDocumentProperties.Add(name, value), или проверьте Contains(name) перед чтением |
FieldDocProperty отображает устаревшее значение после изменения свойства | Поле не было обновлено | Вызовите Update() для поля или Document.UpdateFields(), чтобы обновить все поля в документе |
DocumentProperty.ToInt() / ToDateTime() выбрасывает | Фактическое Type свойства не соответствует запрошенному преобразованию | Проверьте DocumentProperty.Type перед тем, как выбирать, какой помощник преобразования вызывать |
FAQ
В чем разница между встроенными и пользовательскими свойствами документа?
Встроенные свойства (Document.BuiltInDocumentProperties) — это фиксированный набор, определённый форматом OOXML — Author, Title, Pages и аналогичные. Пользовательские свойства (Document.CustomDocumentProperties) представляют собой открытый, определяемый приложением набор пар «имя/значение», добавляемый с помощью Add().
Как сделать так, чтобы пользовательское свойство отслеживало содержание документа, а не фиксированное значение?
Используйте CustomDocumentProperties.AddLinkToContent(name, linkSource), который связывает значение свойства с закладкой или диапазоном в документе, вместо того чтобы хранить статическое значение.
Обновление свойства документа автоматически обновляет поля, которые его отображают?
Нет — вызовите Update() для конкретного поля или Document.UpdateFields(), чтобы пересчитать каждое поле в документе, включая экземпляры FieldDocProperty, FieldAuthor и FieldComments.
Могу ли я читать свойства документа из простого текстового документа?
Да. PlainTextDocument предоставляет те же свойства BuiltInDocumentProperties и CustomDocumentProperties, что и Document.
API Reference Сводка
| Класс / Метод | Описание: |
|---|---|
Document.BuiltInDocumentProperties | Стандартный набор метаданных OOXML (Author, Title, Pages и т.д.) |
Document.CustomDocumentProperties | Коллекция свойств имя/значение, определяемая приложением |
CustomDocumentProperties.Add() / индексатор по имени / AddLinkToContent() | Добавить, получить или связать контентом пользовательское свойство |
DocumentProperty | Отдельный элемент свойства; Value, Type, и ToString()/ToInt()/ToDouble()/ToDateTime()/ToBool()/ToByteArray() вспомогательные функции преобразования |
FieldAuthor / FieldComments / FieldDocProperty | AUTHOR, COMMENTS и DOCPROPERTY поля; Update(), Result, GetFieldCode() |
DocumentBuilder.InsertField() | Вставляет поле по коду поля или FieldType |