Строительные блоки
Строительные блоки
Это руководство показывает, как читать и изменять переиспользуемые блоки контента, хранящиеся в глоссарии документа с 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.GlossaryDocument | GlossaryDocument документа, содержащий все строительные блоки |
GlossaryDocument.BuildingBlocks | BuildingBlockCollection каждого строительного блока |
GlossaryDocument.GetBuildingBlock() | Ищет строительный блок по галерее, категории и имени |
BuildingBlock | CompositeNode с Name, Gallery, Category, Behavior, Type, Sections |
BuildingBlockCollection | Add(), Insert(), Remove(), Clear(), Contains(), IndexOf() |
BuildingBlockGallery / BuildingBlockType / BuildingBlockBehavior | Перечисления, классифицирующие строительный блок |
StructuredDocumentTag.Placeholder | Элемент BuildingBlock, используемый в качестве заполнителя в SDT |