Робота з полями індексу та таблиць
Робота з полями індексу та таблиць
Цей посібник показує, як працювати з сімейством полів Word «Index and Tables» — полями, що стоять за таблицею змісту, індексом, таблицею рисунків та таблицею авторитетних джерел. Кожне з них є підкласом Field у просторі імен Aspose.Words.Fields: FieldToc (таблиця змісту або рисунків), FieldIndex (індекс), FieldXE (запис індексу), FieldToa (таблиця авторитетних джерел), FieldTA (запис таблиці авторитетних джерел або цитата), FieldTC (запис таблиці змісту) та FieldRD (документ-посилання, для створення комбінованого індексу або змісту в декількох файлах).
Базовий клас поля
Кожен клас поля в цьому сімействі успадковується від Field, який надає Start, Separator та End (вузли FieldStart, FieldSeparator і FieldEnd, що обмежують поле у потоці run), Type (значення FieldType — FieldTOC, FieldIndex, FieldTOA, FieldTOCEntry, FieldIndexEntry, FieldTOAEntry або FieldRefDoc для цього сімейства), Result/DisplayResult (поточний обчислений текст поля), IsLocked і IsDirty, а також методи GetFieldCode(), Update(), Unlink() і Remove(). Update() переобчислює результат поля; для таблиці змісту це означає перебудову списку записів з заголовків документа або маркерів FieldTC.
Вставка таблиці змісту
DocumentBuilder.InsertTableOfContents(switches) вставляє FieldToc у поточну позицію будівельника, використовуючи рядок перемикачів поля Word (наприклад "\o \"1-3\" \h \z \u") для керування рівнями заголовків, які включаються, та форматуванням результату — ті ж перемикачі, які Word сам записує під час вставки змісту через інтерфейс. Після вставки FieldToc.UpdatePageNumbers() переобчислює частину номеру сторінки існуючих записів. FieldToc також надає властивості, що безпосередньо керують структурою змісту: HeadingLevelRange і EntryLevelRange (які рівні структури включені), EntryIdentifier (ідентифікатор поля TC, який має збирати зміст, для створення кількох змістів з різних маркерів FieldTC), InsertHyperlinks, PreserveTabs/PreserveLineBreaks, EntrySeparator/SequenceSeparator, BookmarkName, і — для таблиці рисунків замість таблиці змісту — TableOfFiguresLabel і CaptionlessTableOfFiguresLabel.
Позначення користувацьких записів таблиці змісту
Не кожен запис у змісті (TOC) походить зі стилю заголовка. FieldTC позначає певне місце як запис у змісті, незалежно від стилю абзацу: FieldTC.Text — це текст запису, EntryLevel — це рівень структури, на якому він має з’явитися, TypeIdentifier зв’язує його з FieldToc.EntryIdentifier при створенні більш ніж одного змісту, а OmitPageNumber придушує номер сторінки для цього запису.
Створення індексу
FieldIndex реалізує поле INDEX, яке збирає маркери FieldXE (запис індексу) документа в алфавітний індекс. FieldXE.Text — це текст запису, EntryType групує записи у підрівні за допомогою синтаксису з розділенням двокрапкою, PageRangeBookmarkName позначає закладку, діапазон якої стає діапазоном сторінок в індексі замість окремого номера сторінки, а IsBold/IsItalic форматує отримане посилання на сторінку. На FieldIndex боці, Heading вставляє розділювачі-заголовки за літерами (A, B, C…), LetterRange обмежує індекс підмножиною алфавіту, RunSubentriesOnSameLine керує розташуванням підзаписів, а PageNumberSeparator/PageRangeSeparator/SequenceSeparator/CrossReferenceSeparator контролюють пунктуацію між записом і його посиланням на сторінку. FieldIndexFormat окремо перелічує вбудовані в Word візуальні стилі індексу (Template, Classic, Fancy, Modern, Bulleted, Formal, Simple).
Таблиця авторитетних джерел
FieldToa і FieldTA є еквівалентом авторитетних джерел для FieldIndex/FieldXE: FieldTA позначає цитату в тексті (LongCitation і ShortCitation текст, EntryCategory для групування під заголовком, наприклад “Справи” або “Статутів”, і IsBold/IsItalic для форматування), а FieldToa збирає ці цитати у таблицю, при цьому EntryCategory вибирає, яку категорію компілювати, UseHeading і UsePassim керують заголовками категорій та конвенцією «passim» для джерел, що цитуються багато разів, а PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting керують макетом.
Посилання на вміст з інших документів
FieldRD реалізує поле RD, яке вказує полю змісту, індексу або таблиці авторитетних джерел включати записи з іншого файлу під час компіляції — FieldRD.FileName — це посиланий документ, а IsPathRelative контролює, чи шлях розв’язується відносно поточного документа.
Поради та найкращі практики
- Створюйте рядок перемикача TOC так само, як це робить Word (
\o "1-3" \h \z \u), замість того щоб налаштовувати кожну властивістьFieldTocокремо, а потім корегуйте лише ті конкретні властивості, які потрібно змінити. - Викликайте
FieldToc.UpdatePageNumbers()(абоField.Update()) після змін вмісту, щоб зміст, покажчик або таблиця авторитетів відображали поточний документ, а не застарілі результати з моменту їх вставки. - Використовуйте
FieldTC.TypeIdentifierразом зFieldToc.EntryIdentifier, коли документ потребує більше ніж один TOC (наприклад, основний TOC і окрему таблицю рисунків), створених з різних наборів записів. - Встановіть
FieldXE.PageRangeBookmarkName(або еквівалентне позначення діапазону уFieldTA), замість того щоб вручну форматувати діапазон сторінок у тексті запису, щоб покажчик/таблиця залишалися послідовними, якщо вміст переміщується. - Пам’ятайте, що номери сторінок у результатах INDEX/TOC/TOA цього випуску оцінюються як заповнювачі, а не як реальні номери сторінок, оскільки розмітка сторінок і пагінація не входять до цього випуску.
Поширені проблеми
| Проблема | Причина | Виправлення |
|---|---|---|
| Зміст не включає очікувані заголовки | Рядок перемикачів змісту (або HeadingLevelRange) виключає ці рівні структури | Відкоригуйте перемикачі, що передаються до InsertTableOfContents, або встановіть FieldToc.HeadingLevelRange |
| Запис індексу не з’являється там, де очікувалося | Відповідний маркер FieldXE відсутній, або його підрівневий синтаксис EntryType не відповідає тому, що очікує FieldIndex | Підтвердьте, що маркери FieldXE існують, і їхні значення EntryType форматуються послідовно |
| Результати поля виглядають застарілими після редагування контенту | Поле не оновилось після редагування | Викличте Update() на полі (або UpdateFields() на Document) |
| Записи з іншого документа не включаються під час компіляції | Не існує FieldRD, що посилається на цей документ, або IsPathRelative не відповідає тому, як має розв’язуватись шлях | Додайте FieldRD з правильними налаштуваннями FileName та IsPathRelative |
FAQ
Як вставити зміст програмно?
Викличте DocumentBuilder.InsertTableOfContents(switches) зі строкою перемикачів у стилі Word, наприклад "\o \"1-3\" \h \z \u", у позиції, де має з’явитися зміст.
Як позначити текст як запис індексу?
Вставте поле FieldXE у цьому місці (наприклад через DocumentBuilder.InsertField) з його властивістю Text, встановленою на текст запису; FieldIndex збирає всі маркери FieldXE у документі в індексний результат.
У чому різниця між FieldTC і записами змісту, що базуються на заголовках?
Стандартна поведінка змісту в Word збирає записи з абзаців, використовуючи стилі заголовків. FieldTC дозволяє позначити довільне місце як запис змісту незалежно від стилю абзаца, який FieldToc може включити шляхом збігу значень EntryIdentifier/TypeIdentifier.
Як оновити зміст або індекс після змін у документі?
Викличте Update() для конкретного поля (наприклад FieldToc.Update(), або FieldToc.UpdatePageNumbers() лише для номерів сторінок), або Document.UpdateFields(), щоб оновити всі поля в документі.
Чи можу я зібрати зміст або індекс з кількох документів?
Так — вставте поле FieldRD, яке вказує на кожен додатковий документ за допомогою FileName; поле компіляції (FieldToc, FieldIndex або FieldToa) включає записи з посилань документів, коли воно оновлюється.
API Reference Огляд
| Клас/Метод | Опис |
|---|---|
Field | Базовий клас для всіх типів полів, включаючи Start/Separator/End, Type, Update() |
DocumentBuilder.InsertTableOfContents(switches) | Вставити FieldToc за допомогою перемикачів TOC у стилі Word |
FieldToc | Реалізує поле TOC (таблиця змісту або таблиця рисунків) |
FieldTC | Позначає користувацький запис у змісті в певному місці |
FieldIndex | Реалізує поле INDEX, компілюючи маркери FieldXE |
FieldXE | Позначає місце як запис індексу |
FieldToa | Реалізує поле table-of-authorities, компілюючи маркери FieldTA |
FieldTA | Позначає цитату для таблиці посилань |
FieldRD | Посилається на вміст іншого документа під час складання TOC, покажчика або таблиці авторитетів |
FieldIndexFormat | Enum вбудованих візуальних стилів індексу Word |