Информация о документе

Информация о документе

Информация о документе

Это руководство показывает, как читать и записывать метаданные документа с помощью 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 / FieldDocPropertyAUTHOR, COMMENTS и DOCPROPERTY поля; Update(), Result, GetFieldCode()
DocumentBuilder.InsertField()Вставляет поле по коду поля или FieldType

См. также:

 Русский