Создание полей с помощью FieldBuilder
Создание полей с FieldBuilder
Это руководство показывает, как создать поле Word с нуля в Aspose.Words FOSS для .NET, используя FieldBuilder and FieldArgumentBuilder, вместо того чтобы работать с уже существующим полем в документе. Для чтения, обновления или удаления существующих полей см. Работа с полями руководство.
Создание поля с FieldBuilder
FieldBuilder создает поле из токенов кода поля— аргументов и переключателей. Создайте его с помощью new FieldBuilder(fieldType), передавая FieldType поля, которое вы хотите построить. Добавляйте аргументы с помощью перегруженного метода AddArgument(argument), который принимает string, int, double, вложенный FieldBuilder или FieldArgumentBuilder. Добавляйте переключатели с помощью перегруженных методов AddSwitch(switchName), AddSwitch(switchName, switchArgument) (string) или AddSwitch(switchName, switchArgument) (int/double).
Вставка построенного поля
После того как у FieldBuilder есть аргументы и переключатели, вызовите BuildAndInsert(refNode), чтобы вставить его в документ— одна перегрузка принимает узел Inline и вставляет поле перед ним, другая принимает Paragraph и вставляет поле в конец этого абзаца.
Создание сложных аргументов с FieldArgumentBuilder
FieldArgumentBuilder создает сложный аргумент поля, состоящий из полей, узлов и обычного текста, для случаев, когда один аргумент требует больше, чем простая строка. Создайте его с помощью new FieldArgumentBuilder(), затем вызовите AddText(text), чтобы добавить обычный текст, AddNode(node), чтобы добавить узел Inline, или AddField(fieldBuilder), чтобы вложить другое поле (созданное с помощью собственного FieldBuilder) внутрь аргумента. Передайте завершенный FieldArgumentBuilder в FieldBuilder.AddArgument(argument), чтобы использовать его в качестве одного из аргументов внешнего поля.
Советы и лучшие практики
- Используйте
FieldBuilder, когда создаете тип поля, который не поддерживается одним из специальных классов полей (например,FieldDateилиFieldSymbol), либо когда генерируете коды полей программно из данных, а не вручную. - Вложите дочернее поле в аргумент внешнего поля с помощью
FieldBuilder.AddArgument(FieldBuilder)для простого случая, либо создайте смешанный аргумент из текста, узлов и вложенных полей с помощьюFieldArgumentBuilder, когда аргумент состоит более чем из одного поля. - Выберите перегрузку
BuildAndInsert(refNode), соответствующую месту, куда вы хотите поместить поле — перед конкретным узломInlineили в конецParagraph. - После
BuildAndInsertобращайтесь с результатом как с любым другим полем в дереве — например, вызовитеUpdate()для него, если тип поля требует явного пересчёта.
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
BuildAndInsert направлен в неправильное место | Для предполагаемой точки вставки использована неправильная перегрузка | Передайте узел Inline, чтобы вставить перед ним, или Paragraph, чтобы вставить в его конец |
| Аргумент поля не принимает одновременно обычный текст и узел | AddArgument был вызван с одиночным string/int/double вместо составного аргумента | Сформируйте смешанный аргумент с помощью FieldArgumentBuilder (AddText, AddNode, AddField) и передайте его в AddArgument |
| Значение переключателя не распознаётся в сгенерированном коде поля | AddSwitch(switchName) был использован, хотя переключателю действительно требуется аргумент | Используйте перегрузку AddSwitch(switchName, switchArgument) со строковым, целочисленным или double-значением переключателя |
FAQ
Когда следует использовать FieldBuilder вместо вставки готового кода поля?
Используйте FieldBuilder, когда вам нужен явный контроль над аргументами и переключателями поля при их программном построении, а не при вставке готовой строки кода поля.
Как добавить более одного аргумента к полю?
Вызовите AddArgument один раз на каждый аргумент — он перегружен для string, int, double, вложенного FieldBuilder и FieldArgumentBuilder.
Могу ли я создать поле, аргумент которого содержит смесь текста и другого поля?
Да — используйте FieldArgumentBuilder, вызывая AddText, AddNode и AddField по мере необходимости, затем передайте его в FieldBuilder.AddArgument.
Как фактически поместить построенное поле в документ?
Вызовите BuildAndInsert(refNode), передавая либо узел Inline (вставка перед ним), либо Paragraph (вставка в его конец).
API Reference Сводка
| Класс/Метод | Описание: |
|---|---|
FieldBuilder | Создаёт поле из токенов кода поля (аргументы и переключатели) |
FieldBuilder(fieldType) | Конструктор, принимающий FieldType для построения |
FieldBuilder.AddArgument(argument) | Добавляет аргумент (string, int, double, FieldBuilder или FieldArgumentBuilder) |
FieldBuilder.AddSwitch(switchName) / AddSwitch(switchName, switchArgument) | Добавляет переключатель поля, сзначением или без него |
FieldBuilder.BuildAndInsert(refNode) | Вставляет построенное поле перед узлом Inline или в конец Paragraph |
FieldArgumentBuilder | Создаёт сложный аргумент поля из текста, узлов и вложенных полей |
FieldArgumentBuilder.AddText(text) | Добавляет простой текст к аргументу |
FieldArgumentBuilder.AddNode(node) | Добавляет узел Inline к аргументу |
FieldArgumentBuilder.AddField(fieldBuilder) | Встраивает поле, построенное FieldBuilder, в аргумент |