Construindo Campos com FieldBuilder
Construindo Campos com FieldBuilder
Este guia mostra como construir um campo Word do zero em Aspose.Words FOSS para .NET usando FieldBuilder and FieldArgumentBuilder, em vez de trabalhar com um campo que já existe em um documento. Para ler, atualizar ou remover campos existentes, veja o Trabalhando com Campos guia.
Criando um Campo com FieldBuilder
FieldBuilder constrói um campo a partir de tokens de código de campo — argumentos e switches. Construa um com new FieldBuilder(fieldType), passando o FieldType do campo que você deseja construir. Adicione argumentos com o método sobrecarregado AddArgument(argument), que aceita um string, int, double, um FieldBuilder aninhado ou um FieldArgumentBuilder. Adicione switches com os métodos sobrecarregados AddSwitch(switchName), AddSwitch(switchName, switchArgument) (string) ou AddSwitch(switchName, switchArgument) (int/double).
Inserindo o Campo Construído
Depois que um FieldBuilder tem seus argumentos e switches, chame BuildAndInsert(refNode) para inseri-lo no documento — uma sobrecarga aceita um nó Inline e insere o campo antes dele, e outra aceita um Paragraph e insere o campo ao final desse parágrafo.
Compondo Argumentos Complexos com FieldArgumentBuilder
FieldArgumentBuilder constrói um argumento de campo complexo composto por campos, nós e texto simples, para casos em que um único argumento precisa de mais do que uma string simples. Crie um com new FieldArgumentBuilder(), então chame AddText(text) para adicionar texto simples, AddNode(node) para adicionar um nó Inline, ou AddField(fieldBuilder) para aninhar outro campo (construído com seu próprio FieldBuilder) dentro do argumento. Passe o FieldArgumentBuilder concluído para FieldBuilder.AddArgument(argument) para usá-lo como um dos argumentos do campo externo.
Dicas e Melhores Práticas
- Use
FieldBuilderao construir um tipo de campo que não é suportado por uma das classes de campo dedicadas (comoFieldDateouFieldSymbol), ou ao gerar códigos de campo programaticamente a partir de dados em vez de criá-los manualmente. - Aninhe um campo filho dentro do argumento de um campo externo com
FieldBuilder.AddArgument(FieldBuilder)para um caso simples, ou construa um argumento misto de texto, nós e campos aninhados comFieldArgumentBuilderquando o argumento for mais que um único campo. - Escolha a sobrecarga
BuildAndInsert(refNode)que corresponde ao local onde você deseja que o campo seja inserido — antes de um nóInlineespecífico, ou ao final de umParagraph. - Após
BuildAndInsert, trate o resultado como qualquer outro campo na árvore — por exemplo, chameUpdate()nele se o tipo de campo exigir uma recalculação explícita.
Problemas Comuns
| Problema | Causa | Correção |
|---|---|---|
BuildAndInsert aponta para o local errado | A sobrecarga errada foi usada para o ponto de inserção pretendido | Passe um nó Inline para inserir antes dele, ou um Paragraph para inserir ao final |
| Um argumento de campo não aceita texto simples e um nó ao mesmo tempo | AddArgument foi chamado com um único string/int/double ao invés de um argumento composto | Construa o argumento misto com FieldArgumentBuilder (AddText, AddNode, AddField) e passe-o para AddArgument |
| O valor do switch não é reconhecido no código de campo gerado | AddSwitch(switchName) foi usado quando o switch realmente precisa de um argumento | Use a sobrecarga AddSwitch(switchName, switchArgument) com o valor string, int ou double do switch |
FAQ
Quando devo usar FieldBuilder em vez de inserir um código de campo pré-formado?
Use FieldBuilder quando precisar de controle explícito sobre os argumentos e opções de um campo ao construí-los programaticamente, em vez de inserir uma string de código de campo pré-formada.
Como adiciono mais de um argumento a um campo?
Chame AddArgument uma vez por argumento — ele está sobrecarregado para string, int, double, um FieldBuilder aninhado e FieldArgumentBuilder.
Posso criar um campo cujo argumento contenha uma mistura de texto e outro campo?
Sim — use FieldArgumentBuilder, chamando AddText, AddNode e AddField conforme necessário, e então passe-o para FieldBuilder.AddArgument.
Como realmente insiro o campo construído no documento?
Chame BuildAndInsert(refNode), passando um nó Inline (insere antes dele) ou um Paragraph (insere ao final dele).
API Reference Resumo
| Classe/Método | Descrição |
|---|---|
FieldBuilder | Constrói um campo a partir de tokens de código de campo (argumentos e opções) |
FieldBuilder(fieldType) | Construtor que recebe o FieldType para construir |
FieldBuilder.AddArgument(argument) | Adiciona um argumento (string, int, double, FieldBuilder ou FieldArgumentBuilder) |
FieldBuilder.AddSwitch(switchName) / AddSwitch(switchName, switchArgument) | Adiciona um interruptor de campo, com ou sem valor |
FieldBuilder.BuildAndInsert(refNode) | Insere o campo construído antes de um nó Inline ou ao final de um Paragraph |
FieldArgumentBuilder | Constrói um argumento de campo complexo a partir de texto, nós e campos aninhados |
FieldArgumentBuilder.AddText(text) | Adiciona texto simples ao argumento |
FieldArgumentBuilder.AddNode(node) | Adiciona um nó Inline ao argumento |
FieldArgumentBuilder.AddField(fieldBuilder) | Aninha um campo construído por FieldBuilder no argumento |