Строительные блоки

Строительные блоки

Это руководство показывает, как читать и изменять переиспользуемые блоки контента, хранящиеся в глоссарии документа с Aspose.Words FOSS для .NET. Библиотека предоставляет AutoText записи, титульные страницы, заголовки, колонтитулы и аналогичный предопределённый контент через Document.GlossaryDocument и объектную модель BuildingBlock/BuildingBlockCollection.


Документ глоссария

Каждый Document содержит GlossaryDocument — доступный через Document.GlossaryDocument — который сам является подклассом DocumentBase, содержащим строительные блоки. Его свойство BuildingBlocks возвращает BuildingBlockCollection, при этом FirstBuildingBlock/LastBuildingBlock обеспечивают быстрый доступ к концам списка. Найдите конкретный строительный блок с помощью GetBuildingBlock(gallery, category, name), сопоставляя его BuildingBlockGallery, строку категории и имя вместе.


Структура строительного блока

BuildingBlock является CompositeNode, поэтому он содержит собственное дерево контента — Sections (это SectionCollection), FirstSection и LastSection — так же, как Document содержит разделы. Его свойства метаданных идентифицируют и классифицируют его: Name, Guid, Description, Category, Gallery (это BuildingBlockGallery — AutoText, CoverPage, Headers, Footers, Tables, Watermarks и десятки других предопределённых галерей), Type (это BuildingBlockType), и Behavior (это BuildingBlockBehavior из Content, Paragraph или Page), управляющие тем, как его содержимое объединяется с документом при вставке.


Управление коллекцией строительных блоков

BuildingBlockCollection поддерживает полное редактирование коллекций: Add(node), Insert(index, node), Remove(node), RemoveAt(index), Clear(), Contains(node) и IndexOf(node), а также ToArray() и GetEnumerator() для чтения. Поскольку это NodeCollection, строительные блоки можно создавать, клонировать и перемещать, используя те же API узлов, что и любой другой элемент дерева документа.


Текст-заполнитель строительных блоков

Теги структурированного документа могут ссылаться на строительный блок как содержимое-заполнитель: StructuredDocumentTag.Placeholder и StructuredDocumentTagRangeStart.Placeholder оба возвращают BuildingBlock, отображаемый, когда тег пуст, через общее свойство IStructuredDocumentTag.Placeholder.


Советы и лучшие практики

  • Тщательно сопоставляйте три аргумента GetBuildingBlock(gallery, category, name) — одно и то же имя может существовать в разных галереях или категориях.
  • Используйте BuildingBlockGallery для фильтрации типа переиспользуемого контента, который вам нужен (AutoText, CoverPage, Tables, Watermarks и т.д.), вместо того чтобы просматривать каждый строительный блок только по имени.
  • BuildingBlockBehavior определяет, как вставленное содержимое объединяется с окружающим документом (Content, Paragraph или Page) — проверьте это, прежде чем предполагать, что строительный блок вставится так, как вы ожидаете.
  • Поскольку BuildingBlock является CompositeNode, рассматривайте его как любой другой поддерево узла при построении или редактировании его содержимого — применяются AppendChild, InsertAfter и аналогичные методы узлов.

Типичные проблемы

ПроблемаПричинаИсправление
GetBuildingBlock() ничего не возвращаетГалерея, категория или имя не точно соответствуют существующему строительному блокуПеречислите GlossaryDocument.BuildingBlocks, чтобы найти точную комбинацию Gallery/Category/Name
Вставленное содержимое строительного блока неожиданно объединяетсяBehavior (Content/Paragraph/Page) не учтеноПроверьте BuildingBlock.Behavior перед вставкой, чтобы понять, как произойдёт слияние
Заполнитель тега структурированного документа не показывает ожидаемое содержаниеPlaceholder указывает на другой BuildingBlock, чем предполагалосьПрочитайте StructuredDocumentTag.Placeholder, чтобы подтвердить, какой строительный блок действительно упоминается

FAQ

Где в документе хранятся строительные блоки?

В GlossaryDocument документа, доступном через Document.GlossaryDocument, свойство BuildingBlocks которого является BuildingBlockCollection.

Как найти конкретный строительный блок, например запись AutoText?

Вызовите GlossaryDocument.GetBuildingBlock(gallery, category, name) с соответствующим BuildingBlockGallery, категорией и именем.

Могу ли я программно добавлять новые строительные блоки?

Да — BuildingBlockCollection поддерживает Add(node) и Insert(index, node), поскольку это NodeCollection.

Что контролирует BuildingBlockBehavior?

Как содержимое строительного блока объединяется с документом при вставке — как Content, целый Paragraph или целый Page.

Как строительный блок связан с текстом заполнителя тега структурированного документа?

StructuredDocumentTag.Placeholder (и StructuredDocumentTagRangeStart.Placeholder) возвращают BuildingBlock, который поставляет содержимое заполнителя SDT, когда оно пусто.


API Reference Сводка

Класс / МетодОписание:
Document.GlossaryDocumentGlossaryDocument документа, содержащий все строительные блоки
GlossaryDocument.BuildingBlocksBuildingBlockCollection каждого строительного блока
GlossaryDocument.GetBuildingBlock()Ищет строительный блок по галерее, категории и имени
BuildingBlockCompositeNode с Name, Gallery, Category, Behavior, Type, Sections
BuildingBlockCollectionAdd(), Insert(), Remove(), Clear(), Contains(), IndexOf()
BuildingBlockGallery / BuildingBlockType / BuildingBlockBehaviorПеречисления, классифицирующие строительный блок
StructuredDocumentTag.PlaceholderЭлемент BuildingBlock, используемый в качестве заполнителя в SDT

См. также:

 Русский