Нумерация полей (AUTONUM, PAGE, SEQ и др.)
Полев нумерации (AUTONUM, PAGE, SEQ и другие)
Это руководство показывает, как работать с полями автоматической нумерации в Word Aspose.Words FOSS для .NET, и как они отличаются от нумерации, основанной на списках. Работа со списками covers List, ListFormat, и ListLevel – объектная модель, лежащая в основе нумерованных и маркированных абзацев списков Word. У Word также есть отдельная семья нумерации fields которая вычисляет номер в месте расположения поля в тексте, а не через форматирование списка абзацев: автоматическая нумерация юридических и структурных документов, счётчики страниц и разделов, нумерация, привязанная к списку, и именованные последовательности. Она моделирует каждую как Field подкласс в the Aspose.Words.Fields пространство имён, плюс NumberStyle перечисление, используемое уровнями списков, сносками и концевыми сносками, а также номерами страниц для выбора способа отображения числа.
Поля автоматической нумерации: AUTONUM, AUTONUMLGL, AUTONUMOUT
FieldAutoNum реализует AUTONUM поле (простая последовательная нумерация) и предоставляет SeparatorCharacter. FieldAutoNumLgl implements AUTONUMLGL (нумерация в стиле legal/outline), добавляя RemoveTrailingPeriod наряду со своим SeparatorCharacter. FieldAutoNumOut implements AUTONUMOUT (outline numbering) и не имеет собственных свойств, кроме базовых Field члены, описанные в Работа с полями.
Нумерация, привязанная к списку, с FieldListNum
FieldListNum реализует поле LISTNUM: ListName задаёт название абстрактного определения нумерации, которое следует использовать, а HasListName сообщает, поставляет ли код поля действительно имя. ListLevel переопределяет уровень списка по умолчанию, в котором поле нумерует, а StartingNumber задаёт значение, с которого начинается нумерация поля.
Счётчики страниц и разделов: FieldPage, FieldSection, FieldSectionPages
FieldPage реализует PAGE поле и FieldSectionPages implements SECTIONPAGES. Оба зависят от вычисленного макета страницы для получения результата; как и NUMPAGES поле, описанное в Работа с полями, значения полей, зависящие от макета, не вычисляются в этом издании, потому что оно не включает движок макета/рендеринга страниц, поэтому эти поля оцениваются как заполнитель 0. FieldSection implements SECTION, возвращая текущий номер раздела документа – он не зависит от пагинации и не подвержен этому ограничению.
Именованные последовательности с FieldSeq
FieldSeq реализует поле SEQ для именованных, независимо нумерованных последовательностей (например, рисунков или таблиц): SequenceIdentifier задает имя последовательности, а BookmarkName опционально указывает поле на элемент в другом месте документа вместо собственного расположения поля. InsertNextNumber вставляет следующее число в последовательность без отображения значения для текущей позиции, а ResetNumber / ResetHeadingLevel сбрасывают счётчик последовательности до определённого числа или перезапускают его на определённом уровне заголовка.
FieldRevNum
FieldRevNum реализует поле REVNUM и не имеет собственных свойств, кроме базовых членов Field.
Форматирование чисел с помощью NumberStyle
NumberStyle — это перечисление, используемое на разных уровнях списков, при нумерации сносок/конечных сносок и номеров страниц для выбора способа отображения числа. Распространённые стили включают Arabic, UppercaseRoman / LowercaseRoman, UppercaseLetter / LowercaseLetter, Ordinal и OrdinalText, а также большой набор стилистик, специфичных для локали (Kanji, Hangul, Hanja, ThaiLetter, HindiLetter1 и многие другие) плюс Bullet, LeadingZero, None и Custom для пользовательского формата.
Советы и лучшие практики
- Обратитесь к
FieldListNum, когда число должно ссылаться на существующее определение списка по имени; используйтеFieldAutoNum/FieldAutoNumLgl/FieldAutoNumOutдля нумерации, не привязанной к конкретномуList. - Помните, что
FieldPageиFieldSectionPagesзависят от макета, так же как иNUMPAGES— не полагайтесь на то, что ихResultотражают реальное вычисленное количество страниц в этом издании. - Используйте
FieldSeq.BookmarkName, когда поле SEQ должно ссылаться на число, определённое в другом месте документа, а не увеличивать собственный счётчик в месте поля. - Установите
FieldSeq.ResetHeadingLevel, когда нумерованная последовательность (например, номера рисунков) должна начинаться заново при каждой новой главе или заголовке раздела.
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
FieldPage или FieldSectionPages всегда показывает 0 | Эти поля зависят от вычисленного макета страницы, который не входит в это издание | Ожидаемое поведение – используйте коммерческую Aspose.Words для .NET если требуется вычисленное количество страниц |
FieldListNum не использует ожидаемое форматирование списка | ListName не соответствует определению абстрактной нумерации, присутствующему в документе | Подтвердите точное имя списка или проверьте HasListName, чтобы увидеть, предоставляет ли код поля его вообще |
Номера FieldSeq не перезапускаются там, где ожидалось | ResetNumber или ResetHeadingLevel не были заданы в поле, которое должно перезапустить последовательность | Установите соответствующее свойство сброса для этого экземпляра FieldSeq |
FAQ
В чём разница между нумерацией списка и этими полями нумерации?
Нумерация списка (List, ListFormat, ListLevel, охвачено в Работа со списками) форматирует целые абзацы как элементы списка. Поля на этой странице вычисляют число в определённой точке текста – для последовательностей, счётчиков страниц/разделов или юридического автонумерования – независимо от форматирования списка абзацев.
Почему поле PAGE всегда оценивается как 0?
FieldPage зависит от вычисленного макета страницы, и в этом издании отсутствует движок макета/рендеринга страниц — та же причина, по которой NUMPAGES оценивается как заполнительное значение.
Как создать именованную, независимо нумеруемую последовательность, например «Figure 1», «Figure 2»?
Используйте FieldSeq с постоянным SequenceIdentifier (например, "Figure") для каждого экземпляра поля; каждый из них отображает следующее число в этой последовательности.
Как управлять тем, в каком числовом или буквенном стиле отображается число?
Используйте перечисление NumberStyle — значения такие как Arabic, UppercaseRoman, LowercaseLetter и OrdinalText выбирают стиль рендеринга, а также Bullet, None и Custom для ненумерических или задаваемых вызывающим форматах.
API Reference Сводка
| Класс / Enum | Описание: |
|---|---|
FieldAutoNum | AUTONUM поле; SeparatorCharacter |
FieldAutoNumLgl | AUTONUMLGL поле; RemoveTrailingPeriod, SeparatorCharacter |
FieldAutoNumOut | AUTONUMOUT поле |
FieldListNum | LISTNUM поле; ListName, HasListName, ListLevel, StartingNumber |
FieldPage | PAGE поле (зависит от макета; даёт значение 0 в этом издании) |
FieldSection | SECTION поле |
FieldSectionPages | SECTIONPAGES поле (зависит от макета; даёт значение 0 в этом издании) |
FieldSeq | SEQ поле; SequenceIdentifier, BookmarkName, InsertNextNumber, ResetNumber, ResetHeadingLevel |
FieldRevNum | REVNUM поле |
NumberStyle | Перечисление стилей отображения чисел, используемых уровнями списков, сносками/концевыми сносками и номерами страниц |