Как работать с индексом и таблицами Word в .NET
Как работать с индексом Word и таблицами в .NET
Это руководство показывает, как вставлять и создавать управляемые полями структуры ссылок, которые документы Word используют для суммирования собственного содержимого — оглавление, алфавитный указатель и список источников — с помощью Aspose.Words FOSS для .NET. Каждая из них собирается из полей-маркеров, расположенных в других частях документа: FieldToc собирает записи, основанные на заголовках, и помеченные FieldTC, FieldIndex собирает маркеры FieldXE, а FieldToa собирает цитаты FieldTA. Каждый класс поля в этой семье наследуется от базового типа Field в пространстве имён Aspose.Words.Fields.
Пошаговое руководство
Шаг 1: Вставить оглавление
Вызовите DocumentBuilder.InsertTableOfContents(switches) в позиции, где должно появиться оглавление, передавая строку переключателей полей в стиле Word — например "\o \"1-3\" \h \z \u" — для управления тем, какие уровни заголовков включаются и как форматируется результат, те же переключатели, которые Word использует при вставке оглавления через пользовательский интерфейс. Это вставляет FieldToc, который также раскрывает ту же структуру напрямую как свойства: HeadingLevelRange/EntryLevelRange для включённых уровней структуры, InsertHyperlinks, PreserveTabs/PreserveLineBreaks и BookmarkName. Для списка рисунков вместо оглавления установите TableOfFiguresLabel или CaptionlessTableOfFiguresLabel в том же FieldToc.
Шаг 2: Пометить пользовательские записи оглавления
Не каждый пункт, который должен быть включён в Оглавление (TOC), берётся из стиля заголовка. Вставьте FieldTC в определённое место, чтобы пометить его как пункт Оглавления, независимый от стиля абзаца: FieldTC.Text — текст пункта, EntryLevel — уровень структуры, на котором он должен появиться, а OmitPageNumber подавляет номер страницы для этого пункта. Когда документ требует более одного Оглавления — например, основное Оглавление и отдельную таблицу иллюстраций — установите FieldTC.TypeIdentifier в значение, соответствующее EntryIdentifier FieldToc, который должен его собрать.
Шаг 3: Создать указатель из помеченных записей
Пометьте каждое место, которое должно входить в указатель, с помощью FieldXE, задав Text как текст пункта; EntryType группирует пункты в подуровни, используя синтаксис с двоеточием, а PageRangeBookmarkName отмечает закладку, диапазон которой становится диапазоном страниц в указателе вместо отдельного номера страницы. FieldIndex собирает каждый маркер FieldXE в документе в алфавитный результат — установите Heading для вставки разделителей-заголовков букв (A, B, C…), LetterRange для ограничения указателя частью алфавита и RunSubentriesOnSameLine для управления макетом подзаписей. PageNumberSeparator, PageRangeSeparator, SequenceSeparator и CrossReferenceSeparator управляют пунктуацией между пунктом и его ссылкой на страницу. Встроенные визуальные стили указателя Word доступны как перечисление FieldIndexFormat (Template, Classic, Fancy, Modern, Bulleted, Formal, Simple).
Шаг 4: Создать таблицу авторитетных источников из цитат
Пометьте каждую цитату в тексте с помощью FieldTA: LongCitation и ShortCitation содержат текст цитаты, EntryCategory группирует её под заголовком, например «Дела» или «Законы», а IsBold/IsItalic управляют её форматированием. FieldToa собирает эти цитаты в таблицу — EntryCategory выбирает, какую категорию собирать, UseHeading контролирует отображение заголовков категорий, UsePassim применяет правило «passim» для источников, цитируемых многократно, и PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting управляют макетом.
Шаг 5: Обновить поля после изменения документа
Оглавление, указатель или таблица авторитетных источников не обновляются автоматически при изменении окружающего содержимого. Вызовите Update() для конкретного поля — например FieldToc.Update() — чтобы пересчитать его результат, или FieldToc.UpdatePageNumbers(), если нужно обновить только часть с номером страницы. Чтобы обновить все поля в документе сразу, а не по отдельности, вызовите Document.UpdateFields(). Помните, что номера страниц в результатах этих полей в данном издании являются заполнителями, поскольку макет страницы и нумерация в него не входят.
Шаг 6: Включить записи из других документов
Вставьте FieldRD, чтобы оглавление (TOC), указатель или таблица судебных ссылок подтягивали записи из другого файла при компиляции. FieldRD.FileName указывает имя ссылочного документа, а IsPathRelative управляет тем, будет ли путь разрешён относительно текущего документа. Добавьте один FieldRD для каждого дополнительного документа и затем обновите поле компиляции, чтобы объединённый результат включал ссылочное содержимое.
Распространённые проблемы и их решения
Оглавление не включает ожидаемые заголовки. Строка переключения ОГЛ (или HeadingLevelRange) исключает эти уровни структуры. Отрегулируйте переключатели, передаваемые в InsertTableOfContents, или установить FieldToc.HeadingLevelRange напрямую.
Запись индекса не появляется там, где ожидается. Соответствующий FieldXE маркер отсутствует, или его EntryType синтаксис нижнего уровня не соответствует тому, что FieldIndex ожидает. Подтвердите FieldXE маркеры существуют и их EntryType значения отформатированы последовательно.
Результаты поля выглядят устаревшими после редактирования контента. Поле не было обновлено после правки. Вызовите Update() для конкретного поля, или Document.UpdateFields() чтобы обновить все поля одновременно.
Записи из другого документа не включаются при компиляции. Нет FieldRD ссылка на существующий документ, или IsPathRelative не соответствует тому, как должен разрешаться путь. Добавьте FieldRD с правильным FileName and IsPathRelative настройкой.
Часто задаваемые вопросы
Как программно вставить таблицу содержания?
Вызовите DocumentBuilder.InsertTableOfContents(switches) со строкой переключателей в стиле Word, например "\o \"1-3\" \h \z \u", в позиции, где должно появиться оглавление.
Как пометить текст как запись указателя?
Вставьте поле FieldXE в этом месте, установив его свойство Text в текст записи; FieldIndex собирает все маркеры FieldXE в документе в результат указателя.
В чем разница между FieldTC и записью оглавления, основанной на заголовке?
Поведение оглавления по умолчанию в Word собирает записи из абзацев, использующих стили заголовков. FieldTC помечает произвольное место как запись оглавления независимо от стиля абзаца, которое FieldToc может включить, сопоставив значения EntryIdentifier/TypeIdentifier.
Как обновить оглавление или указатель после изменения документа?
Вызовите Update() на конкретном поле (или UpdatePageNumbers() на FieldToc только для номеров страниц), либо Document.UpdateFields() для обновления всех полей в документе.
Можно ли собрать оглавление (TOC) или указатель из нескольких документов?
Да — вставьте FieldRD, указывающий на каждый дополнительный документ через FileName. Поле компиляции (FieldToc, FieldIndex или FieldToa) включает записи из ссылаемых документов после его обновления.