Як працювати з індексом 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: Оновити поля після змін у документі
Зміст (TOC), покажчик або таблиця авторитетних джерел не оновлюються автоматично, коли змінюється оточуючий вміст. Викличте Update() для конкретного поля — наприклад FieldToc.Update() — щоб переобчислити його результат, або FieldToc.UpdatePageNumbers(), коли потрібно оновити лише частину з номером сторінки. Щоб оновити всі поля в документі одночасно, а не по одному, викличте Document.UpdateFields(). Пам’ятайте, що номери сторінок у результатах цих полів у цьому випуску є значеннями-заповнювачами, оскільки розмітка сторінок і пагінація не входять до нього.
Крок 6: Включити записи з інших документів
Вставте FieldRD, щоб зміст (TOC), покажчик або таблицю авторитетів під час компіляції отримували записи з іншого файлу. FieldRD.FileName називає посиланий документ, а IsPathRelative контролює, чи шлях розв’язується відносно поточного документа. Додайте один FieldRD для кожного додаткового документа та оновіть поле компіляції після цього, щоб комбінований результат включав посиланий вміст.
Типові проблеми та їх вирішення
Зміст не включає очікувані заголовки. Рядок перемикачів TOC (або 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(), щоб оновити всі поля в документі.
Чи можна створити зміст або індекс, який охоплює кілька документів?
Так — вставте FieldRD, який вказує на кожен додатковий документ через FileName. Поле компіляції (FieldToc, FieldIndex або FieldToa) включає записи з посилань на документи після його оновлення.